init
commit
2aa0ab76d1
|
|
@ -0,0 +1,2 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# gltf model
|
||||
data/
|
||||
|
||||
# vs compile file
|
||||
out/
|
||||
.vs/
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
|
||||
cmake_policy(VERSION 2.8)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
|
||||
|
||||
set(NAME games_106)
|
||||
|
||||
project(${NAME})
|
||||
|
||||
include_directories(external)
|
||||
include_directories(external/glm)
|
||||
include_directories(external/gli)
|
||||
include_directories(external/imgui)
|
||||
include_directories(external/tinygltf)
|
||||
include_directories(external/ktx/include)
|
||||
include_directories(external/ktx/other_include)
|
||||
include_directories(base)
|
||||
|
||||
OPTION(USE_D2D_WSI "Build the project using Direct to Display swapchain" OFF)
|
||||
OPTION(USE_DIRECTFB_WSI "Build the project using DirectFB swapchain" OFF)
|
||||
OPTION(USE_WAYLAND_WSI "Build the project using Wayland swapchain" OFF)
|
||||
OPTION(USE_HEADLESS "Build the project using headless extension swapchain" OFF)
|
||||
|
||||
set(RESOURCE_INSTALL_DIR "" CACHE PATH "Path to install resources to (leave empty for running uninstalled)")
|
||||
|
||||
# Use FindVulkan module added with CMAKE 3.7
|
||||
if (NOT CMAKE_VERSION VERSION_LESS 3.7.0)
|
||||
message(STATUS "Using module to find Vulkan")
|
||||
find_package(Vulkan)
|
||||
endif()
|
||||
|
||||
IF(UNIX AND NOT APPLE)
|
||||
set(LINUX TRUE)
|
||||
ENDIF()
|
||||
|
||||
IF(WIN32)
|
||||
IF (NOT Vulkan_FOUND)
|
||||
find_library(Vulkan_LIBRARY NAMES vulkan-1 vulkan PATHS ${CMAKE_SOURCE_DIR}/libs/vulkan)
|
||||
IF (Vulkan_LIBRARY)
|
||||
set(Vulkan_FOUND ON)
|
||||
MESSAGE("Using bundled Vulkan library version")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_WIN32_KHR")
|
||||
ELSEIF(LINUX)
|
||||
IF (NOT Vulkan_FOUND)
|
||||
find_library(Vulkan_LIBRARY NAMES vulkan HINTS "$ENV{VULKAN_SDK}/lib" "${CMAKE_SOURCE_DIR}/libs/vulkan" REQUIRED)
|
||||
IF (Vulkan_LIBRARY)
|
||||
set(Vulkan_FOUND ON)
|
||||
MESSAGE("Using bundled Vulkan library version")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
find_package(Threads REQUIRED)
|
||||
IF(USE_D2D_WSI)
|
||||
MESSAGE("Using direct to display extension...")
|
||||
add_definitions(-D_DIRECT2DISPLAY)
|
||||
ELSEIF(USE_DIRECTFB_WSI)
|
||||
find_package(DirectFB REQUIRED)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_DIRECTFB_EXT")
|
||||
include_directories(${DIRECTFB_INCLUDE_DIR})
|
||||
ELSEIF(USE_WAYLAND_WSI)
|
||||
find_program(PKG_CONFIG pkg-config)
|
||||
if (NOT PKG_CONFIG)
|
||||
message(FATAL_ERROR "pkg-config binary not found")
|
||||
endif ()
|
||||
find_package(Wayland REQUIRED)
|
||||
if (NOT WAYLAND_FOUND)
|
||||
message(FATAL_ERROR "Wayland development package not found")
|
||||
endif ()
|
||||
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
|
||||
if (NOT WAYLAND_PROTOCOLS_FOUND)
|
||||
message(FATAL_ERROR "Wayland protocols package not found")
|
||||
endif ()
|
||||
find_program(WAYLAND_SCANNER wayland-scanner)
|
||||
if (NOT WAYLAND_SCANNER)
|
||||
message(FATAL_ERROR "wayland-scanner binary not found")
|
||||
endif ()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_WAYLAND_KHR")
|
||||
include_directories(${WAYLAND_INCLUDE_DIR})
|
||||
pkg_get_variable(protocol_dir wayland-protocols pkgdatadir)
|
||||
execute_process(COMMAND ${WAYLAND_SCANNER} client-header ${protocol_dir}/stable/xdg-shell/xdg-shell.xml ${CMAKE_BINARY_DIR}/xdg-shell-client-protocol.h
|
||||
COMMAND ${WAYLAND_SCANNER} private-code ${protocol_dir}/stable/xdg-shell/xdg-shell.xml ${CMAKE_BINARY_DIR}/xdg-shell-protocol.c)
|
||||
include_directories(${CMAKE_BINARY_DIR})
|
||||
ELSEIF(USE_HEADLESS)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_HEADLESS_EXT")
|
||||
ELSE(USE_D2D_WSI)
|
||||
find_package(XCB REQUIRED)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")
|
||||
ENDIF(USE_D2D_WSI)
|
||||
ELSEIF(APPLE)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_MACOS_MVK -DVK_EXAMPLE_XCODE_GENERATED")
|
||||
# Todo : android?
|
||||
ENDIF(WIN32)
|
||||
|
||||
IF (NOT Vulkan_FOUND)
|
||||
message(FATAL_ERROR "Could not find Vulkan library!")
|
||||
ELSE()
|
||||
message(STATUS ${Vulkan_LIBRARY})
|
||||
ENDIF()
|
||||
|
||||
# Set preprocessor defines
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -D_USE_MATH_DEFINES")
|
||||
|
||||
# Clang specific stuff
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-switch-enum")
|
||||
endif()
|
||||
|
||||
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
file(GLOB SOURCE *.cpp )
|
||||
|
||||
# Build all examples
|
||||
function(buildExamples)
|
||||
foreach(EXAMPLE ${EXAMPLES})
|
||||
buildExample(${EXAMPLE})
|
||||
endforeach(EXAMPLE)
|
||||
endfunction(buildExamples)
|
||||
|
||||
if(RESOURCE_INSTALL_DIR)
|
||||
add_definitions(-DVK_EXAMPLE_DATA_DIR=\"${RESOURCE_INSTALL_DIR}/\")
|
||||
install(DIRECTORY data/ DESTINATION ${RESOURCE_INSTALL_DIR}/)
|
||||
else()
|
||||
add_definitions(-DVK_EXAMPLE_DATA_DIR=\"${CMAKE_SOURCE_DIR}/data/\")
|
||||
endif()
|
||||
|
||||
# Compiler specific stuff
|
||||
IF(MSVC)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
||||
ELSEIF(APPLE)
|
||||
#if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc -ObjC++")
|
||||
#ELSE()
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fobjc-arc -xobjective-c++")
|
||||
#ENDIF()
|
||||
ENDIF(MSVC)
|
||||
|
||||
IF(WIN32)
|
||||
# Nothing here (yet)
|
||||
ELSEIF(APPLE)
|
||||
link_libraries(${Vulkan_LIBRARY} "-framework AppKit" "-framework QuartzCore")
|
||||
ELSE(WIN32)
|
||||
link_libraries(${XCB_LIBRARIES} ${Vulkan_LIBRARY} ${Vulkan_LIBRARY} ${DIRECTFB_LIBRARIES} ${WAYLAND_CLIENT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
ENDIF(WIN32)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/")
|
||||
|
||||
add_subdirectory(base)
|
||||
add_subdirectory(homework)
|
||||
# add_subdirectory(examples)
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
file(GLOB BASE_SRC "*.cpp" "*.hpp" "*.h" "../external/imgui/*.cpp")
|
||||
file(GLOB BASE_HEADERS "*.hpp" "*.h")
|
||||
|
||||
set(KTX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/ktx)
|
||||
set(KTX_SOURCES
|
||||
${KTX_DIR}/lib/texture.c
|
||||
${KTX_DIR}/lib/hashlist.c
|
||||
${KTX_DIR}/lib/checkheader.c
|
||||
${KTX_DIR}/lib/swap.c
|
||||
${KTX_DIR}/lib/memstream.c
|
||||
${KTX_DIR}/lib/filestream.c)
|
||||
|
||||
add_library(base STATIC ${BASE_SRC} ${KTX_SOURCES})
|
||||
if(WIN32)
|
||||
target_link_libraries(base ${Vulkan_LIBRARY} ${WINLIBS})
|
||||
else(WIN32)
|
||||
target_link_libraries(base ${Vulkan_LIBRARY} ${XCB_LIBRARIES} ${WAYLAND_CLIENT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif(WIN32)
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Simple command line parse
|
||||
*
|
||||
* Copyright (C) 2016-2022 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <string>
|
||||
|
||||
class CommandLineParser
|
||||
{
|
||||
public:
|
||||
struct CommandLineOption {
|
||||
std::vector<std::string> commands;
|
||||
std::string value;
|
||||
bool hasValue = false;
|
||||
std::string help;
|
||||
bool set = false;
|
||||
};
|
||||
std::unordered_map<std::string, CommandLineOption> options;
|
||||
|
||||
void add(std::string name, std::vector<std::string> commands, bool hasValue, std::string help)
|
||||
{
|
||||
options[name].commands = commands;
|
||||
options[name].help = help;
|
||||
options[name].set = false;
|
||||
options[name].hasValue = hasValue;
|
||||
options[name].value = "";
|
||||
}
|
||||
|
||||
void printHelp()
|
||||
{
|
||||
std::cout << "Available command line options:\n";
|
||||
for (auto option : options) {
|
||||
std::cout << " ";
|
||||
for (size_t i = 0; i < option.second.commands.size(); i++) {
|
||||
std::cout << option.second.commands[i];
|
||||
if (i < option.second.commands.size() - 1) {
|
||||
std::cout << ", ";
|
||||
}
|
||||
}
|
||||
std::cout << ": " << option.second.help << "\n";
|
||||
}
|
||||
std::cout << "Press any key to close...";
|
||||
}
|
||||
|
||||
void parse(std::vector<const char*> arguments)
|
||||
{
|
||||
bool printHelp = false;
|
||||
// Known arguments
|
||||
for (auto& option : options) {
|
||||
for (auto& command : option.second.commands) {
|
||||
for (size_t i = 0; i < arguments.size(); i++) {
|
||||
if (strcmp(arguments[i], command.c_str()) == 0) {
|
||||
option.second.set = true;
|
||||
// Get value
|
||||
if (option.second.hasValue) {
|
||||
if (arguments.size() > i + 1) {
|
||||
option.second.value = arguments[i + 1];
|
||||
}
|
||||
if (option.second.value == "") {
|
||||
printHelp = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Print help for unknown arguments or missing argument values
|
||||
if (printHelp) {
|
||||
options["help"].set = true;
|
||||
}
|
||||
}
|
||||
|
||||
void parse(int argc, char* argv[])
|
||||
{
|
||||
std::vector<const char*> args;
|
||||
for (int i = 0; i < argc; i++) {
|
||||
args.push_back(argv[i]);
|
||||
};
|
||||
parse(args);
|
||||
}
|
||||
|
||||
bool isSet(std::string name)
|
||||
{
|
||||
return ((options.find(name) != options.end()) && options[name].set);
|
||||
}
|
||||
|
||||
std::string getValueAsString(std::string name, std::string defaultValue)
|
||||
{
|
||||
assert(options.find(name) != options.end());
|
||||
std::string value = options[name].value;
|
||||
return (value != "") ? value : defaultValue;
|
||||
}
|
||||
|
||||
int32_t getValueAsInt(std::string name, int32_t defaultValue)
|
||||
{
|
||||
assert(options.find(name) != options.end());
|
||||
std::string value = options[name].value;
|
||||
if (value != "") {
|
||||
char* numConvPtr;
|
||||
int32_t intVal = strtol(value.c_str(), &numConvPtr, 10);
|
||||
return (intVal > 0) ? intVal : defaultValue;
|
||||
}
|
||||
else {
|
||||
return defaultValue;
|
||||
}
|
||||
return int32_t();
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,327 @@
|
|||
/*
|
||||
* Android Vulkan function pointer loader
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanAndroid.h"
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
#include <android/log.h>
|
||||
#include <dlfcn.h>
|
||||
#include <android/native_window_jni.h>
|
||||
|
||||
android_app* androidApp;
|
||||
|
||||
PFN_vkCreateInstance vkCreateInstance;
|
||||
PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
|
||||
PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
|
||||
PFN_vkCreateDevice vkCreateDevice;
|
||||
PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
|
||||
PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
|
||||
PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2;
|
||||
PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
|
||||
PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
|
||||
PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
|
||||
PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
|
||||
PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2;
|
||||
PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
|
||||
PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
|
||||
PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
|
||||
PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
|
||||
PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
|
||||
PFN_vkCreateShaderModule vkCreateShaderModule;
|
||||
PFN_vkCreateBuffer vkCreateBuffer;
|
||||
PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
|
||||
PFN_vkMapMemory vkMapMemory;
|
||||
PFN_vkUnmapMemory vkUnmapMemory;
|
||||
PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
|
||||
PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
|
||||
PFN_vkBindBufferMemory vkBindBufferMemory;
|
||||
PFN_vkDestroyBuffer vkDestroyBuffer;
|
||||
PFN_vkAllocateMemory vkAllocateMemory;
|
||||
PFN_vkBindImageMemory vkBindImageMemory;
|
||||
PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
|
||||
PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
|
||||
PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
|
||||
PFN_vkCmdCopyImage vkCmdCopyImage;
|
||||
PFN_vkCmdBlitImage vkCmdBlitImage;
|
||||
PFN_vkCmdClearAttachments vkCmdClearAttachments;
|
||||
PFN_vkCreateSampler vkCreateSampler;
|
||||
PFN_vkDestroySampler vkDestroySampler;
|
||||
PFN_vkDestroyImage vkDestroyImage;
|
||||
PFN_vkFreeMemory vkFreeMemory;
|
||||
PFN_vkCreateRenderPass vkCreateRenderPass;
|
||||
PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
|
||||
PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
|
||||
PFN_vkCmdNextSubpass vkCmdNextSubpass;
|
||||
PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
|
||||
PFN_vkCmdClearColorImage vkCmdClearColorImage;
|
||||
PFN_vkCreateImage vkCreateImage;
|
||||
PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
|
||||
PFN_vkCreateImageView vkCreateImageView;
|
||||
PFN_vkDestroyImageView vkDestroyImageView;
|
||||
PFN_vkCreateSemaphore vkCreateSemaphore;
|
||||
PFN_vkDestroySemaphore vkDestroySemaphore;
|
||||
PFN_vkCreateFence vkCreateFence;
|
||||
PFN_vkDestroyFence vkDestroyFence;
|
||||
PFN_vkWaitForFences vkWaitForFences;
|
||||
PFN_vkResetFences vkResetFences;
|
||||
PFN_vkResetDescriptorPool vkResetDescriptorPool;
|
||||
PFN_vkCreateCommandPool vkCreateCommandPool;
|
||||
PFN_vkDestroyCommandPool vkDestroyCommandPool;
|
||||
PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
|
||||
PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
|
||||
PFN_vkEndCommandBuffer vkEndCommandBuffer;
|
||||
PFN_vkGetDeviceQueue vkGetDeviceQueue;
|
||||
PFN_vkQueueSubmit vkQueueSubmit;
|
||||
PFN_vkQueueWaitIdle vkQueueWaitIdle;
|
||||
PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
|
||||
PFN_vkCreateFramebuffer vkCreateFramebuffer;
|
||||
PFN_vkCreatePipelineCache vkCreatePipelineCache;
|
||||
PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
|
||||
PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
|
||||
PFN_vkCreateComputePipelines vkCreateComputePipelines;
|
||||
PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
|
||||
PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
|
||||
PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
|
||||
PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
|
||||
PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
|
||||
PFN_vkCmdBindPipeline vkCmdBindPipeline;
|
||||
PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
|
||||
PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
|
||||
PFN_vkCmdSetViewport vkCmdSetViewport;
|
||||
PFN_vkCmdSetScissor vkCmdSetScissor;
|
||||
PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
|
||||
PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
|
||||
PFN_vkCmdPushConstants vkCmdPushConstants;
|
||||
PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
|
||||
PFN_vkCmdDraw vkCmdDraw;
|
||||
PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
|
||||
PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
|
||||
PFN_vkCmdDispatch vkCmdDispatch;
|
||||
PFN_vkDestroyPipeline vkDestroyPipeline;
|
||||
PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
|
||||
PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
|
||||
PFN_vkDestroyDevice vkDestroyDevice;
|
||||
PFN_vkDestroyInstance vkDestroyInstance;
|
||||
PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
|
||||
PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
|
||||
PFN_vkDestroyRenderPass vkDestroyRenderPass;
|
||||
PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
|
||||
PFN_vkDestroyShaderModule vkDestroyShaderModule;
|
||||
PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
|
||||
PFN_vkCreateQueryPool vkCreateQueryPool;
|
||||
PFN_vkDestroyQueryPool vkDestroyQueryPool;
|
||||
PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
|
||||
PFN_vkCmdBeginQuery vkCmdBeginQuery;
|
||||
PFN_vkCmdEndQuery vkCmdEndQuery;
|
||||
PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
|
||||
PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
|
||||
|
||||
PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
|
||||
PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
|
||||
PFN_vkCmdFillBuffer vkCmdFillBuffer;
|
||||
|
||||
int32_t vks::android::screenDensity;
|
||||
|
||||
void *libVulkan;
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace android
|
||||
{
|
||||
// Dynamically load Vulkan library and base function pointers
|
||||
bool loadVulkanLibrary()
|
||||
{
|
||||
__android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading libvulkan.so...\n");
|
||||
|
||||
// Load vulkan library
|
||||
libVulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
|
||||
if (!libVulkan)
|
||||
{
|
||||
__android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Could not load vulkan library : %s!\n", dlerror());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Load base function pointers
|
||||
vkEnumerateInstanceExtensionProperties = reinterpret_cast<PFN_vkEnumerateInstanceExtensionProperties>(dlsym(libVulkan, "vkEnumerateInstanceExtensionProperties"));
|
||||
vkEnumerateInstanceLayerProperties = reinterpret_cast<PFN_vkEnumerateInstanceLayerProperties>(dlsym(libVulkan, "vkEnumerateInstanceLayerProperties"));
|
||||
vkCreateInstance = reinterpret_cast<PFN_vkCreateInstance>(dlsym(libVulkan, "vkCreateInstance"));
|
||||
vkGetInstanceProcAddr = reinterpret_cast<PFN_vkGetInstanceProcAddr>(dlsym(libVulkan, "vkGetInstanceProcAddr"));
|
||||
vkGetDeviceProcAddr = reinterpret_cast<PFN_vkGetDeviceProcAddr>(dlsym(libVulkan, "vkGetDeviceProcAddr"));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Load instance based Vulkan function pointers
|
||||
void loadVulkanFunctions(VkInstance instance)
|
||||
{
|
||||
__android_log_print(ANDROID_LOG_INFO, "vulkanandroid", "Loading instance based function pointers...\n");
|
||||
|
||||
vkEnumeratePhysicalDevices = reinterpret_cast<PFN_vkEnumeratePhysicalDevices>(vkGetInstanceProcAddr(instance, "vkEnumeratePhysicalDevices"));
|
||||
vkGetPhysicalDeviceProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties"));
|
||||
vkGetPhysicalDeviceProperties2 = reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2"));
|
||||
vkEnumerateDeviceLayerProperties = reinterpret_cast<PFN_vkEnumerateDeviceLayerProperties>(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceLayerProperties"));
|
||||
vkEnumerateDeviceExtensionProperties = reinterpret_cast<PFN_vkEnumerateDeviceExtensionProperties>(vkGetInstanceProcAddr(instance, "vkEnumerateDeviceExtensionProperties"));
|
||||
vkGetPhysicalDeviceQueueFamilyProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceQueueFamilyProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceQueueFamilyProperties"));
|
||||
vkGetPhysicalDeviceFeatures = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures"));
|
||||
vkGetPhysicalDeviceFeatures2 = reinterpret_cast<PFN_vkGetPhysicalDeviceFeatures2>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFeatures2"));
|
||||
vkCreateDevice = reinterpret_cast<PFN_vkCreateDevice>(vkGetInstanceProcAddr(instance, "vkCreateDevice"));
|
||||
vkGetPhysicalDeviceFormatProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceFormatProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceFormatProperties"));
|
||||
vkGetPhysicalDeviceMemoryProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceMemoryProperties>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceMemoryProperties"));
|
||||
|
||||
vkCmdPipelineBarrier = reinterpret_cast<PFN_vkCmdPipelineBarrier>(vkGetInstanceProcAddr(instance, "vkCmdPipelineBarrier"));
|
||||
vkCreateShaderModule = reinterpret_cast<PFN_vkCreateShaderModule>(vkGetInstanceProcAddr(instance, "vkCreateShaderModule"));
|
||||
|
||||
vkCreateBuffer = reinterpret_cast<PFN_vkCreateBuffer>(vkGetInstanceProcAddr(instance, "vkCreateBuffer"));
|
||||
vkGetBufferMemoryRequirements = reinterpret_cast<PFN_vkGetBufferMemoryRequirements>(vkGetInstanceProcAddr(instance, "vkGetBufferMemoryRequirements"));
|
||||
vkMapMemory = reinterpret_cast<PFN_vkMapMemory>(vkGetInstanceProcAddr(instance, "vkMapMemory"));
|
||||
vkUnmapMemory = reinterpret_cast<PFN_vkUnmapMemory>(vkGetInstanceProcAddr(instance, "vkUnmapMemory"));
|
||||
vkFlushMappedMemoryRanges = reinterpret_cast<PFN_vkFlushMappedMemoryRanges>(vkGetInstanceProcAddr(instance, "vkFlushMappedMemoryRanges"));
|
||||
vkInvalidateMappedMemoryRanges = reinterpret_cast<PFN_vkInvalidateMappedMemoryRanges>(vkGetInstanceProcAddr(instance, "vkInvalidateMappedMemoryRanges"));
|
||||
vkBindBufferMemory = reinterpret_cast<PFN_vkBindBufferMemory>(vkGetInstanceProcAddr(instance, "vkBindBufferMemory"));
|
||||
vkDestroyBuffer = reinterpret_cast<PFN_vkDestroyBuffer>(vkGetInstanceProcAddr(instance, "vkDestroyBuffer"));
|
||||
|
||||
vkAllocateMemory = reinterpret_cast<PFN_vkAllocateMemory>(vkGetInstanceProcAddr(instance, "vkAllocateMemory"));
|
||||
vkFreeMemory = reinterpret_cast<PFN_vkFreeMemory>(vkGetInstanceProcAddr(instance, "vkFreeMemory"));
|
||||
vkCreateRenderPass = reinterpret_cast<PFN_vkCreateRenderPass>(vkGetInstanceProcAddr(instance, "vkCreateRenderPass"));
|
||||
vkCmdBeginRenderPass = reinterpret_cast<PFN_vkCmdBeginRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdBeginRenderPass"));
|
||||
vkCmdEndRenderPass = reinterpret_cast<PFN_vkCmdEndRenderPass>(vkGetInstanceProcAddr(instance, "vkCmdEndRenderPass"));
|
||||
vkCmdNextSubpass = reinterpret_cast<PFN_vkCmdNextSubpass>(vkGetInstanceProcAddr(instance, "vkCmdNextSubpass"));
|
||||
vkCmdExecuteCommands = reinterpret_cast<PFN_vkCmdExecuteCommands>(vkGetInstanceProcAddr(instance, "vkCmdExecuteCommands"));
|
||||
vkCmdClearColorImage = reinterpret_cast<PFN_vkCmdClearColorImage>(vkGetInstanceProcAddr(instance, "vkCmdClearColorImage"));
|
||||
|
||||
vkCreateImage = reinterpret_cast<PFN_vkCreateImage>(vkGetInstanceProcAddr(instance, "vkCreateImage"));
|
||||
vkGetImageMemoryRequirements = reinterpret_cast<PFN_vkGetImageMemoryRequirements>(vkGetInstanceProcAddr(instance, "vkGetImageMemoryRequirements"));
|
||||
vkCreateImageView = reinterpret_cast<PFN_vkCreateImageView>(vkGetInstanceProcAddr(instance, "vkCreateImageView"));
|
||||
vkDestroyImageView = reinterpret_cast<PFN_vkDestroyImageView>(vkGetInstanceProcAddr(instance, "vkDestroyImageView"));
|
||||
vkBindImageMemory = reinterpret_cast<PFN_vkBindImageMemory>(vkGetInstanceProcAddr(instance, "vkBindImageMemory"));
|
||||
vkGetImageSubresourceLayout = reinterpret_cast<PFN_vkGetImageSubresourceLayout>(vkGetInstanceProcAddr(instance, "vkGetImageSubresourceLayout"));
|
||||
vkCmdCopyImage = reinterpret_cast<PFN_vkCmdCopyImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyImage"));
|
||||
vkCmdBlitImage = reinterpret_cast<PFN_vkCmdBlitImage>(vkGetInstanceProcAddr(instance, "vkCmdBlitImage"));
|
||||
vkDestroyImage = reinterpret_cast<PFN_vkDestroyImage>(vkGetInstanceProcAddr(instance, "vkDestroyImage"));
|
||||
|
||||
vkCmdClearAttachments = reinterpret_cast<PFN_vkCmdClearAttachments>(vkGetInstanceProcAddr(instance, "vkCmdClearAttachments"));
|
||||
|
||||
vkCmdCopyBuffer = reinterpret_cast<PFN_vkCmdCopyBuffer>(vkGetInstanceProcAddr(instance, "vkCmdCopyBuffer"));
|
||||
vkCmdCopyBufferToImage = reinterpret_cast<PFN_vkCmdCopyBufferToImage>(vkGetInstanceProcAddr(instance, "vkCmdCopyBufferToImage"));
|
||||
|
||||
vkCreateSampler = reinterpret_cast<PFN_vkCreateSampler>(vkGetInstanceProcAddr(instance, "vkCreateSampler"));
|
||||
vkDestroySampler = reinterpret_cast<PFN_vkDestroySampler>(vkGetInstanceProcAddr(instance, "vkDestroySampler"));;
|
||||
|
||||
vkCreateSemaphore = reinterpret_cast<PFN_vkCreateSemaphore>(vkGetInstanceProcAddr(instance, "vkCreateSemaphore"));
|
||||
vkDestroySemaphore = reinterpret_cast<PFN_vkDestroySemaphore>(vkGetInstanceProcAddr(instance, "vkDestroySemaphore"));
|
||||
|
||||
vkCreateFence = reinterpret_cast<PFN_vkCreateFence>(vkGetInstanceProcAddr(instance, "vkCreateFence"));
|
||||
vkDestroyFence = reinterpret_cast<PFN_vkDestroyFence>(vkGetInstanceProcAddr(instance, "vkDestroyFence"));
|
||||
vkWaitForFences = reinterpret_cast<PFN_vkWaitForFences>(vkGetInstanceProcAddr(instance, "vkWaitForFences"));
|
||||
vkResetFences = reinterpret_cast<PFN_vkResetFences>(vkGetInstanceProcAddr(instance, "vkResetFences"));;
|
||||
vkResetDescriptorPool = reinterpret_cast<PFN_vkResetDescriptorPool>(vkGetInstanceProcAddr(instance, "vkResetDescriptorPool"));
|
||||
|
||||
vkCreateCommandPool = reinterpret_cast<PFN_vkCreateCommandPool>(vkGetInstanceProcAddr(instance, "vkCreateCommandPool"));
|
||||
vkDestroyCommandPool = reinterpret_cast<PFN_vkDestroyCommandPool>(vkGetInstanceProcAddr(instance, "vkDestroyCommandPool"));;
|
||||
|
||||
vkAllocateCommandBuffers = reinterpret_cast<PFN_vkAllocateCommandBuffers>(vkGetInstanceProcAddr(instance, "vkAllocateCommandBuffers"));
|
||||
vkBeginCommandBuffer = reinterpret_cast<PFN_vkBeginCommandBuffer>(vkGetInstanceProcAddr(instance, "vkBeginCommandBuffer"));
|
||||
vkEndCommandBuffer = reinterpret_cast<PFN_vkEndCommandBuffer>(vkGetInstanceProcAddr(instance, "vkEndCommandBuffer"));
|
||||
|
||||
vkGetDeviceQueue = reinterpret_cast<PFN_vkGetDeviceQueue>(vkGetInstanceProcAddr(instance, "vkGetDeviceQueue"));
|
||||
vkQueueSubmit = reinterpret_cast<PFN_vkQueueSubmit>(vkGetInstanceProcAddr(instance, "vkQueueSubmit"));
|
||||
vkQueueWaitIdle = reinterpret_cast<PFN_vkQueueWaitIdle>(vkGetInstanceProcAddr(instance, "vkQueueWaitIdle"));
|
||||
|
||||
vkDeviceWaitIdle = reinterpret_cast<PFN_vkDeviceWaitIdle>(vkGetInstanceProcAddr(instance, "vkDeviceWaitIdle"));
|
||||
|
||||
vkCreateFramebuffer = reinterpret_cast<PFN_vkCreateFramebuffer>(vkGetInstanceProcAddr(instance, "vkCreateFramebuffer"));
|
||||
|
||||
vkCreatePipelineCache = reinterpret_cast<PFN_vkCreatePipelineCache>(vkGetInstanceProcAddr(instance, "vkCreatePipelineCache"));
|
||||
vkCreatePipelineLayout = reinterpret_cast<PFN_vkCreatePipelineLayout>(vkGetInstanceProcAddr(instance, "vkCreatePipelineLayout"));
|
||||
vkCreateGraphicsPipelines = reinterpret_cast<PFN_vkCreateGraphicsPipelines>(vkGetInstanceProcAddr(instance, "vkCreateGraphicsPipelines"));
|
||||
vkCreateComputePipelines = reinterpret_cast<PFN_vkCreateComputePipelines>(vkGetInstanceProcAddr(instance, "vkCreateComputePipelines"));
|
||||
|
||||
vkCreateDescriptorPool = reinterpret_cast<PFN_vkCreateDescriptorPool>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorPool"));
|
||||
vkCreateDescriptorSetLayout = reinterpret_cast<PFN_vkCreateDescriptorSetLayout>(vkGetInstanceProcAddr(instance, "vkCreateDescriptorSetLayout"));
|
||||
|
||||
vkAllocateDescriptorSets = reinterpret_cast<PFN_vkAllocateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkAllocateDescriptorSets"));
|
||||
vkUpdateDescriptorSets = reinterpret_cast<PFN_vkUpdateDescriptorSets>(vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSets"));
|
||||
|
||||
vkCmdBindDescriptorSets = reinterpret_cast<PFN_vkCmdBindDescriptorSets>(vkGetInstanceProcAddr(instance, "vkCmdBindDescriptorSets"));
|
||||
vkCmdBindPipeline = reinterpret_cast<PFN_vkCmdBindPipeline>(vkGetInstanceProcAddr(instance, "vkCmdBindPipeline"));
|
||||
vkCmdBindVertexBuffers = reinterpret_cast<PFN_vkCmdBindVertexBuffers>(vkGetInstanceProcAddr(instance, "vkCmdBindVertexBuffers"));
|
||||
vkCmdBindIndexBuffer = reinterpret_cast<PFN_vkCmdBindIndexBuffer>(vkGetInstanceProcAddr(instance, "vkCmdBindIndexBuffer"));
|
||||
|
||||
vkCmdSetViewport = reinterpret_cast<PFN_vkCmdSetViewport>(vkGetInstanceProcAddr(instance, "vkCmdSetViewport"));
|
||||
vkCmdSetScissor = reinterpret_cast<PFN_vkCmdSetScissor>(vkGetInstanceProcAddr(instance, "vkCmdSetScissor"));
|
||||
vkCmdSetLineWidth = reinterpret_cast<PFN_vkCmdSetLineWidth>(vkGetInstanceProcAddr(instance, "vkCmdSetLineWidth"));
|
||||
vkCmdSetDepthBias = reinterpret_cast<PFN_vkCmdSetDepthBias>(vkGetInstanceProcAddr(instance, "vkCmdSetDepthBias"));
|
||||
vkCmdPushConstants = reinterpret_cast<PFN_vkCmdPushConstants>(vkGetInstanceProcAddr(instance, "vkCmdPushConstants"));;
|
||||
|
||||
vkCmdDrawIndexed = reinterpret_cast<PFN_vkCmdDrawIndexed>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndexed"));
|
||||
vkCmdDraw = reinterpret_cast<PFN_vkCmdDraw>(vkGetInstanceProcAddr(instance, "vkCmdDraw"));
|
||||
vkCmdDrawIndexedIndirect = reinterpret_cast<PFN_vkCmdDrawIndexedIndirect>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndexedIndirect"));
|
||||
vkCmdDrawIndirect = reinterpret_cast<PFN_vkCmdDrawIndirect>(vkGetInstanceProcAddr(instance, "vkCmdDrawIndirect"));
|
||||
vkCmdDispatch = reinterpret_cast<PFN_vkCmdDispatch>(vkGetInstanceProcAddr(instance, "vkCmdDispatch"));
|
||||
|
||||
vkDestroyPipeline = reinterpret_cast<PFN_vkDestroyPipeline>(vkGetInstanceProcAddr(instance, "vkDestroyPipeline"));
|
||||
vkDestroyPipelineLayout = reinterpret_cast<PFN_vkDestroyPipelineLayout>(vkGetInstanceProcAddr(instance, "vkDestroyPipelineLayout"));;
|
||||
vkDestroyDescriptorSetLayout = reinterpret_cast<PFN_vkDestroyDescriptorSetLayout>(vkGetInstanceProcAddr(instance, "vkDestroyDescriptorSetLayout"));
|
||||
vkDestroyDevice = reinterpret_cast<PFN_vkDestroyDevice>(vkGetInstanceProcAddr(instance, "vkDestroyDevice"));
|
||||
vkDestroyInstance = reinterpret_cast<PFN_vkDestroyInstance>(vkGetInstanceProcAddr(instance, "vkDestroyInstance"));
|
||||
vkDestroyDescriptorPool = reinterpret_cast<PFN_vkDestroyDescriptorPool>(vkGetInstanceProcAddr(instance, "vkDestroyDescriptorPool"));
|
||||
vkFreeCommandBuffers = reinterpret_cast<PFN_vkFreeCommandBuffers>(vkGetInstanceProcAddr(instance, "vkFreeCommandBuffers"));
|
||||
vkDestroyRenderPass = reinterpret_cast<PFN_vkDestroyRenderPass>(vkGetInstanceProcAddr(instance, "vkDestroyRenderPass"));
|
||||
vkDestroyFramebuffer = reinterpret_cast<PFN_vkDestroyFramebuffer>(vkGetInstanceProcAddr(instance, "vkDestroyFramebuffer"));
|
||||
vkDestroyShaderModule = reinterpret_cast<PFN_vkDestroyShaderModule>(vkGetInstanceProcAddr(instance, "vkDestroyShaderModule"));
|
||||
vkDestroyPipelineCache = reinterpret_cast<PFN_vkDestroyPipelineCache>(vkGetInstanceProcAddr(instance, "vkDestroyPipelineCache"));
|
||||
|
||||
vkCreateQueryPool = reinterpret_cast<PFN_vkCreateQueryPool>(vkGetInstanceProcAddr(instance, "vkCreateQueryPool"));
|
||||
vkDestroyQueryPool = reinterpret_cast<PFN_vkDestroyQueryPool>(vkGetInstanceProcAddr(instance, "vkDestroyQueryPool"));
|
||||
vkGetQueryPoolResults = reinterpret_cast<PFN_vkGetQueryPoolResults>(vkGetInstanceProcAddr(instance, "vkGetQueryPoolResults"));
|
||||
|
||||
vkCmdBeginQuery = reinterpret_cast<PFN_vkCmdBeginQuery>(vkGetInstanceProcAddr(instance, "vkCmdBeginQuery"));
|
||||
vkCmdEndQuery = reinterpret_cast<PFN_vkCmdEndQuery>(vkGetInstanceProcAddr(instance, "vkCmdEndQuery"));
|
||||
vkCmdResetQueryPool = reinterpret_cast<PFN_vkCmdResetQueryPool>(vkGetInstanceProcAddr(instance, "vkCmdResetQueryPool"));
|
||||
vkCmdCopyQueryPoolResults = reinterpret_cast<PFN_vkCmdCopyQueryPoolResults>(vkGetInstanceProcAddr(instance, "vkCmdCopyQueryPoolResults"));
|
||||
|
||||
vkCreateAndroidSurfaceKHR = reinterpret_cast<PFN_vkCreateAndroidSurfaceKHR>(vkGetInstanceProcAddr(instance, "vkCreateAndroidSurfaceKHR"));
|
||||
vkDestroySurfaceKHR = reinterpret_cast<PFN_vkDestroySurfaceKHR>(vkGetInstanceProcAddr(instance, "vkDestroySurfaceKHR"));
|
||||
|
||||
vkCmdFillBuffer = reinterpret_cast<PFN_vkCmdFillBuffer>(vkGetInstanceProcAddr(instance, "vkCmdFillBuffer"));
|
||||
}
|
||||
|
||||
void freeVulkanLibrary()
|
||||
{
|
||||
dlclose(libVulkan);
|
||||
}
|
||||
|
||||
void getDeviceConfig()
|
||||
{
|
||||
// Screen density
|
||||
AConfiguration* config = AConfiguration_new();
|
||||
AConfiguration_fromAssetManager(config, androidApp->activity->assetManager);
|
||||
vks::android::screenDensity = AConfiguration_getDensity(config);
|
||||
AConfiguration_delete(config);
|
||||
}
|
||||
|
||||
// Displays a native alert dialog using JNI
|
||||
void showAlert(const char* message) {
|
||||
JNIEnv* jni;
|
||||
androidApp->activity->vm->AttachCurrentThread(&jni, NULL);
|
||||
|
||||
jstring jmessage = jni->NewStringUTF(message);
|
||||
|
||||
jclass clazz = jni->GetObjectClass(androidApp->activity->clazz);
|
||||
// Signature has to match java implementation (arguments)
|
||||
jmethodID methodID = jni->GetMethodID(clazz, "showAlert", "(Ljava/lang/String;)V");
|
||||
jni->CallVoidMethod(androidApp->activity->clazz, methodID, jmessage);
|
||||
jni->DeleteLocalRef(jmessage);
|
||||
|
||||
androidApp->activity->vm->DetachCurrentThread();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
* Android Vulkan function pointer prototypes
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef VULKANANDROID_H
|
||||
#define VULKANANDROID_H
|
||||
|
||||
// Vulkan needs to be loaded dynamically on android
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef VULKANANDROID_HPP
|
||||
#define VULKANANDROID_HPP
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
|
||||
#include <android/log.h>
|
||||
#include <android_native_app_glue.h>
|
||||
#include <android/configuration.h>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
// Missing from the NDK
|
||||
namespace std
|
||||
{
|
||||
template<typename T, typename... Args>
|
||||
std::unique_ptr<T> make_unique(Args&&... args)
|
||||
{
|
||||
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
||||
}
|
||||
}
|
||||
|
||||
// Global reference to android application object
|
||||
extern android_app* androidApp;
|
||||
|
||||
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "vulkanExample", __VA_ARGS__))
|
||||
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "vulkanExample", __VA_ARGS__))
|
||||
#define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, "vulkanExample", __VA_ARGS__))
|
||||
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "vulkanExample", __VA_ARGS__))
|
||||
|
||||
// Function pointer prototypes
|
||||
// Not complete, just the functions used in the caps viewer!
|
||||
extern PFN_vkCreateInstance vkCreateInstance;
|
||||
extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
|
||||
extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
|
||||
extern PFN_vkCreateDevice vkCreateDevice;
|
||||
extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;
|
||||
extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;
|
||||
extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2;
|
||||
extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;
|
||||
extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;
|
||||
extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;
|
||||
extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;
|
||||
extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2;
|
||||
extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;
|
||||
extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;
|
||||
extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;
|
||||
extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;
|
||||
extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;
|
||||
extern PFN_vkCreateShaderModule vkCreateShaderModule;
|
||||
extern PFN_vkCreateBuffer vkCreateBuffer;
|
||||
extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;
|
||||
extern PFN_vkMapMemory vkMapMemory;
|
||||
extern PFN_vkUnmapMemory vkUnmapMemory;
|
||||
extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;
|
||||
extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;
|
||||
extern PFN_vkBindBufferMemory vkBindBufferMemory;
|
||||
extern PFN_vkDestroyBuffer vkDestroyBuffer;
|
||||
extern PFN_vkAllocateMemory vkAllocateMemory;
|
||||
extern PFN_vkBindImageMemory vkBindImageMemory;
|
||||
extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;
|
||||
extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer;
|
||||
extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;
|
||||
extern PFN_vkCmdCopyImage vkCmdCopyImage;
|
||||
extern PFN_vkCmdBlitImage vkCmdBlitImage;
|
||||
extern PFN_vkCmdClearAttachments vkCmdClearAttachments;
|
||||
extern PFN_vkCreateSampler vkCreateSampler;
|
||||
extern PFN_vkDestroySampler vkDestroySampler;
|
||||
extern PFN_vkDestroyImage vkDestroyImage;
|
||||
extern PFN_vkFreeMemory vkFreeMemory;
|
||||
extern PFN_vkCreateRenderPass vkCreateRenderPass;
|
||||
extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;
|
||||
extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass;
|
||||
extern PFN_vkCmdNextSubpass vkCmdNextSubpass;
|
||||
extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands;
|
||||
extern PFN_vkCmdClearColorImage vkCmdClearColorImage;
|
||||
extern PFN_vkCreateImage vkCreateImage;
|
||||
extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;
|
||||
extern PFN_vkCreateImageView vkCreateImageView;
|
||||
extern PFN_vkDestroyImageView vkDestroyImageView;
|
||||
extern PFN_vkCreateSemaphore vkCreateSemaphore;
|
||||
extern PFN_vkDestroySemaphore vkDestroySemaphore;
|
||||
extern PFN_vkCreateFence vkCreateFence;
|
||||
extern PFN_vkDestroyFence vkDestroyFence;
|
||||
extern PFN_vkWaitForFences vkWaitForFences;
|
||||
extern PFN_vkResetFences vkResetFences;
|
||||
extern PFN_vkResetDescriptorPool vkResetDescriptorPool;
|
||||
extern PFN_vkCreateCommandPool vkCreateCommandPool;
|
||||
extern PFN_vkDestroyCommandPool vkDestroyCommandPool;
|
||||
extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;
|
||||
extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer;
|
||||
extern PFN_vkEndCommandBuffer vkEndCommandBuffer;
|
||||
extern PFN_vkGetDeviceQueue vkGetDeviceQueue;
|
||||
extern PFN_vkQueueSubmit vkQueueSubmit;
|
||||
extern PFN_vkQueueWaitIdle vkQueueWaitIdle;
|
||||
extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle;
|
||||
extern PFN_vkCreateFramebuffer vkCreateFramebuffer;
|
||||
extern PFN_vkCreatePipelineCache vkCreatePipelineCache;
|
||||
extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout;
|
||||
extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;
|
||||
extern PFN_vkCreateComputePipelines vkCreateComputePipelines;
|
||||
extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool;
|
||||
extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;
|
||||
extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;
|
||||
extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;
|
||||
extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;
|
||||
extern PFN_vkCmdBindPipeline vkCmdBindPipeline;
|
||||
extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;
|
||||
extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;
|
||||
extern PFN_vkCmdSetViewport vkCmdSetViewport;
|
||||
extern PFN_vkCmdSetScissor vkCmdSetScissor;
|
||||
extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth;
|
||||
extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias;
|
||||
extern PFN_vkCmdPushConstants vkCmdPushConstants;
|
||||
extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed;
|
||||
extern PFN_vkCmdDraw vkCmdDraw;
|
||||
extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;
|
||||
extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect;
|
||||
extern PFN_vkCmdDispatch vkCmdDispatch;
|
||||
extern PFN_vkDestroyPipeline vkDestroyPipeline;
|
||||
extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;
|
||||
extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;
|
||||
extern PFN_vkDestroyDevice vkDestroyDevice;
|
||||
extern PFN_vkDestroyInstance vkDestroyInstance;
|
||||
extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;
|
||||
extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers;
|
||||
extern PFN_vkDestroyRenderPass vkDestroyRenderPass;
|
||||
extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer;
|
||||
extern PFN_vkDestroyShaderModule vkDestroyShaderModule;
|
||||
extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache;
|
||||
extern PFN_vkCreateQueryPool vkCreateQueryPool;
|
||||
extern PFN_vkDestroyQueryPool vkDestroyQueryPool;
|
||||
extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults;
|
||||
extern PFN_vkCmdBeginQuery vkCmdBeginQuery;
|
||||
extern PFN_vkCmdEndQuery vkCmdEndQuery;
|
||||
extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool;
|
||||
extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;
|
||||
|
||||
extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;
|
||||
extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;
|
||||
extern PFN_vkCmdFillBuffer vkCmdFillBuffer;
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace android
|
||||
{
|
||||
/* @brief Touch control thresholds from Android NDK samples */
|
||||
const int32_t DOUBLE_TAP_TIMEOUT = 300 * 1000000;
|
||||
const int32_t TAP_TIMEOUT = 180 * 1000000;
|
||||
const int32_t DOUBLE_TAP_SLOP = 100;
|
||||
const int32_t TAP_SLOP = 8;
|
||||
|
||||
/** @brief Density of the device screen (in DPI) */
|
||||
extern int32_t screenDensity;
|
||||
|
||||
bool loadVulkanLibrary();
|
||||
void loadVulkanFunctions(VkInstance instance);
|
||||
void freeVulkanLibrary();
|
||||
void getDeviceConfig();
|
||||
void showAlert(const char* message);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif // VULKANANDROID_HPP
|
||||
|
||||
|
||||
#endif // VULKANANDROID_H
|
||||
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* Vulkan buffer class
|
||||
*
|
||||
* Encapsulates a Vulkan buffer
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanBuffer.h"
|
||||
|
||||
namespace vks
|
||||
{
|
||||
/**
|
||||
* Map a memory range of this buffer. If successful, mapped points to the specified buffer range.
|
||||
*
|
||||
* @param size (Optional) Size of the memory range to map. Pass VK_WHOLE_SIZE to map the complete buffer range.
|
||||
* @param offset (Optional) Byte offset from beginning
|
||||
*
|
||||
* @return VkResult of the buffer mapping call
|
||||
*/
|
||||
VkResult Buffer::map(VkDeviceSize size, VkDeviceSize offset)
|
||||
{
|
||||
return vkMapMemory(device, memory, offset, size, 0, &mapped);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unmap a mapped memory range
|
||||
*
|
||||
* @note Does not return a result as vkUnmapMemory can't fail
|
||||
*/
|
||||
void Buffer::unmap()
|
||||
{
|
||||
if (mapped)
|
||||
{
|
||||
vkUnmapMemory(device, memory);
|
||||
mapped = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach the allocated memory block to the buffer
|
||||
*
|
||||
* @param offset (Optional) Byte offset (from the beginning) for the memory region to bind
|
||||
*
|
||||
* @return VkResult of the bindBufferMemory call
|
||||
*/
|
||||
VkResult Buffer::bind(VkDeviceSize offset)
|
||||
{
|
||||
return vkBindBufferMemory(device, buffer, memory, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup the default descriptor for this buffer
|
||||
*
|
||||
* @param size (Optional) Size of the memory range of the descriptor
|
||||
* @param offset (Optional) Byte offset from beginning
|
||||
*
|
||||
*/
|
||||
void Buffer::setupDescriptor(VkDeviceSize size, VkDeviceSize offset)
|
||||
{
|
||||
descriptor.offset = offset;
|
||||
descriptor.buffer = buffer;
|
||||
descriptor.range = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies the specified data to the mapped buffer
|
||||
*
|
||||
* @param data Pointer to the data to copy
|
||||
* @param size Size of the data to copy in machine units
|
||||
*
|
||||
*/
|
||||
void Buffer::copyTo(void* data, VkDeviceSize size)
|
||||
{
|
||||
assert(mapped);
|
||||
memcpy(mapped, data, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* Flush a memory range of the buffer to make it visible to the device
|
||||
*
|
||||
* @note Only required for non-coherent memory
|
||||
*
|
||||
* @param size (Optional) Size of the memory range to flush. Pass VK_WHOLE_SIZE to flush the complete buffer range.
|
||||
* @param offset (Optional) Byte offset from beginning
|
||||
*
|
||||
* @return VkResult of the flush call
|
||||
*/
|
||||
VkResult Buffer::flush(VkDeviceSize size, VkDeviceSize offset)
|
||||
{
|
||||
VkMappedMemoryRange mappedRange = {};
|
||||
mappedRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
|
||||
mappedRange.memory = memory;
|
||||
mappedRange.offset = offset;
|
||||
mappedRange.size = size;
|
||||
return vkFlushMappedMemoryRanges(device, 1, &mappedRange);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidate a memory range of the buffer to make it visible to the host
|
||||
*
|
||||
* @note Only required for non-coherent memory
|
||||
*
|
||||
* @param size (Optional) Size of the memory range to invalidate. Pass VK_WHOLE_SIZE to invalidate the complete buffer range.
|
||||
* @param offset (Optional) Byte offset from beginning
|
||||
*
|
||||
* @return VkResult of the invalidate call
|
||||
*/
|
||||
VkResult Buffer::invalidate(VkDeviceSize size, VkDeviceSize offset)
|
||||
{
|
||||
VkMappedMemoryRange mappedRange = {};
|
||||
mappedRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
|
||||
mappedRange.memory = memory;
|
||||
mappedRange.offset = offset;
|
||||
mappedRange.size = size;
|
||||
return vkInvalidateMappedMemoryRanges(device, 1, &mappedRange);
|
||||
}
|
||||
|
||||
/**
|
||||
* Release all Vulkan resources held by this buffer
|
||||
*/
|
||||
void Buffer::destroy()
|
||||
{
|
||||
if (buffer)
|
||||
{
|
||||
vkDestroyBuffer(device, buffer, nullptr);
|
||||
}
|
||||
if (memory)
|
||||
{
|
||||
vkFreeMemory(device, memory, nullptr);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Vulkan buffer class
|
||||
*
|
||||
* Encapsulates a Vulkan buffer
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "VulkanTools.h"
|
||||
|
||||
namespace vks
|
||||
{
|
||||
/**
|
||||
* @brief Encapsulates access to a Vulkan buffer backed up by device memory
|
||||
* @note To be filled by an external source like the VulkanDevice
|
||||
*/
|
||||
struct Buffer
|
||||
{
|
||||
VkDevice device;
|
||||
VkBuffer buffer = VK_NULL_HANDLE;
|
||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
||||
VkDescriptorBufferInfo descriptor;
|
||||
VkDeviceSize size = 0;
|
||||
VkDeviceSize alignment = 0;
|
||||
void* mapped = nullptr;
|
||||
/** @brief Usage flags to be filled by external source at buffer creation (to query at some later point) */
|
||||
VkBufferUsageFlags usageFlags;
|
||||
/** @brief Memory property flags to be filled by external source at buffer creation (to query at some later point) */
|
||||
VkMemoryPropertyFlags memoryPropertyFlags;
|
||||
VkResult map(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
|
||||
void unmap();
|
||||
VkResult bind(VkDeviceSize offset = 0);
|
||||
void setupDescriptor(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
|
||||
void copyTo(void* data, VkDeviceSize size);
|
||||
VkResult flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
|
||||
VkResult invalidate(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
|
||||
void destroy();
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,261 @@
|
|||
/*
|
||||
* Vulkan examples debug wrapper
|
||||
*
|
||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanDebug.h"
|
||||
#include <iostream>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace debug
|
||||
{
|
||||
PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT;
|
||||
PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT;
|
||||
VkDebugUtilsMessengerEXT debugUtilsMessenger;
|
||||
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsMessengerCallback(
|
||||
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
|
||||
VkDebugUtilsMessageTypeFlagsEXT messageType,
|
||||
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
|
||||
void* pUserData)
|
||||
{
|
||||
// Select prefix depending on flags passed to the callback
|
||||
std::string prefix("");
|
||||
|
||||
if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) {
|
||||
prefix = "VERBOSE: ";
|
||||
}
|
||||
else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) {
|
||||
prefix = "INFO: ";
|
||||
}
|
||||
else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
|
||||
prefix = "WARNING: ";
|
||||
}
|
||||
else if (messageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) {
|
||||
prefix = "ERROR: ";
|
||||
}
|
||||
|
||||
|
||||
// Display message to default output (console/logcat)
|
||||
std::stringstream debugMessage;
|
||||
debugMessage << prefix << "[" << pCallbackData->messageIdNumber << "][" << pCallbackData->pMessageIdName << "] : " << pCallbackData->pMessage;
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) {
|
||||
LOGE("%s", debugMessage.str().c_str());
|
||||
} else {
|
||||
LOGD("%s", debugMessage.str().c_str());
|
||||
}
|
||||
#else
|
||||
if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) {
|
||||
std::cerr << debugMessage.str() << "\n";
|
||||
} else {
|
||||
std::cout << debugMessage.str() << "\n";
|
||||
}
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
||||
|
||||
// The return value of this callback controls whether the Vulkan call that caused the validation message will be aborted or not
|
||||
// We return VK_FALSE as we DON'T want Vulkan calls that cause a validation message to abort
|
||||
// If you instead want to have calls abort, pass in VK_TRUE and the function will return VK_ERROR_VALIDATION_FAILED_EXT
|
||||
return VK_FALSE;
|
||||
}
|
||||
|
||||
void setupDebugging(VkInstance instance)
|
||||
{
|
||||
|
||||
vkCreateDebugUtilsMessengerEXT = reinterpret_cast<PFN_vkCreateDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT"));
|
||||
vkDestroyDebugUtilsMessengerEXT = reinterpret_cast<PFN_vkDestroyDebugUtilsMessengerEXT>(vkGetInstanceProcAddr(instance, "vkDestroyDebugUtilsMessengerEXT"));
|
||||
|
||||
VkDebugUtilsMessengerCreateInfoEXT debugUtilsMessengerCI{};
|
||||
debugUtilsMessengerCI.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
|
||||
debugUtilsMessengerCI.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
|
||||
debugUtilsMessengerCI.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
|
||||
debugUtilsMessengerCI.pfnUserCallback = debugUtilsMessengerCallback;
|
||||
VkResult result = vkCreateDebugUtilsMessengerEXT(instance, &debugUtilsMessengerCI, nullptr, &debugUtilsMessenger);
|
||||
assert(result == VK_SUCCESS);
|
||||
}
|
||||
|
||||
void freeDebugCallback(VkInstance instance)
|
||||
{
|
||||
if (debugUtilsMessenger != VK_NULL_HANDLE)
|
||||
{
|
||||
vkDestroyDebugUtilsMessengerEXT(instance, debugUtilsMessenger, nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace debugmarker
|
||||
{
|
||||
bool active = false;
|
||||
|
||||
PFN_vkDebugMarkerSetObjectTagEXT pfnDebugMarkerSetObjectTag = VK_NULL_HANDLE;
|
||||
PFN_vkDebugMarkerSetObjectNameEXT pfnDebugMarkerSetObjectName = VK_NULL_HANDLE;
|
||||
PFN_vkCmdDebugMarkerBeginEXT pfnCmdDebugMarkerBegin = VK_NULL_HANDLE;
|
||||
PFN_vkCmdDebugMarkerEndEXT pfnCmdDebugMarkerEnd = VK_NULL_HANDLE;
|
||||
PFN_vkCmdDebugMarkerInsertEXT pfnCmdDebugMarkerInsert = VK_NULL_HANDLE;
|
||||
|
||||
void setup(VkDevice device)
|
||||
{
|
||||
pfnDebugMarkerSetObjectTag = reinterpret_cast<PFN_vkDebugMarkerSetObjectTagEXT>(vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectTagEXT"));
|
||||
pfnDebugMarkerSetObjectName = reinterpret_cast<PFN_vkDebugMarkerSetObjectNameEXT>(vkGetDeviceProcAddr(device, "vkDebugMarkerSetObjectNameEXT"));
|
||||
pfnCmdDebugMarkerBegin = reinterpret_cast<PFN_vkCmdDebugMarkerBeginEXT>(vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT"));
|
||||
pfnCmdDebugMarkerEnd = reinterpret_cast<PFN_vkCmdDebugMarkerEndEXT>(vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT"));
|
||||
pfnCmdDebugMarkerInsert = reinterpret_cast<PFN_vkCmdDebugMarkerInsertEXT>(vkGetDeviceProcAddr(device, "vkCmdDebugMarkerInsertEXT"));
|
||||
|
||||
// Set flag if at least one function pointer is present
|
||||
active = (pfnDebugMarkerSetObjectName != VK_NULL_HANDLE);
|
||||
}
|
||||
|
||||
void setObjectName(VkDevice device, uint64_t object, VkDebugReportObjectTypeEXT objectType, const char *name)
|
||||
{
|
||||
// Check for valid function pointer (may not be present if not running in a debugging application)
|
||||
if (pfnDebugMarkerSetObjectName)
|
||||
{
|
||||
VkDebugMarkerObjectNameInfoEXT nameInfo = {};
|
||||
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT;
|
||||
nameInfo.objectType = objectType;
|
||||
nameInfo.object = object;
|
||||
nameInfo.pObjectName = name;
|
||||
pfnDebugMarkerSetObjectName(device, &nameInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void setObjectTag(VkDevice device, uint64_t object, VkDebugReportObjectTypeEXT objectType, uint64_t name, size_t tagSize, const void* tag)
|
||||
{
|
||||
// Check for valid function pointer (may not be present if not running in a debugging application)
|
||||
if (pfnDebugMarkerSetObjectTag)
|
||||
{
|
||||
VkDebugMarkerObjectTagInfoEXT tagInfo = {};
|
||||
tagInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT;
|
||||
tagInfo.objectType = objectType;
|
||||
tagInfo.object = object;
|
||||
tagInfo.tagName = name;
|
||||
tagInfo.tagSize = tagSize;
|
||||
tagInfo.pTag = tag;
|
||||
pfnDebugMarkerSetObjectTag(device, &tagInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void beginRegion(VkCommandBuffer cmdbuffer, const char* pMarkerName, glm::vec4 color)
|
||||
{
|
||||
// Check for valid function pointer (may not be present if not running in a debugging application)
|
||||
if (pfnCmdDebugMarkerBegin)
|
||||
{
|
||||
VkDebugMarkerMarkerInfoEXT markerInfo = {};
|
||||
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
|
||||
memcpy(markerInfo.color, &color[0], sizeof(float) * 4);
|
||||
markerInfo.pMarkerName = pMarkerName;
|
||||
pfnCmdDebugMarkerBegin(cmdbuffer, &markerInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void insert(VkCommandBuffer cmdbuffer, std::string markerName, glm::vec4 color)
|
||||
{
|
||||
// Check for valid function pointer (may not be present if not running in a debugging application)
|
||||
if (pfnCmdDebugMarkerInsert)
|
||||
{
|
||||
VkDebugMarkerMarkerInfoEXT markerInfo = {};
|
||||
markerInfo.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT;
|
||||
memcpy(markerInfo.color, &color[0], sizeof(float) * 4);
|
||||
markerInfo.pMarkerName = markerName.c_str();
|
||||
pfnCmdDebugMarkerInsert(cmdbuffer, &markerInfo);
|
||||
}
|
||||
}
|
||||
|
||||
void endRegion(VkCommandBuffer cmdBuffer)
|
||||
{
|
||||
// Check for valid function (may not be present if not running in a debugging application)
|
||||
if (pfnCmdDebugMarkerEnd)
|
||||
{
|
||||
pfnCmdDebugMarkerEnd(cmdBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
void setCommandBufferName(VkDevice device, VkCommandBuffer cmdBuffer, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)cmdBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, name);
|
||||
}
|
||||
|
||||
void setQueueName(VkDevice device, VkQueue queue, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, name);
|
||||
}
|
||||
|
||||
void setImageName(VkDevice device, VkImage image, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, name);
|
||||
}
|
||||
|
||||
void setSamplerName(VkDevice device, VkSampler sampler, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)sampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, name);
|
||||
}
|
||||
|
||||
void setBufferName(VkDevice device, VkBuffer buffer, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, name);
|
||||
}
|
||||
|
||||
void setDeviceMemoryName(VkDevice device, VkDeviceMemory memory, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, name);
|
||||
}
|
||||
|
||||
void setShaderModuleName(VkDevice device, VkShaderModule shaderModule, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)shaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, name);
|
||||
}
|
||||
|
||||
void setPipelineName(VkDevice device, VkPipeline pipeline, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, name);
|
||||
}
|
||||
|
||||
void setPipelineLayoutName(VkDevice device, VkPipelineLayout pipelineLayout, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)pipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, name);
|
||||
}
|
||||
|
||||
void setRenderPassName(VkDevice device, VkRenderPass renderPass, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, name);
|
||||
}
|
||||
|
||||
void setFramebufferName(VkDevice device, VkFramebuffer framebuffer, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)framebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, name);
|
||||
}
|
||||
|
||||
void setDescriptorSetLayoutName(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)descriptorSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, name);
|
||||
}
|
||||
|
||||
void setDescriptorSetName(VkDevice device, VkDescriptorSet descriptorSet, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)descriptorSet, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, name);
|
||||
}
|
||||
|
||||
void setSemaphoreName(VkDevice device, VkSemaphore semaphore, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, name);
|
||||
}
|
||||
|
||||
void setFenceName(VkDevice device, VkFence fence, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, name);
|
||||
}
|
||||
|
||||
void setEventName(VkDevice device, VkEvent _event, const char * name)
|
||||
{
|
||||
setObjectName(device, (uint64_t)_event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, name);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
#pragma once
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#endif
|
||||
#ifdef __ANDROID__
|
||||
#include "VulkanAndroid.h"
|
||||
#endif
|
||||
#define GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace debug
|
||||
{
|
||||
// Default debug callback
|
||||
VKAPI_ATTR VkBool32 VKAPI_CALL messageCallback(
|
||||
VkDebugReportFlagsEXT flags,
|
||||
VkDebugReportObjectTypeEXT objType,
|
||||
uint64_t srcObject,
|
||||
size_t location,
|
||||
int32_t msgCode,
|
||||
const char* pLayerPrefix,
|
||||
const char* pMsg,
|
||||
void* pUserData);
|
||||
|
||||
// Load debug function pointers and set debug callback
|
||||
void setupDebugging(VkInstance instance);
|
||||
// Clear debug callback
|
||||
void freeDebugCallback(VkInstance instance);
|
||||
}
|
||||
|
||||
// Setup and functions for the VK_EXT_debug_marker_extension
|
||||
// Extension spec can be found at https://github.com/KhronosGroup/Vulkan-Docs/blob/1.0-VK_EXT_debug_marker/doc/specs/vulkan/appendices/VK_EXT_debug_marker.txt
|
||||
// Note that the extension will only be present if run from an offline debugging application
|
||||
// The actual check for extension presence and enabling it on the device is done in the example base class
|
||||
// See VulkanExampleBase::createInstance and VulkanExampleBase::createDevice (base/vulkanexamplebase.cpp)
|
||||
namespace debugmarker
|
||||
{
|
||||
// Set to true if function pointer for the debug marker are available
|
||||
extern bool active;
|
||||
|
||||
// Get function pointers for the debug report extensions from the device
|
||||
void setup(VkDevice device);
|
||||
|
||||
// Sets the debug name of an object
|
||||
// All Objects in Vulkan are represented by their 64-bit handles which are passed into this function
|
||||
// along with the object type
|
||||
void setObjectName(VkDevice device, uint64_t object, VkDebugReportObjectTypeEXT objectType, const char *name);
|
||||
|
||||
// Set the tag for an object
|
||||
void setObjectTag(VkDevice device, uint64_t object, VkDebugReportObjectTypeEXT objectType, uint64_t name, size_t tagSize, const void* tag);
|
||||
|
||||
// Start a new debug marker region
|
||||
void beginRegion(VkCommandBuffer cmdbuffer, const char* pMarkerName, glm::vec4 color);
|
||||
|
||||
// Insert a new debug marker into the command buffer
|
||||
void insert(VkCommandBuffer cmdbuffer, std::string markerName, glm::vec4 color);
|
||||
|
||||
// End the current debug marker region
|
||||
void endRegion(VkCommandBuffer cmdBuffer);
|
||||
|
||||
// Object specific naming functions
|
||||
void setCommandBufferName(VkDevice device, VkCommandBuffer cmdBuffer, const char * name);
|
||||
void setQueueName(VkDevice device, VkQueue queue, const char * name);
|
||||
void setImageName(VkDevice device, VkImage image, const char * name);
|
||||
void setSamplerName(VkDevice device, VkSampler sampler, const char * name);
|
||||
void setBufferName(VkDevice device, VkBuffer buffer, const char * name);
|
||||
void setDeviceMemoryName(VkDevice device, VkDeviceMemory memory, const char * name);
|
||||
void setShaderModuleName(VkDevice device, VkShaderModule shaderModule, const char * name);
|
||||
void setPipelineName(VkDevice device, VkPipeline pipeline, const char * name);
|
||||
void setPipelineLayoutName(VkDevice device, VkPipelineLayout pipelineLayout, const char * name);
|
||||
void setRenderPassName(VkDevice device, VkRenderPass renderPass, const char * name);
|
||||
void setFramebufferName(VkDevice device, VkFramebuffer framebuffer, const char * name);
|
||||
void setDescriptorSetLayoutName(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const char * name);
|
||||
void setDescriptorSetName(VkDevice device, VkDescriptorSet descriptorSet, const char * name);
|
||||
void setSemaphoreName(VkDevice device, VkSemaphore semaphore, const char * name);
|
||||
void setFenceName(VkDevice device, VkFence fence, const char * name);
|
||||
void setEventName(VkDevice device, VkEvent _event, const char * name);
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,596 @@
|
|||
/*
|
||||
* Vulkan device class
|
||||
*
|
||||
* Encapsulates a physical Vulkan device and its logical representation
|
||||
*
|
||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#if (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
// SRS - Enable beta extensions and make VK_KHR_portability_subset visible
|
||||
#define VK_ENABLE_BETA_EXTENSIONS
|
||||
#endif
|
||||
#include <VulkanDevice.h>
|
||||
#include <unordered_set>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
/**
|
||||
* Default constructor
|
||||
*
|
||||
* @param physicalDevice Physical device that is to be used
|
||||
*/
|
||||
VulkanDevice::VulkanDevice(VkPhysicalDevice physicalDevice)
|
||||
{
|
||||
assert(physicalDevice);
|
||||
this->physicalDevice = physicalDevice;
|
||||
|
||||
// Store Properties features, limits and properties of the physical device for later use
|
||||
// Device properties also contain limits and sparse properties
|
||||
vkGetPhysicalDeviceProperties(physicalDevice, &properties);
|
||||
// Features should be checked by the examples before using them
|
||||
vkGetPhysicalDeviceFeatures(physicalDevice, &features);
|
||||
// Memory properties are used regularly for creating all kinds of buffers
|
||||
vkGetPhysicalDeviceMemoryProperties(physicalDevice, &memoryProperties);
|
||||
// Queue family properties, used for setting up requested queues upon device creation
|
||||
uint32_t queueFamilyCount;
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, nullptr);
|
||||
assert(queueFamilyCount > 0);
|
||||
queueFamilyProperties.resize(queueFamilyCount);
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, queueFamilyProperties.data());
|
||||
|
||||
// Get list of supported extensions
|
||||
uint32_t extCount = 0;
|
||||
vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extCount, nullptr);
|
||||
if (extCount > 0)
|
||||
{
|
||||
std::vector<VkExtensionProperties> extensions(extCount);
|
||||
if (vkEnumerateDeviceExtensionProperties(physicalDevice, nullptr, &extCount, &extensions.front()) == VK_SUCCESS)
|
||||
{
|
||||
for (auto ext : extensions)
|
||||
{
|
||||
supportedExtensions.push_back(ext.extensionName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Default destructor
|
||||
*
|
||||
* @note Frees the logical device
|
||||
*/
|
||||
VulkanDevice::~VulkanDevice()
|
||||
{
|
||||
if (commandPool)
|
||||
{
|
||||
vkDestroyCommandPool(logicalDevice, commandPool, nullptr);
|
||||
}
|
||||
if (logicalDevice)
|
||||
{
|
||||
vkDestroyDevice(logicalDevice, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of a memory type that has all the requested property bits set
|
||||
*
|
||||
* @param typeBits Bit mask with bits set for each memory type supported by the resource to request for (from VkMemoryRequirements)
|
||||
* @param properties Bit mask of properties for the memory type to request
|
||||
* @param (Optional) memTypeFound Pointer to a bool that is set to true if a matching memory type has been found
|
||||
*
|
||||
* @return Index of the requested memory type
|
||||
*
|
||||
* @throw Throws an exception if memTypeFound is null and no memory type could be found that supports the requested properties
|
||||
*/
|
||||
uint32_t VulkanDevice::getMemoryType(uint32_t typeBits, VkMemoryPropertyFlags properties, VkBool32 *memTypeFound) const
|
||||
{
|
||||
for (uint32_t i = 0; i < memoryProperties.memoryTypeCount; i++)
|
||||
{
|
||||
if ((typeBits & 1) == 1)
|
||||
{
|
||||
if ((memoryProperties.memoryTypes[i].propertyFlags & properties) == properties)
|
||||
{
|
||||
if (memTypeFound)
|
||||
{
|
||||
*memTypeFound = true;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
typeBits >>= 1;
|
||||
}
|
||||
|
||||
if (memTypeFound)
|
||||
{
|
||||
*memTypeFound = false;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("Could not find a matching memory type");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of a queue family that supports the requested queue flags
|
||||
* SRS - support VkQueueFlags parameter for requesting multiple flags vs. VkQueueFlagBits for a single flag only
|
||||
*
|
||||
* @param queueFlags Queue flags to find a queue family index for
|
||||
*
|
||||
* @return Index of the queue family index that matches the flags
|
||||
*
|
||||
* @throw Throws an exception if no queue family index could be found that supports the requested flags
|
||||
*/
|
||||
uint32_t VulkanDevice::getQueueFamilyIndex(VkQueueFlags queueFlags) const
|
||||
{
|
||||
// Dedicated queue for compute
|
||||
// Try to find a queue family index that supports compute but not graphics
|
||||
if ((queueFlags & VK_QUEUE_COMPUTE_BIT) == queueFlags)
|
||||
{
|
||||
for (uint32_t i = 0; i < static_cast<uint32_t>(queueFamilyProperties.size()); i++)
|
||||
{
|
||||
if ((queueFamilyProperties[i].queueFlags & VK_QUEUE_COMPUTE_BIT) && ((queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) == 0))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dedicated queue for transfer
|
||||
// Try to find a queue family index that supports transfer but not graphics and compute
|
||||
if ((queueFlags & VK_QUEUE_TRANSFER_BIT) == queueFlags)
|
||||
{
|
||||
for (uint32_t i = 0; i < static_cast<uint32_t>(queueFamilyProperties.size()); i++)
|
||||
{
|
||||
if ((queueFamilyProperties[i].queueFlags & VK_QUEUE_TRANSFER_BIT) && ((queueFamilyProperties[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) == 0) && ((queueFamilyProperties[i].queueFlags & VK_QUEUE_COMPUTE_BIT) == 0))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// For other queue types or if no separate compute queue is present, return the first one to support the requested flags
|
||||
for (uint32_t i = 0; i < static_cast<uint32_t>(queueFamilyProperties.size()); i++)
|
||||
{
|
||||
if ((queueFamilyProperties[i].queueFlags & queueFlags) == queueFlags)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
throw std::runtime_error("Could not find a matching queue family index");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the logical device based on the assigned physical device, also gets default queue family indices
|
||||
*
|
||||
* @param enabledFeatures Can be used to enable certain features upon device creation
|
||||
* @param pNextChain Optional chain of pointer to extension structures
|
||||
* @param useSwapChain Set to false for headless rendering to omit the swapchain device extensions
|
||||
* @param requestedQueueTypes Bit flags specifying the queue types to be requested from the device
|
||||
*
|
||||
* @return VkResult of the device creation call
|
||||
*/
|
||||
VkResult VulkanDevice::createLogicalDevice(VkPhysicalDeviceFeatures enabledFeatures, std::vector<const char*> enabledExtensions, void* pNextChain, bool useSwapChain, VkQueueFlags requestedQueueTypes)
|
||||
{
|
||||
// Desired queues need to be requested upon logical device creation
|
||||
// Due to differing queue family configurations of Vulkan implementations this can be a bit tricky, especially if the application
|
||||
// requests different queue types
|
||||
|
||||
std::vector<VkDeviceQueueCreateInfo> queueCreateInfos{};
|
||||
|
||||
// Get queue family indices for the requested queue family types
|
||||
// Note that the indices may overlap depending on the implementation
|
||||
|
||||
const float defaultQueuePriority(0.0f);
|
||||
|
||||
// Graphics queue
|
||||
if (requestedQueueTypes & VK_QUEUE_GRAPHICS_BIT)
|
||||
{
|
||||
queueFamilyIndices.graphics = getQueueFamilyIndex(VK_QUEUE_GRAPHICS_BIT);
|
||||
VkDeviceQueueCreateInfo queueInfo{};
|
||||
queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueInfo.queueFamilyIndex = queueFamilyIndices.graphics;
|
||||
queueInfo.queueCount = 1;
|
||||
queueInfo.pQueuePriorities = &defaultQueuePriority;
|
||||
queueCreateInfos.push_back(queueInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
queueFamilyIndices.graphics = 0;
|
||||
}
|
||||
|
||||
// Dedicated compute queue
|
||||
if (requestedQueueTypes & VK_QUEUE_COMPUTE_BIT)
|
||||
{
|
||||
queueFamilyIndices.compute = getQueueFamilyIndex(VK_QUEUE_COMPUTE_BIT);
|
||||
if (queueFamilyIndices.compute != queueFamilyIndices.graphics)
|
||||
{
|
||||
// If compute family index differs, we need an additional queue create info for the compute queue
|
||||
VkDeviceQueueCreateInfo queueInfo{};
|
||||
queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueInfo.queueFamilyIndex = queueFamilyIndices.compute;
|
||||
queueInfo.queueCount = 1;
|
||||
queueInfo.pQueuePriorities = &defaultQueuePriority;
|
||||
queueCreateInfos.push_back(queueInfo);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Else we use the same queue
|
||||
queueFamilyIndices.compute = queueFamilyIndices.graphics;
|
||||
}
|
||||
|
||||
// Dedicated transfer queue
|
||||
if (requestedQueueTypes & VK_QUEUE_TRANSFER_BIT)
|
||||
{
|
||||
queueFamilyIndices.transfer = getQueueFamilyIndex(VK_QUEUE_TRANSFER_BIT);
|
||||
if ((queueFamilyIndices.transfer != queueFamilyIndices.graphics) && (queueFamilyIndices.transfer != queueFamilyIndices.compute))
|
||||
{
|
||||
// If transfer family index differs, we need an additional queue create info for the transfer queue
|
||||
VkDeviceQueueCreateInfo queueInfo{};
|
||||
queueInfo.sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;
|
||||
queueInfo.queueFamilyIndex = queueFamilyIndices.transfer;
|
||||
queueInfo.queueCount = 1;
|
||||
queueInfo.pQueuePriorities = &defaultQueuePriority;
|
||||
queueCreateInfos.push_back(queueInfo);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Else we use the same queue
|
||||
queueFamilyIndices.transfer = queueFamilyIndices.graphics;
|
||||
}
|
||||
|
||||
// Create the logical device representation
|
||||
std::vector<const char*> deviceExtensions(enabledExtensions);
|
||||
if (useSwapChain)
|
||||
{
|
||||
// If the device will be used for presenting to a display via a swapchain we need to request the swapchain extension
|
||||
deviceExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
VkDeviceCreateInfo deviceCreateInfo = {};
|
||||
deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;
|
||||
deviceCreateInfo.queueCreateInfoCount = static_cast<uint32_t>(queueCreateInfos.size());;
|
||||
deviceCreateInfo.pQueueCreateInfos = queueCreateInfos.data();
|
||||
deviceCreateInfo.pEnabledFeatures = &enabledFeatures;
|
||||
|
||||
// If a pNext(Chain) has been passed, we need to add it to the device creation info
|
||||
VkPhysicalDeviceFeatures2 physicalDeviceFeatures2{};
|
||||
if (pNextChain) {
|
||||
physicalDeviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
||||
physicalDeviceFeatures2.features = enabledFeatures;
|
||||
physicalDeviceFeatures2.pNext = pNextChain;
|
||||
deviceCreateInfo.pEnabledFeatures = nullptr;
|
||||
deviceCreateInfo.pNext = &physicalDeviceFeatures2;
|
||||
}
|
||||
|
||||
// Enable the debug marker extension if it is present (likely meaning a debugging tool is present)
|
||||
if (extensionSupported(VK_EXT_DEBUG_MARKER_EXTENSION_NAME))
|
||||
{
|
||||
deviceExtensions.push_back(VK_EXT_DEBUG_MARKER_EXTENSION_NAME);
|
||||
enableDebugMarkers = true;
|
||||
}
|
||||
|
||||
#if (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK)) && defined(VK_KHR_portability_subset)
|
||||
// SRS - When running on iOS/macOS with MoltenVK and VK_KHR_portability_subset is defined and supported by the device, enable the extension
|
||||
if (extensionSupported(VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME))
|
||||
{
|
||||
deviceExtensions.push_back(VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (deviceExtensions.size() > 0)
|
||||
{
|
||||
for (const char* enabledExtension : deviceExtensions)
|
||||
{
|
||||
if (!extensionSupported(enabledExtension)) {
|
||||
std::cerr << "Enabled device extension \"" << enabledExtension << "\" is not present at device level\n";
|
||||
}
|
||||
}
|
||||
|
||||
deviceCreateInfo.enabledExtensionCount = (uint32_t)deviceExtensions.size();
|
||||
deviceCreateInfo.ppEnabledExtensionNames = deviceExtensions.data();
|
||||
}
|
||||
|
||||
this->enabledFeatures = enabledFeatures;
|
||||
|
||||
VkResult result = vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &logicalDevice);
|
||||
if (result != VK_SUCCESS)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create a default command pool for graphics command buffers
|
||||
commandPool = createCommandPool(queueFamilyIndices.graphics);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a buffer on the device
|
||||
*
|
||||
* @param usageFlags Usage flag bit mask for the buffer (i.e. index, vertex, uniform buffer)
|
||||
* @param memoryPropertyFlags Memory properties for this buffer (i.e. device local, host visible, coherent)
|
||||
* @param size Size of the buffer in byes
|
||||
* @param buffer Pointer to the buffer handle acquired by the function
|
||||
* @param memory Pointer to the memory handle acquired by the function
|
||||
* @param data Pointer to the data that should be copied to the buffer after creation (optional, if not set, no data is copied over)
|
||||
*
|
||||
* @return VK_SUCCESS if buffer handle and memory have been created and (optionally passed) data has been copied
|
||||
*/
|
||||
VkResult VulkanDevice::createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size, VkBuffer *buffer, VkDeviceMemory *memory, void *data)
|
||||
{
|
||||
// Create the buffer handle
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo(usageFlags, size);
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
VK_CHECK_RESULT(vkCreateBuffer(logicalDevice, &bufferCreateInfo, nullptr, buffer));
|
||||
|
||||
// Create the memory backing up the buffer handle
|
||||
VkMemoryRequirements memReqs;
|
||||
VkMemoryAllocateInfo memAlloc = vks::initializers::memoryAllocateInfo();
|
||||
vkGetBufferMemoryRequirements(logicalDevice, *buffer, &memReqs);
|
||||
memAlloc.allocationSize = memReqs.size;
|
||||
// Find a memory type index that fits the properties of the buffer
|
||||
memAlloc.memoryTypeIndex = getMemoryType(memReqs.memoryTypeBits, memoryPropertyFlags);
|
||||
// If the buffer has VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT set we also need to enable the appropriate flag during allocation
|
||||
VkMemoryAllocateFlagsInfoKHR allocFlagsInfo{};
|
||||
if (usageFlags & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) {
|
||||
allocFlagsInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR;
|
||||
allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
|
||||
memAlloc.pNext = &allocFlagsInfo;
|
||||
}
|
||||
VK_CHECK_RESULT(vkAllocateMemory(logicalDevice, &memAlloc, nullptr, memory));
|
||||
|
||||
// If a pointer to the buffer data has been passed, map the buffer and copy over the data
|
||||
if (data != nullptr)
|
||||
{
|
||||
void *mapped;
|
||||
VK_CHECK_RESULT(vkMapMemory(logicalDevice, *memory, 0, size, 0, &mapped));
|
||||
memcpy(mapped, data, size);
|
||||
// If host coherency hasn't been requested, do a manual flush to make writes visible
|
||||
if ((memoryPropertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) == 0)
|
||||
{
|
||||
VkMappedMemoryRange mappedRange = vks::initializers::mappedMemoryRange();
|
||||
mappedRange.memory = *memory;
|
||||
mappedRange.offset = 0;
|
||||
mappedRange.size = size;
|
||||
vkFlushMappedMemoryRanges(logicalDevice, 1, &mappedRange);
|
||||
}
|
||||
vkUnmapMemory(logicalDevice, *memory);
|
||||
}
|
||||
|
||||
// Attach the memory to the buffer object
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(logicalDevice, *buffer, *memory, 0));
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a buffer on the device
|
||||
*
|
||||
* @param usageFlags Usage flag bit mask for the buffer (i.e. index, vertex, uniform buffer)
|
||||
* @param memoryPropertyFlags Memory properties for this buffer (i.e. device local, host visible, coherent)
|
||||
* @param buffer Pointer to a vk::Vulkan buffer object
|
||||
* @param size Size of the buffer in bytes
|
||||
* @param data Pointer to the data that should be copied to the buffer after creation (optional, if not set, no data is copied over)
|
||||
*
|
||||
* @return VK_SUCCESS if buffer handle and memory have been created and (optionally passed) data has been copied
|
||||
*/
|
||||
VkResult VulkanDevice::createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, vks::Buffer *buffer, VkDeviceSize size, void *data)
|
||||
{
|
||||
buffer->device = logicalDevice;
|
||||
|
||||
// Create the buffer handle
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo(usageFlags, size);
|
||||
VK_CHECK_RESULT(vkCreateBuffer(logicalDevice, &bufferCreateInfo, nullptr, &buffer->buffer));
|
||||
|
||||
// Create the memory backing up the buffer handle
|
||||
VkMemoryRequirements memReqs;
|
||||
VkMemoryAllocateInfo memAlloc = vks::initializers::memoryAllocateInfo();
|
||||
vkGetBufferMemoryRequirements(logicalDevice, buffer->buffer, &memReqs);
|
||||
memAlloc.allocationSize = memReqs.size;
|
||||
// Find a memory type index that fits the properties of the buffer
|
||||
memAlloc.memoryTypeIndex = getMemoryType(memReqs.memoryTypeBits, memoryPropertyFlags);
|
||||
// If the buffer has VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT set we also need to enable the appropriate flag during allocation
|
||||
VkMemoryAllocateFlagsInfoKHR allocFlagsInfo{};
|
||||
if (usageFlags & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT) {
|
||||
allocFlagsInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR;
|
||||
allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
|
||||
memAlloc.pNext = &allocFlagsInfo;
|
||||
}
|
||||
VK_CHECK_RESULT(vkAllocateMemory(logicalDevice, &memAlloc, nullptr, &buffer->memory));
|
||||
|
||||
buffer->alignment = memReqs.alignment;
|
||||
buffer->size = size;
|
||||
buffer->usageFlags = usageFlags;
|
||||
buffer->memoryPropertyFlags = memoryPropertyFlags;
|
||||
|
||||
// If a pointer to the buffer data has been passed, map the buffer and copy over the data
|
||||
if (data != nullptr)
|
||||
{
|
||||
VK_CHECK_RESULT(buffer->map());
|
||||
memcpy(buffer->mapped, data, size);
|
||||
if ((memoryPropertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) == 0)
|
||||
buffer->flush();
|
||||
|
||||
buffer->unmap();
|
||||
}
|
||||
|
||||
// Initialize a default descriptor that covers the whole buffer size
|
||||
buffer->setupDescriptor();
|
||||
|
||||
// Attach the memory to the buffer object
|
||||
return buffer->bind();
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy buffer data from src to dst using VkCmdCopyBuffer
|
||||
*
|
||||
* @param src Pointer to the source buffer to copy from
|
||||
* @param dst Pointer to the destination buffer to copy to
|
||||
* @param queue Pointer
|
||||
* @param copyRegion (Optional) Pointer to a copy region, if NULL, the whole buffer is copied
|
||||
*
|
||||
* @note Source and destination pointers must have the appropriate transfer usage flags set (TRANSFER_SRC / TRANSFER_DST)
|
||||
*/
|
||||
void VulkanDevice::copyBuffer(vks::Buffer *src, vks::Buffer *dst, VkQueue queue, VkBufferCopy *copyRegion)
|
||||
{
|
||||
assert(dst->size <= src->size);
|
||||
assert(src->buffer);
|
||||
VkCommandBuffer copyCmd = createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
VkBufferCopy bufferCopy{};
|
||||
if (copyRegion == nullptr)
|
||||
{
|
||||
bufferCopy.size = src->size;
|
||||
}
|
||||
else
|
||||
{
|
||||
bufferCopy = *copyRegion;
|
||||
}
|
||||
|
||||
vkCmdCopyBuffer(copyCmd, src->buffer, dst->buffer, 1, &bufferCopy);
|
||||
|
||||
flushCommandBuffer(copyCmd, queue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a command pool for allocation command buffers from
|
||||
*
|
||||
* @param queueFamilyIndex Family index of the queue to create the command pool for
|
||||
* @param createFlags (Optional) Command pool creation flags (Defaults to VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
|
||||
*
|
||||
* @note Command buffers allocated from the created pool can only be submitted to a queue with the same family index
|
||||
*
|
||||
* @return A handle to the created command buffer
|
||||
*/
|
||||
VkCommandPool VulkanDevice::createCommandPool(uint32_t queueFamilyIndex, VkCommandPoolCreateFlags createFlags)
|
||||
{
|
||||
VkCommandPoolCreateInfo cmdPoolInfo = {};
|
||||
cmdPoolInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
cmdPoolInfo.queueFamilyIndex = queueFamilyIndex;
|
||||
cmdPoolInfo.flags = createFlags;
|
||||
VkCommandPool cmdPool;
|
||||
VK_CHECK_RESULT(vkCreateCommandPool(logicalDevice, &cmdPoolInfo, nullptr, &cmdPool));
|
||||
return cmdPool;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allocate a command buffer from the command pool
|
||||
*
|
||||
* @param level Level of the new command buffer (primary or secondary)
|
||||
* @param pool Command pool from which the command buffer will be allocated
|
||||
* @param (Optional) begin If true, recording on the new command buffer will be started (vkBeginCommandBuffer) (Defaults to false)
|
||||
*
|
||||
* @return A handle to the allocated command buffer
|
||||
*/
|
||||
VkCommandBuffer VulkanDevice::createCommandBuffer(VkCommandBufferLevel level, VkCommandPool pool, bool begin)
|
||||
{
|
||||
VkCommandBufferAllocateInfo cmdBufAllocateInfo = vks::initializers::commandBufferAllocateInfo(pool, level, 1);
|
||||
VkCommandBuffer cmdBuffer;
|
||||
VK_CHECK_RESULT(vkAllocateCommandBuffers(logicalDevice, &cmdBufAllocateInfo, &cmdBuffer));
|
||||
// If requested, also start recording for the new command buffer
|
||||
if (begin)
|
||||
{
|
||||
VkCommandBufferBeginInfo cmdBufInfo = vks::initializers::commandBufferBeginInfo();
|
||||
VK_CHECK_RESULT(vkBeginCommandBuffer(cmdBuffer, &cmdBufInfo));
|
||||
}
|
||||
return cmdBuffer;
|
||||
}
|
||||
|
||||
VkCommandBuffer VulkanDevice::createCommandBuffer(VkCommandBufferLevel level, bool begin)
|
||||
{
|
||||
return createCommandBuffer(level, commandPool, begin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finish command buffer recording and submit it to a queue
|
||||
*
|
||||
* @param commandBuffer Command buffer to flush
|
||||
* @param queue Queue to submit the command buffer to
|
||||
* @param pool Command pool on which the command buffer has been created
|
||||
* @param free (Optional) Free the command buffer once it has been submitted (Defaults to true)
|
||||
*
|
||||
* @note The queue that the command buffer is submitted to must be from the same family index as the pool it was allocated from
|
||||
* @note Uses a fence to ensure command buffer has finished executing
|
||||
*/
|
||||
void VulkanDevice::flushCommandBuffer(VkCommandBuffer commandBuffer, VkQueue queue, VkCommandPool pool, bool free)
|
||||
{
|
||||
if (commandBuffer == VK_NULL_HANDLE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
VK_CHECK_RESULT(vkEndCommandBuffer(commandBuffer));
|
||||
|
||||
VkSubmitInfo submitInfo = vks::initializers::submitInfo();
|
||||
submitInfo.commandBufferCount = 1;
|
||||
submitInfo.pCommandBuffers = &commandBuffer;
|
||||
// Create fence to ensure that the command buffer has finished executing
|
||||
VkFenceCreateInfo fenceInfo = vks::initializers::fenceCreateInfo(VK_FLAGS_NONE);
|
||||
VkFence fence;
|
||||
VK_CHECK_RESULT(vkCreateFence(logicalDevice, &fenceInfo, nullptr, &fence));
|
||||
// Submit to the queue
|
||||
VK_CHECK_RESULT(vkQueueSubmit(queue, 1, &submitInfo, fence));
|
||||
// Wait for the fence to signal that command buffer has finished executing
|
||||
VK_CHECK_RESULT(vkWaitForFences(logicalDevice, 1, &fence, VK_TRUE, DEFAULT_FENCE_TIMEOUT));
|
||||
vkDestroyFence(logicalDevice, fence, nullptr);
|
||||
if (free)
|
||||
{
|
||||
vkFreeCommandBuffers(logicalDevice, pool, 1, &commandBuffer);
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanDevice::flushCommandBuffer(VkCommandBuffer commandBuffer, VkQueue queue, bool free)
|
||||
{
|
||||
return flushCommandBuffer(commandBuffer, queue, commandPool, free);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if an extension is supported by the (physical device)
|
||||
*
|
||||
* @param extension Name of the extension to check
|
||||
*
|
||||
* @return True if the extension is supported (present in the list read at device creation time)
|
||||
*/
|
||||
bool VulkanDevice::extensionSupported(std::string extension)
|
||||
{
|
||||
return (std::find(supportedExtensions.begin(), supportedExtensions.end(), extension) != supportedExtensions.end());
|
||||
}
|
||||
|
||||
/**
|
||||
* Select the best-fit depth format for this device from a list of possible depth (and stencil) formats
|
||||
*
|
||||
* @param checkSamplingSupport Check if the format can be sampled from (e.g. for shader reads)
|
||||
*
|
||||
* @return The depth format that best fits for the current device
|
||||
*
|
||||
* @throw Throws an exception if no depth format fits the requirements
|
||||
*/
|
||||
VkFormat VulkanDevice::getSupportedDepthFormat(bool checkSamplingSupport)
|
||||
{
|
||||
// All depth formats may be optional, so we need to find a suitable depth format to use
|
||||
std::vector<VkFormat> depthFormats = { VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D16_UNORM };
|
||||
for (auto& format : depthFormats)
|
||||
{
|
||||
VkFormatProperties formatProperties;
|
||||
vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &formatProperties);
|
||||
// Format must support depth stencil attachment for optimal tiling
|
||||
if (formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
|
||||
{
|
||||
if (checkSamplingSupport) {
|
||||
if (!(formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
}
|
||||
throw std::runtime_error("Could not find a matching depth format");
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Vulkan device class
|
||||
*
|
||||
* Encapsulates a physical Vulkan device and its logical representation
|
||||
*
|
||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "VulkanBuffer.h"
|
||||
#include "VulkanTools.h"
|
||||
#include "vulkan/vulkan.h"
|
||||
#include <algorithm>
|
||||
#include <assert.h>
|
||||
#include <exception>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
struct VulkanDevice
|
||||
{
|
||||
/** @brief Physical device representation */
|
||||
VkPhysicalDevice physicalDevice;
|
||||
/** @brief Logical device representation (application's view of the device) */
|
||||
VkDevice logicalDevice;
|
||||
/** @brief Properties of the physical device including limits that the application can check against */
|
||||
VkPhysicalDeviceProperties properties;
|
||||
/** @brief Features of the physical device that an application can use to check if a feature is supported */
|
||||
VkPhysicalDeviceFeatures features;
|
||||
/** @brief Features that have been enabled for use on the physical device */
|
||||
VkPhysicalDeviceFeatures enabledFeatures;
|
||||
/** @brief Memory types and heaps of the physical device */
|
||||
VkPhysicalDeviceMemoryProperties memoryProperties;
|
||||
/** @brief Queue family properties of the physical device */
|
||||
std::vector<VkQueueFamilyProperties> queueFamilyProperties;
|
||||
/** @brief List of extensions supported by the device */
|
||||
std::vector<std::string> supportedExtensions;
|
||||
/** @brief Default command pool for the graphics queue family index */
|
||||
VkCommandPool commandPool = VK_NULL_HANDLE;
|
||||
/** @brief Set to true when the debug marker extension is detected */
|
||||
bool enableDebugMarkers = false;
|
||||
/** @brief Contains queue family indices */
|
||||
struct
|
||||
{
|
||||
uint32_t graphics;
|
||||
uint32_t compute;
|
||||
uint32_t transfer;
|
||||
} queueFamilyIndices;
|
||||
operator VkDevice() const
|
||||
{
|
||||
return logicalDevice;
|
||||
};
|
||||
explicit VulkanDevice(VkPhysicalDevice physicalDevice);
|
||||
~VulkanDevice();
|
||||
uint32_t getMemoryType(uint32_t typeBits, VkMemoryPropertyFlags properties, VkBool32 *memTypeFound = nullptr) const;
|
||||
uint32_t getQueueFamilyIndex(VkQueueFlags queueFlags) const;
|
||||
VkResult createLogicalDevice(VkPhysicalDeviceFeatures enabledFeatures, std::vector<const char *> enabledExtensions, void *pNextChain, bool useSwapChain = true, VkQueueFlags requestedQueueTypes = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT);
|
||||
VkResult createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, VkDeviceSize size, VkBuffer *buffer, VkDeviceMemory *memory, void *data = nullptr);
|
||||
VkResult createBuffer(VkBufferUsageFlags usageFlags, VkMemoryPropertyFlags memoryPropertyFlags, vks::Buffer *buffer, VkDeviceSize size, void *data = nullptr);
|
||||
void copyBuffer(vks::Buffer *src, vks::Buffer *dst, VkQueue queue, VkBufferCopy *copyRegion = nullptr);
|
||||
VkCommandPool createCommandPool(uint32_t queueFamilyIndex, VkCommandPoolCreateFlags createFlags = VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
|
||||
VkCommandBuffer createCommandBuffer(VkCommandBufferLevel level, VkCommandPool pool, bool begin = false);
|
||||
VkCommandBuffer createCommandBuffer(VkCommandBufferLevel level, bool begin = false);
|
||||
void flushCommandBuffer(VkCommandBuffer commandBuffer, VkQueue queue, VkCommandPool pool, bool free = true);
|
||||
void flushCommandBuffer(VkCommandBuffer commandBuffer, VkQueue queue, bool free = true);
|
||||
bool extensionSupported(std::string extension);
|
||||
VkFormat getSupportedDepthFormat(bool checkSamplingSupport);
|
||||
};
|
||||
} // namespace vks
|
||||
|
|
@ -0,0 +1,366 @@
|
|||
/*
|
||||
* Vulkan framebuffer class
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <algorithm>
|
||||
#include <iterator>
|
||||
#include <vector>
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "VulkanDevice.h"
|
||||
#include "VulkanTools.h"
|
||||
|
||||
namespace vks
|
||||
{
|
||||
/**
|
||||
* @brief Encapsulates a single frame buffer attachment
|
||||
*/
|
||||
struct FramebufferAttachment
|
||||
{
|
||||
VkImage image;
|
||||
VkDeviceMemory memory;
|
||||
VkImageView view;
|
||||
VkFormat format;
|
||||
VkImageSubresourceRange subresourceRange;
|
||||
VkAttachmentDescription description;
|
||||
|
||||
/**
|
||||
* @brief Returns true if the attachment has a depth component
|
||||
*/
|
||||
bool hasDepth()
|
||||
{
|
||||
std::vector<VkFormat> formats =
|
||||
{
|
||||
VK_FORMAT_D16_UNORM,
|
||||
VK_FORMAT_X8_D24_UNORM_PACK32,
|
||||
VK_FORMAT_D32_SFLOAT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
};
|
||||
return std::find(formats.begin(), formats.end(), format) != std::end(formats);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns true if the attachment has a stencil component
|
||||
*/
|
||||
bool hasStencil()
|
||||
{
|
||||
std::vector<VkFormat> formats =
|
||||
{
|
||||
VK_FORMAT_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
};
|
||||
return std::find(formats.begin(), formats.end(), format) != std::end(formats);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns true if the attachment is a depth and/or stencil attachment
|
||||
*/
|
||||
bool isDepthStencil()
|
||||
{
|
||||
return(hasDepth() || hasStencil());
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Describes the attributes of an attachment to be created
|
||||
*/
|
||||
struct AttachmentCreateInfo
|
||||
{
|
||||
uint32_t width, height;
|
||||
uint32_t layerCount;
|
||||
VkFormat format;
|
||||
VkImageUsageFlags usage;
|
||||
VkSampleCountFlagBits imageSampleCount = VK_SAMPLE_COUNT_1_BIT;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Encapsulates a complete Vulkan framebuffer with an arbitrary number and combination of attachments
|
||||
*/
|
||||
struct Framebuffer
|
||||
{
|
||||
private:
|
||||
vks::VulkanDevice *vulkanDevice;
|
||||
public:
|
||||
uint32_t width, height;
|
||||
VkFramebuffer framebuffer;
|
||||
VkRenderPass renderPass;
|
||||
VkSampler sampler;
|
||||
std::vector<vks::FramebufferAttachment> attachments;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*
|
||||
* @param vulkanDevice Pointer to a valid VulkanDevice
|
||||
*/
|
||||
Framebuffer(vks::VulkanDevice *vulkanDevice)
|
||||
{
|
||||
assert(vulkanDevice);
|
||||
this->vulkanDevice = vulkanDevice;
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy and free Vulkan resources used for the framebuffer and all of its attachments
|
||||
*/
|
||||
~Framebuffer()
|
||||
{
|
||||
assert(vulkanDevice);
|
||||
for (auto attachment : attachments)
|
||||
{
|
||||
vkDestroyImage(vulkanDevice->logicalDevice, attachment.image, nullptr);
|
||||
vkDestroyImageView(vulkanDevice->logicalDevice, attachment.view, nullptr);
|
||||
vkFreeMemory(vulkanDevice->logicalDevice, attachment.memory, nullptr);
|
||||
}
|
||||
vkDestroySampler(vulkanDevice->logicalDevice, sampler, nullptr);
|
||||
vkDestroyRenderPass(vulkanDevice->logicalDevice, renderPass, nullptr);
|
||||
vkDestroyFramebuffer(vulkanDevice->logicalDevice, framebuffer, nullptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new attachment described by createinfo to the framebuffer's attachment list
|
||||
*
|
||||
* @param createinfo Structure that specifies the framebuffer to be constructed
|
||||
*
|
||||
* @return Index of the new attachment
|
||||
*/
|
||||
uint32_t addAttachment(vks::AttachmentCreateInfo createinfo)
|
||||
{
|
||||
vks::FramebufferAttachment attachment;
|
||||
|
||||
attachment.format = createinfo.format;
|
||||
|
||||
VkImageAspectFlags aspectMask = VK_FLAGS_NONE;
|
||||
|
||||
// Select aspect mask and layout depending on usage
|
||||
|
||||
// Color attachment
|
||||
if (createinfo.usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
|
||||
{
|
||||
aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
}
|
||||
|
||||
// Depth (and/or stencil) attachment
|
||||
if (createinfo.usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
|
||||
{
|
||||
if (attachment.hasDepth())
|
||||
{
|
||||
aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT;
|
||||
}
|
||||
if (attachment.hasStencil())
|
||||
{
|
||||
aspectMask = aspectMask | VK_IMAGE_ASPECT_STENCIL_BIT;
|
||||
}
|
||||
}
|
||||
|
||||
assert(aspectMask > 0);
|
||||
|
||||
VkImageCreateInfo image = vks::initializers::imageCreateInfo();
|
||||
image.imageType = VK_IMAGE_TYPE_2D;
|
||||
image.format = createinfo.format;
|
||||
image.extent.width = createinfo.width;
|
||||
image.extent.height = createinfo.height;
|
||||
image.extent.depth = 1;
|
||||
image.mipLevels = 1;
|
||||
image.arrayLayers = createinfo.layerCount;
|
||||
image.samples = createinfo.imageSampleCount;
|
||||
image.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
image.usage = createinfo.usage;
|
||||
|
||||
VkMemoryAllocateInfo memAlloc = vks::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
// Create image for this attachment
|
||||
VK_CHECK_RESULT(vkCreateImage(vulkanDevice->logicalDevice, &image, nullptr, &attachment.image));
|
||||
vkGetImageMemoryRequirements(vulkanDevice->logicalDevice, attachment.image, &memReqs);
|
||||
memAlloc.allocationSize = memReqs.size;
|
||||
memAlloc.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(vulkanDevice->logicalDevice, &memAlloc, nullptr, &attachment.memory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(vulkanDevice->logicalDevice, attachment.image, attachment.memory, 0));
|
||||
|
||||
attachment.subresourceRange = {};
|
||||
attachment.subresourceRange.aspectMask = aspectMask;
|
||||
attachment.subresourceRange.levelCount = 1;
|
||||
attachment.subresourceRange.layerCount = createinfo.layerCount;
|
||||
|
||||
VkImageViewCreateInfo imageView = vks::initializers::imageViewCreateInfo();
|
||||
imageView.viewType = (createinfo.layerCount == 1) ? VK_IMAGE_VIEW_TYPE_2D : VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||
imageView.format = createinfo.format;
|
||||
imageView.subresourceRange = attachment.subresourceRange;
|
||||
//todo: workaround for depth+stencil attachments
|
||||
imageView.subresourceRange.aspectMask = (attachment.hasDepth()) ? VK_IMAGE_ASPECT_DEPTH_BIT : aspectMask;
|
||||
imageView.image = attachment.image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(vulkanDevice->logicalDevice, &imageView, nullptr, &attachment.view));
|
||||
|
||||
// Fill attachment description
|
||||
attachment.description = {};
|
||||
attachment.description.samples = createinfo.imageSampleCount;
|
||||
attachment.description.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
attachment.description.storeOp = (createinfo.usage & VK_IMAGE_USAGE_SAMPLED_BIT) ? VK_ATTACHMENT_STORE_OP_STORE : VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachment.description.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
attachment.description.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachment.description.format = createinfo.format;
|
||||
attachment.description.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
// Final layout
|
||||
// If not, final layout depends on attachment type
|
||||
if (attachment.hasDepth() || attachment.hasStencil())
|
||||
{
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
attachment.description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||
}
|
||||
|
||||
attachments.push_back(attachment);
|
||||
|
||||
return static_cast<uint32_t>(attachments.size() - 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a default sampler for sampling from any of the framebuffer attachments
|
||||
* Applications are free to create their own samplers for different use cases
|
||||
*
|
||||
* @param magFilter Magnification filter for lookups
|
||||
* @param minFilter Minification filter for lookups
|
||||
* @param adressMode Addressing mode for the U,V and W coordinates
|
||||
*
|
||||
* @return VkResult for the sampler creation
|
||||
*/
|
||||
VkResult createSampler(VkFilter magFilter, VkFilter minFilter, VkSamplerAddressMode adressMode)
|
||||
{
|
||||
VkSamplerCreateInfo samplerInfo = vks::initializers::samplerCreateInfo();
|
||||
samplerInfo.magFilter = magFilter;
|
||||
samplerInfo.minFilter = minFilter;
|
||||
samplerInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerInfo.addressModeU = adressMode;
|
||||
samplerInfo.addressModeV = adressMode;
|
||||
samplerInfo.addressModeW = adressMode;
|
||||
samplerInfo.mipLodBias = 0.0f;
|
||||
samplerInfo.maxAnisotropy = 1.0f;
|
||||
samplerInfo.minLod = 0.0f;
|
||||
samplerInfo.maxLod = 1.0f;
|
||||
samplerInfo.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
|
||||
return vkCreateSampler(vulkanDevice->logicalDevice, &samplerInfo, nullptr, &sampler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a default render pass setup with one sub pass
|
||||
*
|
||||
* @return VK_SUCCESS if all resources have been created successfully
|
||||
*/
|
||||
VkResult createRenderPass()
|
||||
{
|
||||
std::vector<VkAttachmentDescription> attachmentDescriptions;
|
||||
for (auto& attachment : attachments)
|
||||
{
|
||||
attachmentDescriptions.push_back(attachment.description);
|
||||
};
|
||||
|
||||
// Collect attachment references
|
||||
std::vector<VkAttachmentReference> colorReferences;
|
||||
VkAttachmentReference depthReference = {};
|
||||
bool hasDepth = false;
|
||||
bool hasColor = false;
|
||||
|
||||
uint32_t attachmentIndex = 0;
|
||||
|
||||
for (auto& attachment : attachments)
|
||||
{
|
||||
if (attachment.isDepthStencil())
|
||||
{
|
||||
// Only one depth attachment allowed
|
||||
assert(!hasDepth);
|
||||
depthReference.attachment = attachmentIndex;
|
||||
depthReference.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
hasDepth = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
colorReferences.push_back({ attachmentIndex, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL });
|
||||
hasColor = true;
|
||||
}
|
||||
attachmentIndex++;
|
||||
};
|
||||
|
||||
// Default render pass setup uses only one subpass
|
||||
VkSubpassDescription subpass = {};
|
||||
subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
if (hasColor)
|
||||
{
|
||||
subpass.pColorAttachments = colorReferences.data();
|
||||
subpass.colorAttachmentCount = static_cast<uint32_t>(colorReferences.size());
|
||||
}
|
||||
if (hasDepth)
|
||||
{
|
||||
subpass.pDepthStencilAttachment = &depthReference;
|
||||
}
|
||||
|
||||
// Use subpass dependencies for attachment layout transitions
|
||||
std::array<VkSubpassDependency, 2> dependencies;
|
||||
|
||||
dependencies[0].srcSubpass = VK_SUBPASS_EXTERNAL;
|
||||
dependencies[0].dstSubpass = 0;
|
||||
dependencies[0].srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||||
dependencies[0].dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependencies[0].srcAccessMask = VK_ACCESS_MEMORY_READ_BIT;
|
||||
dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependencies[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
|
||||
|
||||
dependencies[1].srcSubpass = 0;
|
||||
dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL;
|
||||
dependencies[1].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependencies[1].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||||
dependencies[1].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependencies[1].dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
|
||||
dependencies[1].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
|
||||
|
||||
// Create render pass
|
||||
VkRenderPassCreateInfo renderPassInfo = {};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
renderPassInfo.pAttachments = attachmentDescriptions.data();
|
||||
renderPassInfo.attachmentCount = static_cast<uint32_t>(attachmentDescriptions.size());
|
||||
renderPassInfo.subpassCount = 1;
|
||||
renderPassInfo.pSubpasses = &subpass;
|
||||
renderPassInfo.dependencyCount = 2;
|
||||
renderPassInfo.pDependencies = dependencies.data();
|
||||
VK_CHECK_RESULT(vkCreateRenderPass(vulkanDevice->logicalDevice, &renderPassInfo, nullptr, &renderPass));
|
||||
|
||||
std::vector<VkImageView> attachmentViews;
|
||||
for (auto attachment : attachments)
|
||||
{
|
||||
attachmentViews.push_back(attachment.view);
|
||||
}
|
||||
|
||||
// Find. max number of layers across attachments
|
||||
uint32_t maxLayers = 0;
|
||||
for (auto attachment : attachments)
|
||||
{
|
||||
if (attachment.subresourceRange.layerCount > maxLayers)
|
||||
{
|
||||
maxLayers = attachment.subresourceRange.layerCount;
|
||||
}
|
||||
}
|
||||
|
||||
VkFramebufferCreateInfo framebufferInfo = {};
|
||||
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
framebufferInfo.renderPass = renderPass;
|
||||
framebufferInfo.pAttachments = attachmentViews.data();
|
||||
framebufferInfo.attachmentCount = static_cast<uint32_t>(attachmentViews.size());
|
||||
framebufferInfo.width = width;
|
||||
framebufferInfo.height = height;
|
||||
framebufferInfo.layers = maxLayers;
|
||||
VK_CHECK_RESULT(vkCreateFramebuffer(vulkanDevice->logicalDevice, &framebufferInfo, nullptr, &framebuffer));
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
* Heightmap terrain generator
|
||||
*
|
||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "VulkanDevice.h"
|
||||
#include "VulkanBuffer.h"
|
||||
#include <ktx.h>
|
||||
#include <ktxvulkan.h>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class HeightMap
|
||||
{
|
||||
private:
|
||||
uint16_t *heightdata;
|
||||
uint32_t dim;
|
||||
uint32_t scale;
|
||||
|
||||
vks::VulkanDevice *device = nullptr;
|
||||
VkQueue copyQueue = VK_NULL_HANDLE;
|
||||
public:
|
||||
enum Topology { topologyTriangles, topologyQuads };
|
||||
|
||||
float heightScale = 1.0f;
|
||||
float uvScale = 1.0f;
|
||||
|
||||
vks::Buffer vertexBuffer;
|
||||
vks::Buffer indexBuffer;
|
||||
|
||||
struct Vertex {
|
||||
glm::vec3 pos;
|
||||
glm::vec3 normal;
|
||||
glm::vec2 uv;
|
||||
};
|
||||
|
||||
size_t vertexBufferSize = 0;
|
||||
size_t indexBufferSize = 0;
|
||||
uint32_t indexCount = 0;
|
||||
|
||||
HeightMap(vks::VulkanDevice *device, VkQueue copyQueue)
|
||||
{
|
||||
this->device = device;
|
||||
this->copyQueue = copyQueue;
|
||||
};
|
||||
|
||||
~HeightMap()
|
||||
{
|
||||
vertexBuffer.destroy();
|
||||
indexBuffer.destroy();
|
||||
delete[] heightdata;
|
||||
}
|
||||
|
||||
float getHeight(uint32_t x, uint32_t y)
|
||||
{
|
||||
glm::ivec2 rpos = glm::ivec2(x, y) * glm::ivec2(scale);
|
||||
rpos.x = std::max(0, std::min(rpos.x, (int)dim - 1));
|
||||
rpos.y = std::max(0, std::min(rpos.y, (int)dim - 1));
|
||||
rpos /= glm::ivec2(scale);
|
||||
return *(heightdata + (rpos.x + rpos.y * dim) * scale) / 65535.0f * heightScale;
|
||||
}
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
void loadFromFile(const std::string filename, uint32_t patchsize, glm::vec3 scale, Topology topology, AAssetManager* assetManager)
|
||||
#else
|
||||
void loadFromFile(const std::string filename, uint32_t patchsize, glm::vec3 scale, Topology topology)
|
||||
#endif
|
||||
{
|
||||
assert(device);
|
||||
assert(copyQueue != VK_NULL_HANDLE);
|
||||
|
||||
ktxResult result;
|
||||
ktxTexture* ktxTexture;
|
||||
#if defined(__ANDROID__)
|
||||
AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
||||
assert(asset);
|
||||
size_t size = AAsset_getLength(asset);
|
||||
assert(size > 0);
|
||||
void *textureData = malloc(size);
|
||||
AAsset_read(asset, textureData, size);
|
||||
AAsset_close(asset);
|
||||
result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target);
|
||||
free(textureData);
|
||||
#else
|
||||
result = ktxTexture_CreateFromNamedFile(filename.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &ktxTexture);
|
||||
#endif
|
||||
assert(result == KTX_SUCCESS);
|
||||
ktx_size_t ktxSize = ktxTexture_GetImageSize(ktxTexture, 0);
|
||||
ktx_uint8_t* ktxImage = ktxTexture_GetData(ktxTexture);
|
||||
dim = ktxTexture->baseWidth;
|
||||
heightdata = new uint16_t[dim * dim];
|
||||
memcpy(heightdata, ktxImage, ktxSize);
|
||||
this->scale = dim / patchsize;
|
||||
ktxTexture_Destroy(ktxTexture);
|
||||
|
||||
// Generate vertices
|
||||
Vertex * vertices = new Vertex[patchsize * patchsize * 4];
|
||||
|
||||
const float wx = 2.0f;
|
||||
const float wy = 2.0f;
|
||||
|
||||
for (uint32_t x = 0; x < patchsize; x++)
|
||||
{
|
||||
for (uint32_t y = 0; y < patchsize; y++)
|
||||
{
|
||||
uint32_t index = (x + y * patchsize);
|
||||
vertices[index].pos[0] = (x * wx + wx / 2.0f - (float)patchsize * wx / 2.0f) * scale.x;
|
||||
vertices[index].pos[1] = -getHeight(x, y);
|
||||
vertices[index].pos[2] = (y * wy + wy / 2.0f - (float)patchsize * wy / 2.0f) * scale.z;
|
||||
vertices[index].uv = glm::vec2((float)x / patchsize, (float)y / patchsize) * uvScale;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint32_t y = 0; y < patchsize; y++)
|
||||
{
|
||||
for (uint32_t x = 0; x < patchsize; x++)
|
||||
{
|
||||
float dx = getHeight(x < patchsize - 1 ? x + 1 : x, y) - getHeight(x > 0 ? x - 1 : x, y);
|
||||
if (x == 0 || x == patchsize - 1)
|
||||
dx *= 2.0f;
|
||||
|
||||
float dy = getHeight(x, y < patchsize - 1 ? y + 1 : y) - getHeight(x, y > 0 ? y - 1 : y);
|
||||
if (y == 0 || y == patchsize - 1)
|
||||
dy *= 2.0f;
|
||||
|
||||
glm::vec3 A = glm::vec3(1.0f, 0.0f, dx);
|
||||
glm::vec3 B = glm::vec3(0.0f, 1.0f, dy);
|
||||
|
||||
glm::vec3 normal = (glm::normalize(glm::cross(A, B)) + 1.0f) * 0.5f;
|
||||
|
||||
vertices[x + y * patchsize].normal = glm::vec3(normal.x, normal.z, normal.y);
|
||||
}
|
||||
}
|
||||
|
||||
// Generate indices
|
||||
|
||||
const uint32_t w = (patchsize - 1);
|
||||
uint32_t *indices;
|
||||
|
||||
switch (topology)
|
||||
{
|
||||
// Indices for triangles
|
||||
case topologyTriangles:
|
||||
{
|
||||
indices = new uint32_t[w * w * 6];
|
||||
for (uint32_t x = 0; x < w; x++)
|
||||
{
|
||||
for (uint32_t y = 0; y < w; y++)
|
||||
{
|
||||
uint32_t index = (x + y * w) * 6;
|
||||
indices[index] = (x + y * patchsize);
|
||||
indices[index + 1] = indices[index] + patchsize;
|
||||
indices[index + 2] = indices[index + 1] + 1;
|
||||
|
||||
indices[index + 3] = indices[index + 1] + 1;
|
||||
indices[index + 4] = indices[index] + 1;
|
||||
indices[index + 5] = indices[index];
|
||||
}
|
||||
}
|
||||
indexCount = (patchsize - 1) * (patchsize - 1) * 6;
|
||||
indexBufferSize = (w * w * 6) * sizeof(uint32_t);
|
||||
break;
|
||||
}
|
||||
// Indices for quad patches (tessellation)
|
||||
case topologyQuads:
|
||||
{
|
||||
|
||||
indices = new uint32_t[w * w * 4];
|
||||
for (uint32_t x = 0; x < w; x++)
|
||||
{
|
||||
for (uint32_t y = 0; y < w; y++)
|
||||
{
|
||||
uint32_t index = (x + y * w) * 4;
|
||||
indices[index] = (x + y * patchsize);
|
||||
indices[index + 1] = indices[index] + patchsize;
|
||||
indices[index + 2] = indices[index + 1] + 1;
|
||||
indices[index + 3] = indices[index] + 1;
|
||||
}
|
||||
}
|
||||
indexCount = (patchsize - 1) * (patchsize - 1) * 4;
|
||||
indexBufferSize = (w * w * 4) * sizeof(uint32_t);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
assert(indexBufferSize > 0);
|
||||
|
||||
vertexBufferSize = (patchsize * patchsize * 4) * sizeof(Vertex);
|
||||
|
||||
// Generate Vulkan buffers
|
||||
|
||||
vks::Buffer vertexStaging, indexStaging;
|
||||
|
||||
// Create staging buffers
|
||||
device->createBuffer(
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
&vertexStaging,
|
||||
vertexBufferSize,
|
||||
vertices);
|
||||
|
||||
device->createBuffer(
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
&indexStaging,
|
||||
indexBufferSize,
|
||||
indices);
|
||||
|
||||
// Device local (target) buffer
|
||||
device->createBuffer(
|
||||
VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||
&vertexBuffer,
|
||||
vertexBufferSize);
|
||||
|
||||
device->createBuffer(
|
||||
VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
|
||||
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
||||
&indexBuffer,
|
||||
indexBufferSize);
|
||||
|
||||
// Copy from staging buffers
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
VkBufferCopy copyRegion = {};
|
||||
|
||||
copyRegion.size = vertexBufferSize;
|
||||
vkCmdCopyBuffer(
|
||||
copyCmd,
|
||||
vertexStaging.buffer,
|
||||
vertexBuffer.buffer,
|
||||
1,
|
||||
©Region);
|
||||
|
||||
copyRegion.size = indexBufferSize;
|
||||
vkCmdCopyBuffer(
|
||||
copyCmd,
|
||||
indexStaging.buffer,
|
||||
indexBuffer.buffer,
|
||||
1,
|
||||
©Region);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue, true);
|
||||
|
||||
vkDestroyBuffer(device->logicalDevice, vertexStaging.buffer, nullptr);
|
||||
vkFreeMemory(device->logicalDevice, vertexStaging.memory, nullptr);
|
||||
vkDestroyBuffer(device->logicalDevice, indexStaging.buffer, nullptr);
|
||||
vkFreeMemory(device->logicalDevice, indexStaging.memory, nullptr);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,659 @@
|
|||
/*
|
||||
* Initializers for Vulkan structures and objects used by the examples
|
||||
* Saves lot of VK_STRUCTURE_TYPE assignments
|
||||
* Some initializers are parameterized for convenience
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace initializers
|
||||
{
|
||||
|
||||
inline VkMemoryAllocateInfo memoryAllocateInfo()
|
||||
{
|
||||
VkMemoryAllocateInfo memAllocInfo {};
|
||||
memAllocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
return memAllocInfo;
|
||||
}
|
||||
|
||||
inline VkMappedMemoryRange mappedMemoryRange()
|
||||
{
|
||||
VkMappedMemoryRange mappedMemoryRange {};
|
||||
mappedMemoryRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
|
||||
return mappedMemoryRange;
|
||||
}
|
||||
|
||||
inline VkCommandBufferAllocateInfo commandBufferAllocateInfo(
|
||||
VkCommandPool commandPool,
|
||||
VkCommandBufferLevel level,
|
||||
uint32_t bufferCount)
|
||||
{
|
||||
VkCommandBufferAllocateInfo commandBufferAllocateInfo {};
|
||||
commandBufferAllocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
commandBufferAllocateInfo.commandPool = commandPool;
|
||||
commandBufferAllocateInfo.level = level;
|
||||
commandBufferAllocateInfo.commandBufferCount = bufferCount;
|
||||
return commandBufferAllocateInfo;
|
||||
}
|
||||
|
||||
inline VkCommandPoolCreateInfo commandPoolCreateInfo()
|
||||
{
|
||||
VkCommandPoolCreateInfo cmdPoolCreateInfo {};
|
||||
cmdPoolCreateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
return cmdPoolCreateInfo;
|
||||
}
|
||||
|
||||
inline VkCommandBufferBeginInfo commandBufferBeginInfo()
|
||||
{
|
||||
VkCommandBufferBeginInfo cmdBufferBeginInfo {};
|
||||
cmdBufferBeginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
return cmdBufferBeginInfo;
|
||||
}
|
||||
|
||||
inline VkCommandBufferInheritanceInfo commandBufferInheritanceInfo()
|
||||
{
|
||||
VkCommandBufferInheritanceInfo cmdBufferInheritanceInfo {};
|
||||
cmdBufferInheritanceInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
|
||||
return cmdBufferInheritanceInfo;
|
||||
}
|
||||
|
||||
inline VkRenderPassBeginInfo renderPassBeginInfo()
|
||||
{
|
||||
VkRenderPassBeginInfo renderPassBeginInfo {};
|
||||
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
return renderPassBeginInfo;
|
||||
}
|
||||
|
||||
inline VkRenderPassCreateInfo renderPassCreateInfo()
|
||||
{
|
||||
VkRenderPassCreateInfo renderPassCreateInfo {};
|
||||
renderPassCreateInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
return renderPassCreateInfo;
|
||||
}
|
||||
|
||||
/** @brief Initialize an image memory barrier with no image transfer ownership */
|
||||
inline VkImageMemoryBarrier imageMemoryBarrier()
|
||||
{
|
||||
VkImageMemoryBarrier imageMemoryBarrier {};
|
||||
imageMemoryBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||
imageMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
imageMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
return imageMemoryBarrier;
|
||||
}
|
||||
|
||||
/** @brief Initialize a buffer memory barrier with no image transfer ownership */
|
||||
inline VkBufferMemoryBarrier bufferMemoryBarrier()
|
||||
{
|
||||
VkBufferMemoryBarrier bufferMemoryBarrier {};
|
||||
bufferMemoryBarrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
|
||||
bufferMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
bufferMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
return bufferMemoryBarrier;
|
||||
}
|
||||
|
||||
inline VkMemoryBarrier memoryBarrier()
|
||||
{
|
||||
VkMemoryBarrier memoryBarrier {};
|
||||
memoryBarrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
return memoryBarrier;
|
||||
}
|
||||
|
||||
inline VkImageCreateInfo imageCreateInfo()
|
||||
{
|
||||
VkImageCreateInfo imageCreateInfo {};
|
||||
imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
return imageCreateInfo;
|
||||
}
|
||||
|
||||
inline VkSamplerCreateInfo samplerCreateInfo()
|
||||
{
|
||||
VkSamplerCreateInfo samplerCreateInfo {};
|
||||
samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
samplerCreateInfo.maxAnisotropy = 1.0f;
|
||||
return samplerCreateInfo;
|
||||
}
|
||||
|
||||
inline VkImageViewCreateInfo imageViewCreateInfo()
|
||||
{
|
||||
VkImageViewCreateInfo imageViewCreateInfo {};
|
||||
imageViewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
return imageViewCreateInfo;
|
||||
}
|
||||
|
||||
inline VkFramebufferCreateInfo framebufferCreateInfo()
|
||||
{
|
||||
VkFramebufferCreateInfo framebufferCreateInfo {};
|
||||
framebufferCreateInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
return framebufferCreateInfo;
|
||||
}
|
||||
|
||||
inline VkSemaphoreCreateInfo semaphoreCreateInfo()
|
||||
{
|
||||
VkSemaphoreCreateInfo semaphoreCreateInfo {};
|
||||
semaphoreCreateInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||
return semaphoreCreateInfo;
|
||||
}
|
||||
|
||||
inline VkFenceCreateInfo fenceCreateInfo(VkFenceCreateFlags flags = 0)
|
||||
{
|
||||
VkFenceCreateInfo fenceCreateInfo {};
|
||||
fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
fenceCreateInfo.flags = flags;
|
||||
return fenceCreateInfo;
|
||||
}
|
||||
|
||||
inline VkEventCreateInfo eventCreateInfo()
|
||||
{
|
||||
VkEventCreateInfo eventCreateInfo {};
|
||||
eventCreateInfo.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
|
||||
return eventCreateInfo;
|
||||
}
|
||||
|
||||
inline VkSubmitInfo submitInfo()
|
||||
{
|
||||
VkSubmitInfo submitInfo {};
|
||||
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||
return submitInfo;
|
||||
}
|
||||
|
||||
inline VkViewport viewport(
|
||||
float width,
|
||||
float height,
|
||||
float minDepth,
|
||||
float maxDepth)
|
||||
{
|
||||
VkViewport viewport {};
|
||||
viewport.width = width;
|
||||
viewport.height = height;
|
||||
viewport.minDepth = minDepth;
|
||||
viewport.maxDepth = maxDepth;
|
||||
return viewport;
|
||||
}
|
||||
|
||||
inline VkRect2D rect2D(
|
||||
int32_t width,
|
||||
int32_t height,
|
||||
int32_t offsetX,
|
||||
int32_t offsetY)
|
||||
{
|
||||
VkRect2D rect2D {};
|
||||
rect2D.extent.width = width;
|
||||
rect2D.extent.height = height;
|
||||
rect2D.offset.x = offsetX;
|
||||
rect2D.offset.y = offsetY;
|
||||
return rect2D;
|
||||
}
|
||||
|
||||
inline VkBufferCreateInfo bufferCreateInfo()
|
||||
{
|
||||
VkBufferCreateInfo bufCreateInfo {};
|
||||
bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
return bufCreateInfo;
|
||||
}
|
||||
|
||||
inline VkBufferCreateInfo bufferCreateInfo(
|
||||
VkBufferUsageFlags usage,
|
||||
VkDeviceSize size)
|
||||
{
|
||||
VkBufferCreateInfo bufCreateInfo {};
|
||||
bufCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
bufCreateInfo.usage = usage;
|
||||
bufCreateInfo.size = size;
|
||||
return bufCreateInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
|
||||
uint32_t poolSizeCount,
|
||||
VkDescriptorPoolSize* pPoolSizes,
|
||||
uint32_t maxSets)
|
||||
{
|
||||
VkDescriptorPoolCreateInfo descriptorPoolInfo {};
|
||||
descriptorPoolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
descriptorPoolInfo.poolSizeCount = poolSizeCount;
|
||||
descriptorPoolInfo.pPoolSizes = pPoolSizes;
|
||||
descriptorPoolInfo.maxSets = maxSets;
|
||||
return descriptorPoolInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolCreateInfo descriptorPoolCreateInfo(
|
||||
const std::vector<VkDescriptorPoolSize>& poolSizes,
|
||||
uint32_t maxSets)
|
||||
{
|
||||
VkDescriptorPoolCreateInfo descriptorPoolInfo{};
|
||||
descriptorPoolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
descriptorPoolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
|
||||
descriptorPoolInfo.pPoolSizes = poolSizes.data();
|
||||
descriptorPoolInfo.maxSets = maxSets;
|
||||
return descriptorPoolInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolSize descriptorPoolSize(
|
||||
VkDescriptorType type,
|
||||
uint32_t descriptorCount)
|
||||
{
|
||||
VkDescriptorPoolSize descriptorPoolSize {};
|
||||
descriptorPoolSize.type = type;
|
||||
descriptorPoolSize.descriptorCount = descriptorCount;
|
||||
return descriptorPoolSize;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutBinding descriptorSetLayoutBinding(
|
||||
VkDescriptorType type,
|
||||
VkShaderStageFlags stageFlags,
|
||||
uint32_t binding,
|
||||
uint32_t descriptorCount = 1)
|
||||
{
|
||||
VkDescriptorSetLayoutBinding setLayoutBinding {};
|
||||
setLayoutBinding.descriptorType = type;
|
||||
setLayoutBinding.stageFlags = stageFlags;
|
||||
setLayoutBinding.binding = binding;
|
||||
setLayoutBinding.descriptorCount = descriptorCount;
|
||||
return setLayoutBinding;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
|
||||
const VkDescriptorSetLayoutBinding* pBindings,
|
||||
uint32_t bindingCount)
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo {};
|
||||
descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
descriptorSetLayoutCreateInfo.pBindings = pBindings;
|
||||
descriptorSetLayoutCreateInfo.bindingCount = bindingCount;
|
||||
return descriptorSetLayoutCreateInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo(
|
||||
const std::vector<VkDescriptorSetLayoutBinding>& bindings)
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo descriptorSetLayoutCreateInfo{};
|
||||
descriptorSetLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
descriptorSetLayoutCreateInfo.pBindings = bindings.data();
|
||||
descriptorSetLayoutCreateInfo.bindingCount = static_cast<uint32_t>(bindings.size());
|
||||
return descriptorSetLayoutCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
|
||||
const VkDescriptorSetLayout* pSetLayouts,
|
||||
uint32_t setLayoutCount = 1)
|
||||
{
|
||||
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo {};
|
||||
pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
|
||||
pipelineLayoutCreateInfo.pSetLayouts = pSetLayouts;
|
||||
return pipelineLayoutCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo(
|
||||
uint32_t setLayoutCount = 1)
|
||||
{
|
||||
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo{};
|
||||
pipelineLayoutCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pipelineLayoutCreateInfo.setLayoutCount = setLayoutCount;
|
||||
return pipelineLayoutCreateInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetAllocateInfo descriptorSetAllocateInfo(
|
||||
VkDescriptorPool descriptorPool,
|
||||
const VkDescriptorSetLayout* pSetLayouts,
|
||||
uint32_t descriptorSetCount)
|
||||
{
|
||||
VkDescriptorSetAllocateInfo descriptorSetAllocateInfo {};
|
||||
descriptorSetAllocateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
|
||||
descriptorSetAllocateInfo.descriptorPool = descriptorPool;
|
||||
descriptorSetAllocateInfo.pSetLayouts = pSetLayouts;
|
||||
descriptorSetAllocateInfo.descriptorSetCount = descriptorSetCount;
|
||||
return descriptorSetAllocateInfo;
|
||||
}
|
||||
|
||||
inline VkDescriptorImageInfo descriptorImageInfo(VkSampler sampler, VkImageView imageView, VkImageLayout imageLayout)
|
||||
{
|
||||
VkDescriptorImageInfo descriptorImageInfo {};
|
||||
descriptorImageInfo.sampler = sampler;
|
||||
descriptorImageInfo.imageView = imageView;
|
||||
descriptorImageInfo.imageLayout = imageLayout;
|
||||
return descriptorImageInfo;
|
||||
}
|
||||
|
||||
inline VkWriteDescriptorSet writeDescriptorSet(
|
||||
VkDescriptorSet dstSet,
|
||||
VkDescriptorType type,
|
||||
uint32_t binding,
|
||||
VkDescriptorBufferInfo* bufferInfo,
|
||||
uint32_t descriptorCount = 1)
|
||||
{
|
||||
VkWriteDescriptorSet writeDescriptorSet {};
|
||||
writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||
writeDescriptorSet.dstSet = dstSet;
|
||||
writeDescriptorSet.descriptorType = type;
|
||||
writeDescriptorSet.dstBinding = binding;
|
||||
writeDescriptorSet.pBufferInfo = bufferInfo;
|
||||
writeDescriptorSet.descriptorCount = descriptorCount;
|
||||
return writeDescriptorSet;
|
||||
}
|
||||
|
||||
inline VkWriteDescriptorSet writeDescriptorSet(
|
||||
VkDescriptorSet dstSet,
|
||||
VkDescriptorType type,
|
||||
uint32_t binding,
|
||||
VkDescriptorImageInfo *imageInfo,
|
||||
uint32_t descriptorCount = 1)
|
||||
{
|
||||
VkWriteDescriptorSet writeDescriptorSet {};
|
||||
writeDescriptorSet.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||
writeDescriptorSet.dstSet = dstSet;
|
||||
writeDescriptorSet.descriptorType = type;
|
||||
writeDescriptorSet.dstBinding = binding;
|
||||
writeDescriptorSet.pImageInfo = imageInfo;
|
||||
writeDescriptorSet.descriptorCount = descriptorCount;
|
||||
return writeDescriptorSet;
|
||||
}
|
||||
|
||||
inline VkVertexInputBindingDescription vertexInputBindingDescription(
|
||||
uint32_t binding,
|
||||
uint32_t stride,
|
||||
VkVertexInputRate inputRate)
|
||||
{
|
||||
VkVertexInputBindingDescription vInputBindDescription {};
|
||||
vInputBindDescription.binding = binding;
|
||||
vInputBindDescription.stride = stride;
|
||||
vInputBindDescription.inputRate = inputRate;
|
||||
return vInputBindDescription;
|
||||
}
|
||||
|
||||
inline VkVertexInputAttributeDescription vertexInputAttributeDescription(
|
||||
uint32_t binding,
|
||||
uint32_t location,
|
||||
VkFormat format,
|
||||
uint32_t offset)
|
||||
{
|
||||
VkVertexInputAttributeDescription vInputAttribDescription {};
|
||||
vInputAttribDescription.location = location;
|
||||
vInputAttribDescription.binding = binding;
|
||||
vInputAttribDescription.format = format;
|
||||
vInputAttribDescription.offset = offset;
|
||||
return vInputAttribDescription;
|
||||
}
|
||||
|
||||
inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo()
|
||||
{
|
||||
VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo {};
|
||||
pipelineVertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
|
||||
return pipelineVertexInputStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo(
|
||||
const std::vector<VkVertexInputBindingDescription> &vertexBindingDescriptions,
|
||||
const std::vector<VkVertexInputAttributeDescription> &vertexAttributeDescriptions
|
||||
)
|
||||
{
|
||||
VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo{};
|
||||
pipelineVertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
|
||||
pipelineVertexInputStateCreateInfo.vertexBindingDescriptionCount = static_cast<uint32_t>(vertexBindingDescriptions.size());
|
||||
pipelineVertexInputStateCreateInfo.pVertexBindingDescriptions = vertexBindingDescriptions.data();
|
||||
pipelineVertexInputStateCreateInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertexAttributeDescriptions.size());
|
||||
pipelineVertexInputStateCreateInfo.pVertexAttributeDescriptions = vertexAttributeDescriptions.data();
|
||||
return pipelineVertexInputStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo(
|
||||
VkPrimitiveTopology topology,
|
||||
VkPipelineInputAssemblyStateCreateFlags flags,
|
||||
VkBool32 primitiveRestartEnable)
|
||||
{
|
||||
VkPipelineInputAssemblyStateCreateInfo pipelineInputAssemblyStateCreateInfo {};
|
||||
pipelineInputAssemblyStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
|
||||
pipelineInputAssemblyStateCreateInfo.topology = topology;
|
||||
pipelineInputAssemblyStateCreateInfo.flags = flags;
|
||||
pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable = primitiveRestartEnable;
|
||||
return pipelineInputAssemblyStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo(
|
||||
VkPolygonMode polygonMode,
|
||||
VkCullModeFlags cullMode,
|
||||
VkFrontFace frontFace,
|
||||
VkPipelineRasterizationStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo {};
|
||||
pipelineRasterizationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
||||
pipelineRasterizationStateCreateInfo.polygonMode = polygonMode;
|
||||
pipelineRasterizationStateCreateInfo.cullMode = cullMode;
|
||||
pipelineRasterizationStateCreateInfo.frontFace = frontFace;
|
||||
pipelineRasterizationStateCreateInfo.flags = flags;
|
||||
pipelineRasterizationStateCreateInfo.depthClampEnable = VK_FALSE;
|
||||
pipelineRasterizationStateCreateInfo.lineWidth = 1.0f;
|
||||
return pipelineRasterizationStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState(
|
||||
VkColorComponentFlags colorWriteMask,
|
||||
VkBool32 blendEnable)
|
||||
{
|
||||
VkPipelineColorBlendAttachmentState pipelineColorBlendAttachmentState {};
|
||||
pipelineColorBlendAttachmentState.colorWriteMask = colorWriteMask;
|
||||
pipelineColorBlendAttachmentState.blendEnable = blendEnable;
|
||||
return pipelineColorBlendAttachmentState;
|
||||
}
|
||||
|
||||
inline VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo(
|
||||
uint32_t attachmentCount,
|
||||
const VkPipelineColorBlendAttachmentState * pAttachments)
|
||||
{
|
||||
VkPipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo {};
|
||||
pipelineColorBlendStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
|
||||
pipelineColorBlendStateCreateInfo.attachmentCount = attachmentCount;
|
||||
pipelineColorBlendStateCreateInfo.pAttachments = pAttachments;
|
||||
return pipelineColorBlendStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo(
|
||||
VkBool32 depthTestEnable,
|
||||
VkBool32 depthWriteEnable,
|
||||
VkCompareOp depthCompareOp)
|
||||
{
|
||||
VkPipelineDepthStencilStateCreateInfo pipelineDepthStencilStateCreateInfo {};
|
||||
pipelineDepthStencilStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
|
||||
pipelineDepthStencilStateCreateInfo.depthTestEnable = depthTestEnable;
|
||||
pipelineDepthStencilStateCreateInfo.depthWriteEnable = depthWriteEnable;
|
||||
pipelineDepthStencilStateCreateInfo.depthCompareOp = depthCompareOp;
|
||||
pipelineDepthStencilStateCreateInfo.back.compareOp = VK_COMPARE_OP_ALWAYS;
|
||||
return pipelineDepthStencilStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo(
|
||||
uint32_t viewportCount,
|
||||
uint32_t scissorCount,
|
||||
VkPipelineViewportStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineViewportStateCreateInfo pipelineViewportStateCreateInfo {};
|
||||
pipelineViewportStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
|
||||
pipelineViewportStateCreateInfo.viewportCount = viewportCount;
|
||||
pipelineViewportStateCreateInfo.scissorCount = scissorCount;
|
||||
pipelineViewportStateCreateInfo.flags = flags;
|
||||
return pipelineViewportStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo(
|
||||
VkSampleCountFlagBits rasterizationSamples,
|
||||
VkPipelineMultisampleStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineMultisampleStateCreateInfo pipelineMultisampleStateCreateInfo {};
|
||||
pipelineMultisampleStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
||||
pipelineMultisampleStateCreateInfo.rasterizationSamples = rasterizationSamples;
|
||||
pipelineMultisampleStateCreateInfo.flags = flags;
|
||||
return pipelineMultisampleStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
|
||||
const VkDynamicState * pDynamicStates,
|
||||
uint32_t dynamicStateCount,
|
||||
VkPipelineDynamicStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo {};
|
||||
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
|
||||
pipelineDynamicStateCreateInfo.pDynamicStates = pDynamicStates;
|
||||
pipelineDynamicStateCreateInfo.dynamicStateCount = dynamicStateCount;
|
||||
pipelineDynamicStateCreateInfo.flags = flags;
|
||||
return pipelineDynamicStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo(
|
||||
const std::vector<VkDynamicState>& pDynamicStates,
|
||||
VkPipelineDynamicStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineDynamicStateCreateInfo pipelineDynamicStateCreateInfo{};
|
||||
pipelineDynamicStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
|
||||
pipelineDynamicStateCreateInfo.pDynamicStates = pDynamicStates.data();
|
||||
pipelineDynamicStateCreateInfo.dynamicStateCount = static_cast<uint32_t>(pDynamicStates.size());
|
||||
pipelineDynamicStateCreateInfo.flags = flags;
|
||||
return pipelineDynamicStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo(uint32_t patchControlPoints)
|
||||
{
|
||||
VkPipelineTessellationStateCreateInfo pipelineTessellationStateCreateInfo {};
|
||||
pipelineTessellationStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
|
||||
pipelineTessellationStateCreateInfo.patchControlPoints = patchControlPoints;
|
||||
return pipelineTessellationStateCreateInfo;
|
||||
}
|
||||
|
||||
inline VkGraphicsPipelineCreateInfo pipelineCreateInfo(
|
||||
VkPipelineLayout layout,
|
||||
VkRenderPass renderPass,
|
||||
VkPipelineCreateFlags flags = 0)
|
||||
{
|
||||
VkGraphicsPipelineCreateInfo pipelineCreateInfo {};
|
||||
pipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
pipelineCreateInfo.layout = layout;
|
||||
pipelineCreateInfo.renderPass = renderPass;
|
||||
pipelineCreateInfo.flags = flags;
|
||||
pipelineCreateInfo.basePipelineIndex = -1;
|
||||
pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
return pipelineCreateInfo;
|
||||
}
|
||||
|
||||
inline VkGraphicsPipelineCreateInfo pipelineCreateInfo()
|
||||
{
|
||||
VkGraphicsPipelineCreateInfo pipelineCreateInfo{};
|
||||
pipelineCreateInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
pipelineCreateInfo.basePipelineIndex = -1;
|
||||
pipelineCreateInfo.basePipelineHandle = VK_NULL_HANDLE;
|
||||
return pipelineCreateInfo;
|
||||
}
|
||||
|
||||
inline VkComputePipelineCreateInfo computePipelineCreateInfo(
|
||||
VkPipelineLayout layout,
|
||||
VkPipelineCreateFlags flags = 0)
|
||||
{
|
||||
VkComputePipelineCreateInfo computePipelineCreateInfo {};
|
||||
computePipelineCreateInfo.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
|
||||
computePipelineCreateInfo.layout = layout;
|
||||
computePipelineCreateInfo.flags = flags;
|
||||
return computePipelineCreateInfo;
|
||||
}
|
||||
|
||||
inline VkPushConstantRange pushConstantRange(
|
||||
VkShaderStageFlags stageFlags,
|
||||
uint32_t size,
|
||||
uint32_t offset)
|
||||
{
|
||||
VkPushConstantRange pushConstantRange {};
|
||||
pushConstantRange.stageFlags = stageFlags;
|
||||
pushConstantRange.offset = offset;
|
||||
pushConstantRange.size = size;
|
||||
return pushConstantRange;
|
||||
}
|
||||
|
||||
inline VkBindSparseInfo bindSparseInfo()
|
||||
{
|
||||
VkBindSparseInfo bindSparseInfo{};
|
||||
bindSparseInfo.sType = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
|
||||
return bindSparseInfo;
|
||||
}
|
||||
|
||||
/** @brief Initialize a map entry for a shader specialization constant */
|
||||
inline VkSpecializationMapEntry specializationMapEntry(uint32_t constantID, uint32_t offset, size_t size)
|
||||
{
|
||||
VkSpecializationMapEntry specializationMapEntry{};
|
||||
specializationMapEntry.constantID = constantID;
|
||||
specializationMapEntry.offset = offset;
|
||||
specializationMapEntry.size = size;
|
||||
return specializationMapEntry;
|
||||
}
|
||||
|
||||
/** @brief Initialize a specialization constant info structure to pass to a shader stage */
|
||||
inline VkSpecializationInfo specializationInfo(uint32_t mapEntryCount, const VkSpecializationMapEntry* mapEntries, size_t dataSize, const void* data)
|
||||
{
|
||||
VkSpecializationInfo specializationInfo{};
|
||||
specializationInfo.mapEntryCount = mapEntryCount;
|
||||
specializationInfo.pMapEntries = mapEntries;
|
||||
specializationInfo.dataSize = dataSize;
|
||||
specializationInfo.pData = data;
|
||||
return specializationInfo;
|
||||
}
|
||||
|
||||
/** @brief Initialize a specialization constant info structure to pass to a shader stage */
|
||||
inline VkSpecializationInfo specializationInfo(const std::vector<VkSpecializationMapEntry> &mapEntries, size_t dataSize, const void* data)
|
||||
{
|
||||
VkSpecializationInfo specializationInfo{};
|
||||
specializationInfo.mapEntryCount = static_cast<uint32_t>(mapEntries.size());
|
||||
specializationInfo.pMapEntries = mapEntries.data();
|
||||
specializationInfo.dataSize = dataSize;
|
||||
specializationInfo.pData = data;
|
||||
return specializationInfo;
|
||||
}
|
||||
|
||||
// Ray tracing related
|
||||
inline VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR()
|
||||
{
|
||||
VkAccelerationStructureGeometryKHR accelerationStructureGeometryKHR{};
|
||||
accelerationStructureGeometryKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
|
||||
return accelerationStructureGeometryKHR;
|
||||
}
|
||||
|
||||
inline VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR()
|
||||
{
|
||||
VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfoKHR{};
|
||||
accelerationStructureBuildGeometryInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
|
||||
return accelerationStructureBuildGeometryInfoKHR;
|
||||
}
|
||||
|
||||
inline VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR()
|
||||
{
|
||||
VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfoKHR{};
|
||||
accelerationStructureBuildSizesInfoKHR.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
|
||||
return accelerationStructureBuildSizesInfoKHR;
|
||||
}
|
||||
|
||||
inline VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR()
|
||||
{
|
||||
VkRayTracingShaderGroupCreateInfoKHR rayTracingShaderGroupCreateInfoKHR{};
|
||||
rayTracingShaderGroupCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR;
|
||||
return rayTracingShaderGroupCreateInfoKHR;
|
||||
}
|
||||
|
||||
inline VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR()
|
||||
{
|
||||
VkRayTracingPipelineCreateInfoKHR rayTracingPipelineCreateInfoKHR{};
|
||||
rayTracingPipelineCreateInfoKHR.sType = VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR;
|
||||
return rayTracingPipelineCreateInfoKHR;
|
||||
}
|
||||
|
||||
inline VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR()
|
||||
{
|
||||
VkWriteDescriptorSetAccelerationStructureKHR writeDescriptorSetAccelerationStructureKHR{};
|
||||
writeDescriptorSetAccelerationStructureKHR.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR;
|
||||
return writeDescriptorSetAccelerationStructureKHR;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,329 @@
|
|||
/*
|
||||
* Extended sample base class for ray tracing based samples
|
||||
*
|
||||
* Copyright (C) 2020-2021 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanRaytracingSample.h"
|
||||
|
||||
void VulkanRaytracingSample::updateRenderPass()
|
||||
{
|
||||
// Update the default render pass with different color attachment load ops to keep attachment contents
|
||||
// With this change, we can e.g. draw an UI on top of the ray traced scene
|
||||
|
||||
vkDestroyRenderPass(device, renderPass, nullptr);
|
||||
|
||||
std::array<VkAttachmentDescription, 2> attachments = {};
|
||||
// Color attachment
|
||||
attachments[0].format = swapChain.colorFormat;
|
||||
attachments[0].samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
|
||||
attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachments[0].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
|
||||
attachments[0].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachments[0].initialLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
attachments[0].finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
|
||||
// Depth attachment
|
||||
attachments[1].format = depthFormat;
|
||||
attachments[1].samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
attachments[1].loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
attachments[1].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
|
||||
attachments[1].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
|
||||
attachments[1].stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
|
||||
attachments[1].initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
attachments[1].finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkAttachmentReference colorReference = {};
|
||||
colorReference.attachment = 0;
|
||||
colorReference.layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkAttachmentReference depthReference = {};
|
||||
depthReference.attachment = 1;
|
||||
depthReference.layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
|
||||
|
||||
VkSubpassDescription subpassDescription = {};
|
||||
subpassDescription.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
|
||||
subpassDescription.colorAttachmentCount = 1;
|
||||
subpassDescription.pColorAttachments = &colorReference;
|
||||
subpassDescription.pDepthStencilAttachment = &depthReference;
|
||||
subpassDescription.inputAttachmentCount = 0;
|
||||
subpassDescription.pInputAttachments = nullptr;
|
||||
subpassDescription.preserveAttachmentCount = 0;
|
||||
subpassDescription.pPreserveAttachments = nullptr;
|
||||
subpassDescription.pResolveAttachments = nullptr;
|
||||
|
||||
// Subpass dependencies for layout transitions
|
||||
std::array<VkSubpassDependency, 2> dependencies;
|
||||
|
||||
dependencies[0].srcSubpass = VK_SUBPASS_EXTERNAL;
|
||||
dependencies[0].dstSubpass = 0;
|
||||
dependencies[0].srcStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||||
dependencies[0].dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependencies[0].srcAccessMask = VK_ACCESS_MEMORY_READ_BIT;
|
||||
dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependencies[0].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
|
||||
|
||||
dependencies[1].srcSubpass = 0;
|
||||
dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL;
|
||||
dependencies[1].srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
dependencies[1].dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||||
dependencies[1].srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
dependencies[1].dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
|
||||
dependencies[1].dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
|
||||
|
||||
VkRenderPassCreateInfo renderPassInfo = {};
|
||||
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
renderPassInfo.attachmentCount = static_cast<uint32_t>(attachments.size());
|
||||
renderPassInfo.pAttachments = attachments.data();
|
||||
renderPassInfo.subpassCount = 1;
|
||||
renderPassInfo.pSubpasses = &subpassDescription;
|
||||
renderPassInfo.dependencyCount = static_cast<uint32_t>(dependencies.size());
|
||||
renderPassInfo.pDependencies = dependencies.data();
|
||||
VK_CHECK_RESULT(vkCreateRenderPass(device, &renderPassInfo, nullptr, &renderPass));
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::enableExtensions()
|
||||
{
|
||||
// Require Vulkan 1.1
|
||||
apiVersion = VK_API_VERSION_1_1;
|
||||
|
||||
// Ray tracing related extensions required by this sample
|
||||
enabledDeviceExtensions.push_back(VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME);
|
||||
if (!rayQueryOnly) {
|
||||
enabledDeviceExtensions.push_back(VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
// Required by VK_KHR_acceleration_structure
|
||||
enabledDeviceExtensions.push_back(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME);
|
||||
enabledDeviceExtensions.push_back(VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME);
|
||||
enabledDeviceExtensions.push_back(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME);
|
||||
|
||||
// Required for VK_KHR_ray_tracing_pipeline
|
||||
enabledDeviceExtensions.push_back(VK_KHR_SPIRV_1_4_EXTENSION_NAME);
|
||||
|
||||
// Required by VK_KHR_spirv_1_4
|
||||
enabledDeviceExtensions.push_back(VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
VulkanRaytracingSample::ScratchBuffer VulkanRaytracingSample::createScratchBuffer(VkDeviceSize size)
|
||||
{
|
||||
ScratchBuffer scratchBuffer{};
|
||||
// Buffer and memory
|
||||
VkBufferCreateInfo bufferCreateInfo{};
|
||||
bufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
bufferCreateInfo.size = size;
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
|
||||
VK_CHECK_RESULT(vkCreateBuffer(vulkanDevice->logicalDevice, &bufferCreateInfo, nullptr, &scratchBuffer.handle));
|
||||
VkMemoryRequirements memoryRequirements{};
|
||||
vkGetBufferMemoryRequirements(vulkanDevice->logicalDevice, scratchBuffer.handle, &memoryRequirements);
|
||||
VkMemoryAllocateFlagsInfo memoryAllocateFlagsInfo{};
|
||||
memoryAllocateFlagsInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO;
|
||||
memoryAllocateFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
|
||||
VkMemoryAllocateInfo memoryAllocateInfo = {};
|
||||
memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
memoryAllocateInfo.pNext = &memoryAllocateFlagsInfo;
|
||||
memoryAllocateInfo.allocationSize = memoryRequirements.size;
|
||||
memoryAllocateInfo.memoryTypeIndex = vulkanDevice->getMemoryType(memoryRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(vulkanDevice->logicalDevice, &memoryAllocateInfo, nullptr, &scratchBuffer.memory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(vulkanDevice->logicalDevice, scratchBuffer.handle, scratchBuffer.memory, 0));
|
||||
// Buffer device address
|
||||
VkBufferDeviceAddressInfoKHR bufferDeviceAddresInfo{};
|
||||
bufferDeviceAddresInfo.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
|
||||
bufferDeviceAddresInfo.buffer = scratchBuffer.handle;
|
||||
scratchBuffer.deviceAddress = vkGetBufferDeviceAddressKHR(vulkanDevice->logicalDevice, &bufferDeviceAddresInfo);
|
||||
return scratchBuffer;
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::deleteScratchBuffer(ScratchBuffer& scratchBuffer)
|
||||
{
|
||||
if (scratchBuffer.memory != VK_NULL_HANDLE) {
|
||||
vkFreeMemory(vulkanDevice->logicalDevice, scratchBuffer.memory, nullptr);
|
||||
}
|
||||
if (scratchBuffer.handle != VK_NULL_HANDLE) {
|
||||
vkDestroyBuffer(vulkanDevice->logicalDevice, scratchBuffer.handle, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::createAccelerationStructure(AccelerationStructure& accelerationStructure, VkAccelerationStructureTypeKHR type, VkAccelerationStructureBuildSizesInfoKHR buildSizeInfo)
|
||||
{
|
||||
// Buffer and memory
|
||||
VkBufferCreateInfo bufferCreateInfo{};
|
||||
bufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
bufferCreateInfo.size = buildSizeInfo.accelerationStructureSize;
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT;
|
||||
VK_CHECK_RESULT(vkCreateBuffer(vulkanDevice->logicalDevice, &bufferCreateInfo, nullptr, &accelerationStructure.buffer));
|
||||
VkMemoryRequirements memoryRequirements{};
|
||||
vkGetBufferMemoryRequirements(vulkanDevice->logicalDevice, accelerationStructure.buffer, &memoryRequirements);
|
||||
VkMemoryAllocateFlagsInfo memoryAllocateFlagsInfo{};
|
||||
memoryAllocateFlagsInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO;
|
||||
memoryAllocateFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
|
||||
VkMemoryAllocateInfo memoryAllocateInfo{};
|
||||
memoryAllocateInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
memoryAllocateInfo.pNext = &memoryAllocateFlagsInfo;
|
||||
memoryAllocateInfo.allocationSize = memoryRequirements.size;
|
||||
memoryAllocateInfo.memoryTypeIndex = vulkanDevice->getMemoryType(memoryRequirements.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(vulkanDevice->logicalDevice, &memoryAllocateInfo, nullptr, &accelerationStructure.memory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(vulkanDevice->logicalDevice, accelerationStructure.buffer, accelerationStructure.memory, 0));
|
||||
// Acceleration structure
|
||||
VkAccelerationStructureCreateInfoKHR accelerationStructureCreate_info{};
|
||||
accelerationStructureCreate_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
|
||||
accelerationStructureCreate_info.buffer = accelerationStructure.buffer;
|
||||
accelerationStructureCreate_info.size = buildSizeInfo.accelerationStructureSize;
|
||||
accelerationStructureCreate_info.type = type;
|
||||
vkCreateAccelerationStructureKHR(vulkanDevice->logicalDevice, &accelerationStructureCreate_info, nullptr, &accelerationStructure.handle);
|
||||
// AS device address
|
||||
VkAccelerationStructureDeviceAddressInfoKHR accelerationDeviceAddressInfo{};
|
||||
accelerationDeviceAddressInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR;
|
||||
accelerationDeviceAddressInfo.accelerationStructure = accelerationStructure.handle;
|
||||
accelerationStructure.deviceAddress = vkGetAccelerationStructureDeviceAddressKHR(vulkanDevice->logicalDevice, &accelerationDeviceAddressInfo);
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::deleteAccelerationStructure(AccelerationStructure& accelerationStructure)
|
||||
{
|
||||
vkFreeMemory(device, accelerationStructure.memory, nullptr);
|
||||
vkDestroyBuffer(device, accelerationStructure.buffer, nullptr);
|
||||
vkDestroyAccelerationStructureKHR(device, accelerationStructure.handle, nullptr);
|
||||
}
|
||||
|
||||
uint64_t VulkanRaytracingSample::getBufferDeviceAddress(VkBuffer buffer)
|
||||
{
|
||||
VkBufferDeviceAddressInfoKHR bufferDeviceAI{};
|
||||
bufferDeviceAI.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
|
||||
bufferDeviceAI.buffer = buffer;
|
||||
return vkGetBufferDeviceAddressKHR(vulkanDevice->logicalDevice, &bufferDeviceAI);
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::createStorageImage(VkFormat format, VkExtent3D extent)
|
||||
{
|
||||
// Release ressources if image is to be recreated
|
||||
if (storageImage.image != VK_NULL_HANDLE) {
|
||||
vkDestroyImageView(device, storageImage.view, nullptr);
|
||||
vkDestroyImage(device, storageImage.image, nullptr);
|
||||
vkFreeMemory(device, storageImage.memory, nullptr);
|
||||
storageImage = {};
|
||||
}
|
||||
|
||||
VkImageCreateInfo image = vks::initializers::imageCreateInfo();
|
||||
image.imageType = VK_IMAGE_TYPE_2D;
|
||||
image.format = format;
|
||||
image.extent = extent;
|
||||
image.mipLevels = 1;
|
||||
image.arrayLayers = 1;
|
||||
image.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
image.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
image.usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_STORAGE_BIT;
|
||||
image.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
VK_CHECK_RESULT(vkCreateImage(vulkanDevice->logicalDevice, &image, nullptr, &storageImage.image));
|
||||
|
||||
VkMemoryRequirements memReqs;
|
||||
vkGetImageMemoryRequirements(vulkanDevice->logicalDevice, storageImage.image, &memReqs);
|
||||
VkMemoryAllocateInfo memoryAllocateInfo = vks::initializers::memoryAllocateInfo();
|
||||
memoryAllocateInfo.allocationSize = memReqs.size;
|
||||
memoryAllocateInfo.memoryTypeIndex = vulkanDevice->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(vulkanDevice->logicalDevice, &memoryAllocateInfo, nullptr, &storageImage.memory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(vulkanDevice->logicalDevice, storageImage.image, storageImage.memory, 0));
|
||||
|
||||
VkImageViewCreateInfo colorImageView = vks::initializers::imageViewCreateInfo();
|
||||
colorImageView.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
colorImageView.format = format;
|
||||
colorImageView.subresourceRange = {};
|
||||
colorImageView.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
colorImageView.subresourceRange.baseMipLevel = 0;
|
||||
colorImageView.subresourceRange.levelCount = 1;
|
||||
colorImageView.subresourceRange.baseArrayLayer = 0;
|
||||
colorImageView.subresourceRange.layerCount = 1;
|
||||
colorImageView.image = storageImage.image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(vulkanDevice->logicalDevice, &colorImageView, nullptr, &storageImage.view));
|
||||
|
||||
VkCommandBuffer cmdBuffer = vulkanDevice->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
vks::tools::setImageLayout(cmdBuffer, storageImage.image,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_GENERAL,
|
||||
{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 });
|
||||
vulkanDevice->flushCommandBuffer(cmdBuffer, queue);
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::deleteStorageImage()
|
||||
{
|
||||
vkDestroyImageView(vulkanDevice->logicalDevice, storageImage.view, nullptr);
|
||||
vkDestroyImage(vulkanDevice->logicalDevice, storageImage.image, nullptr);
|
||||
vkFreeMemory(vulkanDevice->logicalDevice, storageImage.memory, nullptr);
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::prepare()
|
||||
{
|
||||
VulkanExampleBase::prepare();
|
||||
// Get properties and features
|
||||
rayTracingPipelineProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR;
|
||||
VkPhysicalDeviceProperties2 deviceProperties2{};
|
||||
deviceProperties2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2;
|
||||
deviceProperties2.pNext = &rayTracingPipelineProperties;
|
||||
vkGetPhysicalDeviceProperties2(physicalDevice, &deviceProperties2);
|
||||
accelerationStructureFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR;
|
||||
VkPhysicalDeviceFeatures2 deviceFeatures2{};
|
||||
deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
|
||||
deviceFeatures2.pNext = &accelerationStructureFeatures;
|
||||
vkGetPhysicalDeviceFeatures2(physicalDevice, &deviceFeatures2);
|
||||
// Get the function pointers required for ray tracing
|
||||
vkGetBufferDeviceAddressKHR = reinterpret_cast<PFN_vkGetBufferDeviceAddressKHR>(vkGetDeviceProcAddr(device, "vkGetBufferDeviceAddressKHR"));
|
||||
vkCmdBuildAccelerationStructuresKHR = reinterpret_cast<PFN_vkCmdBuildAccelerationStructuresKHR>(vkGetDeviceProcAddr(device, "vkCmdBuildAccelerationStructuresKHR"));
|
||||
vkBuildAccelerationStructuresKHR = reinterpret_cast<PFN_vkBuildAccelerationStructuresKHR>(vkGetDeviceProcAddr(device, "vkBuildAccelerationStructuresKHR"));
|
||||
vkCreateAccelerationStructureKHR = reinterpret_cast<PFN_vkCreateAccelerationStructureKHR>(vkGetDeviceProcAddr(device, "vkCreateAccelerationStructureKHR"));
|
||||
vkDestroyAccelerationStructureKHR = reinterpret_cast<PFN_vkDestroyAccelerationStructureKHR>(vkGetDeviceProcAddr(device, "vkDestroyAccelerationStructureKHR"));
|
||||
vkGetAccelerationStructureBuildSizesKHR = reinterpret_cast<PFN_vkGetAccelerationStructureBuildSizesKHR>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureBuildSizesKHR"));
|
||||
vkGetAccelerationStructureDeviceAddressKHR = reinterpret_cast<PFN_vkGetAccelerationStructureDeviceAddressKHR>(vkGetDeviceProcAddr(device, "vkGetAccelerationStructureDeviceAddressKHR"));
|
||||
vkCmdTraceRaysKHR = reinterpret_cast<PFN_vkCmdTraceRaysKHR>(vkGetDeviceProcAddr(device, "vkCmdTraceRaysKHR"));
|
||||
vkGetRayTracingShaderGroupHandlesKHR = reinterpret_cast<PFN_vkGetRayTracingShaderGroupHandlesKHR>(vkGetDeviceProcAddr(device, "vkGetRayTracingShaderGroupHandlesKHR"));
|
||||
vkCreateRayTracingPipelinesKHR = reinterpret_cast<PFN_vkCreateRayTracingPipelinesKHR>(vkGetDeviceProcAddr(device, "vkCreateRayTracingPipelinesKHR"));
|
||||
// Update the render pass to keep the color attachment contents, so we can draw the UI on top of the ray traced output
|
||||
if (!rayQueryOnly) {
|
||||
updateRenderPass();
|
||||
}
|
||||
}
|
||||
|
||||
VkStridedDeviceAddressRegionKHR VulkanRaytracingSample::getSbtEntryStridedDeviceAddressRegion(VkBuffer buffer, uint32_t handleCount)
|
||||
{
|
||||
const uint32_t handleSizeAligned = vks::tools::alignedSize(rayTracingPipelineProperties.shaderGroupHandleSize, rayTracingPipelineProperties.shaderGroupHandleAlignment);
|
||||
VkStridedDeviceAddressRegionKHR stridedDeviceAddressRegionKHR{};
|
||||
stridedDeviceAddressRegionKHR.deviceAddress = getBufferDeviceAddress(buffer);
|
||||
stridedDeviceAddressRegionKHR.stride = handleSizeAligned;
|
||||
stridedDeviceAddressRegionKHR.size = handleCount * handleSizeAligned;
|
||||
return stridedDeviceAddressRegionKHR;
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::createShaderBindingTable(ShaderBindingTable& shaderBindingTable, uint32_t handleCount)
|
||||
{
|
||||
// Create buffer to hold all shader handles for the SBT
|
||||
VK_CHECK_RESULT(vulkanDevice->createBuffer(
|
||||
VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR | VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
&shaderBindingTable,
|
||||
rayTracingPipelineProperties.shaderGroupHandleSize * handleCount));
|
||||
// Get the strided address to be used when dispatching the rays
|
||||
shaderBindingTable.stridedDeviceAddressRegion = getSbtEntryStridedDeviceAddressRegion(shaderBindingTable.buffer, handleCount);
|
||||
// Map persistent
|
||||
shaderBindingTable.map();
|
||||
}
|
||||
|
||||
void VulkanRaytracingSample::drawUI(VkCommandBuffer commandBuffer, VkFramebuffer framebuffer)
|
||||
{
|
||||
VkClearValue clearValues[2];
|
||||
clearValues[0].color = defaultClearColor;
|
||||
clearValues[1].depthStencil = { 1.0f, 0 };
|
||||
|
||||
VkRenderPassBeginInfo renderPassBeginInfo = vks::initializers::renderPassBeginInfo();
|
||||
renderPassBeginInfo.renderPass = renderPass;
|
||||
renderPassBeginInfo.renderArea.offset.x = 0;
|
||||
renderPassBeginInfo.renderArea.offset.y = 0;
|
||||
renderPassBeginInfo.renderArea.extent.width = width;
|
||||
renderPassBeginInfo.renderArea.extent.height = height;
|
||||
renderPassBeginInfo.clearValueCount = 2;
|
||||
renderPassBeginInfo.pClearValues = clearValues;
|
||||
renderPassBeginInfo.framebuffer = framebuffer;
|
||||
|
||||
vkCmdBeginRenderPass(commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
|
||||
VulkanExampleBase::drawUI(commandBuffer);
|
||||
vkCmdEndRenderPass(commandBuffer);
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Extended sample base class for ray tracing based samples
|
||||
*
|
||||
* Copyright (C) 2020 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "vulkanexamplebase.h"
|
||||
#include "VulkanTools.h"
|
||||
#include "VulkanDevice.h"
|
||||
|
||||
class VulkanRaytracingSample : public VulkanExampleBase
|
||||
{
|
||||
protected:
|
||||
// Update the default render pass with different color attachment load ops
|
||||
virtual void updateRenderPass();
|
||||
public:
|
||||
// Function pointers for ray tracing related stuff
|
||||
PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR;
|
||||
PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR;
|
||||
PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR;
|
||||
PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR;
|
||||
PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR;
|
||||
PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR;
|
||||
PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR;
|
||||
PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR;
|
||||
PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR;
|
||||
PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR;
|
||||
|
||||
// Available features and properties
|
||||
VkPhysicalDeviceRayTracingPipelinePropertiesKHR rayTracingPipelineProperties{};
|
||||
VkPhysicalDeviceAccelerationStructureFeaturesKHR accelerationStructureFeatures{};
|
||||
|
||||
// Enabled features and properties
|
||||
VkPhysicalDeviceBufferDeviceAddressFeatures enabledBufferDeviceAddresFeatures{};
|
||||
VkPhysicalDeviceRayTracingPipelineFeaturesKHR enabledRayTracingPipelineFeatures{};
|
||||
VkPhysicalDeviceAccelerationStructureFeaturesKHR enabledAccelerationStructureFeatures{};
|
||||
|
||||
// Holds information for a ray tracing scratch buffer that is used as a temporary storage
|
||||
struct ScratchBuffer
|
||||
{
|
||||
uint64_t deviceAddress = 0;
|
||||
VkBuffer handle = VK_NULL_HANDLE;
|
||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
||||
};
|
||||
|
||||
// Holds information for a ray tracing acceleration structure
|
||||
struct AccelerationStructure {
|
||||
VkAccelerationStructureKHR handle;
|
||||
uint64_t deviceAddress = 0;
|
||||
VkDeviceMemory memory;
|
||||
VkBuffer buffer;
|
||||
};
|
||||
|
||||
// Holds information for a storage image that the ray tracing shaders output to
|
||||
struct StorageImage {
|
||||
VkDeviceMemory memory = VK_NULL_HANDLE;
|
||||
VkImage image = VK_NULL_HANDLE;
|
||||
VkImageView view = VK_NULL_HANDLE;
|
||||
VkFormat format;
|
||||
} storageImage;
|
||||
|
||||
// Extends the buffer class and holds information for a shader binding table
|
||||
class ShaderBindingTable : public vks::Buffer {
|
||||
public:
|
||||
VkStridedDeviceAddressRegionKHR stridedDeviceAddressRegion{};
|
||||
};
|
||||
|
||||
// Set to true, to denote that the sample only uses ray queries (changes extension and render pass handling)
|
||||
bool rayQueryOnly = false;
|
||||
|
||||
void enableExtensions();
|
||||
ScratchBuffer createScratchBuffer(VkDeviceSize size);
|
||||
void deleteScratchBuffer(ScratchBuffer& scratchBuffer);
|
||||
void createAccelerationStructure(AccelerationStructure& accelerationStructure, VkAccelerationStructureTypeKHR type, VkAccelerationStructureBuildSizesInfoKHR buildSizeInfo);
|
||||
void deleteAccelerationStructure(AccelerationStructure& accelerationStructure);
|
||||
uint64_t getBufferDeviceAddress(VkBuffer buffer);
|
||||
void createStorageImage(VkFormat format, VkExtent3D extent);
|
||||
void deleteStorageImage();
|
||||
VkStridedDeviceAddressRegionKHR getSbtEntryStridedDeviceAddressRegion(VkBuffer buffer, uint32_t handleCount);
|
||||
void createShaderBindingTable(ShaderBindingTable& shaderBindingTable, uint32_t handleCount);
|
||||
// Draw the ImGUI UI overlay using a render pass
|
||||
void drawUI(VkCommandBuffer commandBuffer, VkFramebuffer framebuffer);
|
||||
|
||||
virtual void prepare();
|
||||
};
|
||||
|
|
@ -0,0 +1,616 @@
|
|||
/*
|
||||
* Class wrapping access to the swap chain
|
||||
*
|
||||
* A swap chain is a collection of framebuffers used for rendering and presentation to the windowing system
|
||||
*
|
||||
* Copyright (C) 2016-2021 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanSwapChain.h"
|
||||
|
||||
/** @brief Creates the platform specific surface abstraction of the native platform window used for presentation */
|
||||
#if defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
void VulkanSwapChain::initSurface(void* platformHandle, void* platformWindow)
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
void VulkanSwapChain::initSurface(ANativeWindow* window)
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
void VulkanSwapChain::initSurface(IDirectFB* dfb, IDirectFBSurface* window)
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
void VulkanSwapChain::initSurface(wl_display *display, wl_surface *window)
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
void VulkanSwapChain::initSurface(xcb_connection_t* connection, xcb_window_t window)
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
void VulkanSwapChain::initSurface(void* view)
|
||||
#elif (defined(_DIRECT2DISPLAY) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
||||
void VulkanSwapChain::initSurface(uint32_t width, uint32_t height)
|
||||
#endif
|
||||
{
|
||||
VkResult err = VK_SUCCESS;
|
||||
|
||||
// Create the os-specific surface
|
||||
#if defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
VkWin32SurfaceCreateInfoKHR surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
||||
surfaceCreateInfo.hinstance = (HINSTANCE)platformHandle;
|
||||
surfaceCreateInfo.hwnd = (HWND)platformWindow;
|
||||
err = vkCreateWin32SurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
VkAndroidSurfaceCreateInfoKHR surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR;
|
||||
surfaceCreateInfo.window = window;
|
||||
err = vkCreateAndroidSurfaceKHR(instance, &surfaceCreateInfo, NULL, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_IOS_MVK)
|
||||
VkIOSSurfaceCreateInfoMVK surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK;
|
||||
surfaceCreateInfo.pNext = NULL;
|
||||
surfaceCreateInfo.flags = 0;
|
||||
surfaceCreateInfo.pView = view;
|
||||
err = vkCreateIOSSurfaceMVK(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_MACOS_MVK)
|
||||
VkMacOSSurfaceCreateInfoMVK surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK;
|
||||
surfaceCreateInfo.pNext = NULL;
|
||||
surfaceCreateInfo.flags = 0;
|
||||
surfaceCreateInfo.pView = view;
|
||||
err = vkCreateMacOSSurfaceMVK(instance, &surfaceCreateInfo, NULL, &surface);
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
createDirect2DisplaySurface(width, height);
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
VkDirectFBSurfaceCreateInfoEXT surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT;
|
||||
surfaceCreateInfo.dfb = dfb;
|
||||
surfaceCreateInfo.surface = window;
|
||||
err = vkCreateDirectFBSurfaceEXT(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
VkWaylandSurfaceCreateInfoKHR surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR;
|
||||
surfaceCreateInfo.display = display;
|
||||
surfaceCreateInfo.surface = window;
|
||||
err = vkCreateWaylandSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
VkXcbSurfaceCreateInfoKHR surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR;
|
||||
surfaceCreateInfo.connection = connection;
|
||||
surfaceCreateInfo.window = window;
|
||||
err = vkCreateXcbSurfaceKHR(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#elif defined(VK_USE_PLATFORM_HEADLESS_EXT)
|
||||
VkHeadlessSurfaceCreateInfoEXT surfaceCreateInfo = {};
|
||||
surfaceCreateInfo.sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT;
|
||||
PFN_vkCreateHeadlessSurfaceEXT fpCreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT)vkGetInstanceProcAddr(instance, "vkCreateHeadlessSurfaceEXT");
|
||||
if (!fpCreateHeadlessSurfaceEXT){
|
||||
vks::tools::exitFatal("Could not fetch function pointer for the headless extension!", -1);
|
||||
}
|
||||
err = fpCreateHeadlessSurfaceEXT(instance, &surfaceCreateInfo, nullptr, &surface);
|
||||
#endif
|
||||
|
||||
if (err != VK_SUCCESS) {
|
||||
vks::tools::exitFatal("Could not create surface!", err);
|
||||
}
|
||||
|
||||
// Get available queue family properties
|
||||
uint32_t queueCount;
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, NULL);
|
||||
assert(queueCount >= 1);
|
||||
|
||||
std::vector<VkQueueFamilyProperties> queueProps(queueCount);
|
||||
vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueCount, queueProps.data());
|
||||
|
||||
// Iterate over each queue to learn whether it supports presenting:
|
||||
// Find a queue with present support
|
||||
// Will be used to present the swap chain images to the windowing system
|
||||
std::vector<VkBool32> supportsPresent(queueCount);
|
||||
for (uint32_t i = 0; i < queueCount; i++)
|
||||
{
|
||||
fpGetPhysicalDeviceSurfaceSupportKHR(physicalDevice, i, surface, &supportsPresent[i]);
|
||||
}
|
||||
|
||||
// Search for a graphics and a present queue in the array of queue
|
||||
// families, try to find one that supports both
|
||||
uint32_t graphicsQueueNodeIndex = UINT32_MAX;
|
||||
uint32_t presentQueueNodeIndex = UINT32_MAX;
|
||||
for (uint32_t i = 0; i < queueCount; i++)
|
||||
{
|
||||
if ((queueProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT) != 0)
|
||||
{
|
||||
if (graphicsQueueNodeIndex == UINT32_MAX)
|
||||
{
|
||||
graphicsQueueNodeIndex = i;
|
||||
}
|
||||
|
||||
if (supportsPresent[i] == VK_TRUE)
|
||||
{
|
||||
graphicsQueueNodeIndex = i;
|
||||
presentQueueNodeIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (presentQueueNodeIndex == UINT32_MAX)
|
||||
{
|
||||
// If there's no queue that supports both present and graphics
|
||||
// try to find a separate present queue
|
||||
for (uint32_t i = 0; i < queueCount; ++i)
|
||||
{
|
||||
if (supportsPresent[i] == VK_TRUE)
|
||||
{
|
||||
presentQueueNodeIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Exit if either a graphics or a presenting queue hasn't been found
|
||||
if (graphicsQueueNodeIndex == UINT32_MAX || presentQueueNodeIndex == UINT32_MAX)
|
||||
{
|
||||
vks::tools::exitFatal("Could not find a graphics and/or presenting queue!", -1);
|
||||
}
|
||||
|
||||
// todo : Add support for separate graphics and presenting queue
|
||||
if (graphicsQueueNodeIndex != presentQueueNodeIndex)
|
||||
{
|
||||
vks::tools::exitFatal("Separate graphics and presenting queues are not supported yet!", -1);
|
||||
}
|
||||
|
||||
queueNodeIndex = graphicsQueueNodeIndex;
|
||||
|
||||
// Get list of supported surface formats
|
||||
uint32_t formatCount;
|
||||
VK_CHECK_RESULT(fpGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, &formatCount, NULL));
|
||||
assert(formatCount > 0);
|
||||
|
||||
std::vector<VkSurfaceFormatKHR> surfaceFormats(formatCount);
|
||||
VK_CHECK_RESULT(fpGetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, &formatCount, surfaceFormats.data()));
|
||||
|
||||
// If the surface format list only includes one entry with VK_FORMAT_UNDEFINED,
|
||||
// there is no preferred format, so we assume VK_FORMAT_B8G8R8A8_UNORM
|
||||
if ((formatCount == 1) && (surfaceFormats[0].format == VK_FORMAT_UNDEFINED))
|
||||
{
|
||||
colorFormat = VK_FORMAT_B8G8R8A8_UNORM;
|
||||
colorSpace = surfaceFormats[0].colorSpace;
|
||||
}
|
||||
else
|
||||
{
|
||||
// iterate over the list of available surface format and
|
||||
// check for the presence of VK_FORMAT_B8G8R8A8_UNORM
|
||||
bool found_B8G8R8A8_UNORM = false;
|
||||
for (auto&& surfaceFormat : surfaceFormats)
|
||||
{
|
||||
if (surfaceFormat.format == VK_FORMAT_B8G8R8A8_UNORM)
|
||||
{
|
||||
colorFormat = surfaceFormat.format;
|
||||
colorSpace = surfaceFormat.colorSpace;
|
||||
found_B8G8R8A8_UNORM = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// in case VK_FORMAT_B8G8R8A8_UNORM is not available
|
||||
// select the first available color format
|
||||
if (!found_B8G8R8A8_UNORM)
|
||||
{
|
||||
colorFormat = surfaceFormats[0].format;
|
||||
colorSpace = surfaceFormats[0].colorSpace;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Set instance, physical and logical device to use for the swapchain and get all required function pointers
|
||||
*
|
||||
* @param instance Vulkan instance to use
|
||||
* @param physicalDevice Physical device used to query properties and formats relevant to the swapchain
|
||||
* @param device Logical representation of the device to create the swapchain for
|
||||
*
|
||||
*/
|
||||
void VulkanSwapChain::connect(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device)
|
||||
{
|
||||
this->instance = instance;
|
||||
this->physicalDevice = physicalDevice;
|
||||
this->device = device;
|
||||
fpGetPhysicalDeviceSurfaceSupportKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceSupportKHR>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceSupportKHR"));
|
||||
fpGetPhysicalDeviceSurfaceCapabilitiesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"));
|
||||
fpGetPhysicalDeviceSurfaceFormatsKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfaceFormatsKHR>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormatsKHR"));
|
||||
fpGetPhysicalDeviceSurfacePresentModesKHR = reinterpret_cast<PFN_vkGetPhysicalDeviceSurfacePresentModesKHR>(vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfacePresentModesKHR"));
|
||||
|
||||
fpCreateSwapchainKHR = reinterpret_cast<PFN_vkCreateSwapchainKHR>(vkGetDeviceProcAddr(device, "vkCreateSwapchainKHR"));
|
||||
fpDestroySwapchainKHR = reinterpret_cast<PFN_vkDestroySwapchainKHR>(vkGetDeviceProcAddr(device, "vkDestroySwapchainKHR"));
|
||||
fpGetSwapchainImagesKHR = reinterpret_cast<PFN_vkGetSwapchainImagesKHR>(vkGetDeviceProcAddr(device, "vkGetSwapchainImagesKHR"));
|
||||
fpAcquireNextImageKHR = reinterpret_cast<PFN_vkAcquireNextImageKHR>(vkGetDeviceProcAddr(device, "vkAcquireNextImageKHR"));
|
||||
fpQueuePresentKHR = reinterpret_cast<PFN_vkQueuePresentKHR>(vkGetDeviceProcAddr(device, "vkQueuePresentKHR"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the swapchain and get its images with given width and height
|
||||
*
|
||||
* @param width Pointer to the width of the swapchain (may be adjusted to fit the requirements of the swapchain)
|
||||
* @param height Pointer to the height of the swapchain (may be adjusted to fit the requirements of the swapchain)
|
||||
* @param vsync (Optional) Can be used to force vsync-ed rendering (by using VK_PRESENT_MODE_FIFO_KHR as presentation mode)
|
||||
*/
|
||||
void VulkanSwapChain::create(uint32_t *width, uint32_t *height, bool vsync, bool fullscreen)
|
||||
{
|
||||
// Store the current swap chain handle so we can use it later on to ease up recreation
|
||||
VkSwapchainKHR oldSwapchain = swapChain;
|
||||
|
||||
// Get physical device surface properties and formats
|
||||
VkSurfaceCapabilitiesKHR surfCaps;
|
||||
VK_CHECK_RESULT(fpGetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, &surfCaps));
|
||||
|
||||
// Get available present modes
|
||||
uint32_t presentModeCount;
|
||||
VK_CHECK_RESULT(fpGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, &presentModeCount, NULL));
|
||||
assert(presentModeCount > 0);
|
||||
|
||||
std::vector<VkPresentModeKHR> presentModes(presentModeCount);
|
||||
VK_CHECK_RESULT(fpGetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, &presentModeCount, presentModes.data()));
|
||||
|
||||
VkExtent2D swapchainExtent = {};
|
||||
// If width (and height) equals the special value 0xFFFFFFFF, the size of the surface will be set by the swapchain
|
||||
if (surfCaps.currentExtent.width == (uint32_t)-1)
|
||||
{
|
||||
// If the surface size is undefined, the size is set to
|
||||
// the size of the images requested.
|
||||
swapchainExtent.width = *width;
|
||||
swapchainExtent.height = *height;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the surface size is defined, the swap chain size must match
|
||||
swapchainExtent = surfCaps.currentExtent;
|
||||
*width = surfCaps.currentExtent.width;
|
||||
*height = surfCaps.currentExtent.height;
|
||||
}
|
||||
|
||||
|
||||
// Select a present mode for the swapchain
|
||||
|
||||
// The VK_PRESENT_MODE_FIFO_KHR mode must always be present as per spec
|
||||
// This mode waits for the vertical blank ("v-sync")
|
||||
VkPresentModeKHR swapchainPresentMode = VK_PRESENT_MODE_FIFO_KHR;
|
||||
|
||||
// If v-sync is not requested, try to find a mailbox mode
|
||||
// It's the lowest latency non-tearing present mode available
|
||||
if (!vsync)
|
||||
{
|
||||
for (size_t i = 0; i < presentModeCount; i++)
|
||||
{
|
||||
if (presentModes[i] == VK_PRESENT_MODE_MAILBOX_KHR)
|
||||
{
|
||||
swapchainPresentMode = VK_PRESENT_MODE_MAILBOX_KHR;
|
||||
break;
|
||||
}
|
||||
if (presentModes[i] == VK_PRESENT_MODE_IMMEDIATE_KHR)
|
||||
{
|
||||
swapchainPresentMode = VK_PRESENT_MODE_IMMEDIATE_KHR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Determine the number of images
|
||||
uint32_t desiredNumberOfSwapchainImages = surfCaps.minImageCount + 1;
|
||||
#if (defined(VK_USE_PLATFORM_MACOS_MVK) && defined(VK_EXAMPLE_XCODE_GENERATED))
|
||||
// SRS - Work around known MoltenVK issue re 2x frame rate when vsync (VK_PRESENT_MODE_FIFO_KHR) enabled
|
||||
struct utsname sysInfo;
|
||||
uname(&sysInfo);
|
||||
// SRS - When vsync is on, use minImageCount when not in fullscreen or when running on Apple Silcon
|
||||
// This forces swapchain image acquire frame rate to match display vsync frame rate
|
||||
if (vsync && (!fullscreen || strcmp(sysInfo.machine, "arm64") == 0))
|
||||
{
|
||||
desiredNumberOfSwapchainImages = surfCaps.minImageCount;
|
||||
}
|
||||
#endif
|
||||
if ((surfCaps.maxImageCount > 0) && (desiredNumberOfSwapchainImages > surfCaps.maxImageCount))
|
||||
{
|
||||
desiredNumberOfSwapchainImages = surfCaps.maxImageCount;
|
||||
}
|
||||
|
||||
// Find the transformation of the surface
|
||||
VkSurfaceTransformFlagsKHR preTransform;
|
||||
if (surfCaps.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
|
||||
{
|
||||
// We prefer a non-rotated transform
|
||||
preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
}
|
||||
else
|
||||
{
|
||||
preTransform = surfCaps.currentTransform;
|
||||
}
|
||||
|
||||
// Find a supported composite alpha format (not all devices support alpha opaque)
|
||||
VkCompositeAlphaFlagBitsKHR compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
||||
// Simply select the first composite alpha format available
|
||||
std::vector<VkCompositeAlphaFlagBitsKHR> compositeAlphaFlags = {
|
||||
VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR,
|
||||
VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR,
|
||||
VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR,
|
||||
VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,
|
||||
};
|
||||
for (auto& compositeAlphaFlag : compositeAlphaFlags) {
|
||||
if (surfCaps.supportedCompositeAlpha & compositeAlphaFlag) {
|
||||
compositeAlpha = compositeAlphaFlag;
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
VkSwapchainCreateInfoKHR swapchainCI = {};
|
||||
swapchainCI.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
|
||||
swapchainCI.surface = surface;
|
||||
swapchainCI.minImageCount = desiredNumberOfSwapchainImages;
|
||||
swapchainCI.imageFormat = colorFormat;
|
||||
swapchainCI.imageColorSpace = colorSpace;
|
||||
swapchainCI.imageExtent = { swapchainExtent.width, swapchainExtent.height };
|
||||
swapchainCI.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
|
||||
swapchainCI.preTransform = (VkSurfaceTransformFlagBitsKHR)preTransform;
|
||||
swapchainCI.imageArrayLayers = 1;
|
||||
swapchainCI.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
swapchainCI.queueFamilyIndexCount = 0;
|
||||
swapchainCI.presentMode = swapchainPresentMode;
|
||||
// Setting oldSwapChain to the saved handle of the previous swapchain aids in resource reuse and makes sure that we can still present already acquired images
|
||||
swapchainCI.oldSwapchain = oldSwapchain;
|
||||
// Setting clipped to VK_TRUE allows the implementation to discard rendering outside of the surface area
|
||||
swapchainCI.clipped = VK_TRUE;
|
||||
swapchainCI.compositeAlpha = compositeAlpha;
|
||||
|
||||
// Enable transfer source on swap chain images if supported
|
||||
if (surfCaps.supportedUsageFlags & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) {
|
||||
swapchainCI.imageUsage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
|
||||
}
|
||||
|
||||
// Enable transfer destination on swap chain images if supported
|
||||
if (surfCaps.supportedUsageFlags & VK_IMAGE_USAGE_TRANSFER_DST_BIT) {
|
||||
swapchainCI.imageUsage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
}
|
||||
|
||||
VK_CHECK_RESULT(fpCreateSwapchainKHR(device, &swapchainCI, nullptr, &swapChain));
|
||||
|
||||
// If an existing swap chain is re-created, destroy the old swap chain
|
||||
// This also cleans up all the presentable images
|
||||
if (oldSwapchain != VK_NULL_HANDLE)
|
||||
{
|
||||
for (uint32_t i = 0; i < imageCount; i++)
|
||||
{
|
||||
vkDestroyImageView(device, buffers[i].view, nullptr);
|
||||
}
|
||||
fpDestroySwapchainKHR(device, oldSwapchain, nullptr);
|
||||
}
|
||||
VK_CHECK_RESULT(fpGetSwapchainImagesKHR(device, swapChain, &imageCount, NULL));
|
||||
|
||||
// Get the swap chain images
|
||||
images.resize(imageCount);
|
||||
VK_CHECK_RESULT(fpGetSwapchainImagesKHR(device, swapChain, &imageCount, images.data()));
|
||||
|
||||
// Get the swap chain buffers containing the image and imageview
|
||||
buffers.resize(imageCount);
|
||||
for (uint32_t i = 0; i < imageCount; i++)
|
||||
{
|
||||
VkImageViewCreateInfo colorAttachmentView = {};
|
||||
colorAttachmentView.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
colorAttachmentView.pNext = NULL;
|
||||
colorAttachmentView.format = colorFormat;
|
||||
colorAttachmentView.components = {
|
||||
VK_COMPONENT_SWIZZLE_R,
|
||||
VK_COMPONENT_SWIZZLE_G,
|
||||
VK_COMPONENT_SWIZZLE_B,
|
||||
VK_COMPONENT_SWIZZLE_A
|
||||
};
|
||||
colorAttachmentView.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
colorAttachmentView.subresourceRange.baseMipLevel = 0;
|
||||
colorAttachmentView.subresourceRange.levelCount = 1;
|
||||
colorAttachmentView.subresourceRange.baseArrayLayer = 0;
|
||||
colorAttachmentView.subresourceRange.layerCount = 1;
|
||||
colorAttachmentView.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
colorAttachmentView.flags = 0;
|
||||
|
||||
buffers[i].image = images[i];
|
||||
|
||||
colorAttachmentView.image = buffers[i].image;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateImageView(device, &colorAttachmentView, nullptr, &buffers[i].view));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Acquires the next image in the swap chain
|
||||
*
|
||||
* @param presentCompleteSemaphore (Optional) Semaphore that is signaled when the image is ready for use
|
||||
* @param imageIndex Pointer to the image index that will be increased if the next image could be acquired
|
||||
*
|
||||
* @note The function will always wait until the next image has been acquired by setting timeout to UINT64_MAX
|
||||
*
|
||||
* @return VkResult of the image acquisition
|
||||
*/
|
||||
VkResult VulkanSwapChain::acquireNextImage(VkSemaphore presentCompleteSemaphore, uint32_t *imageIndex)
|
||||
{
|
||||
// By setting timeout to UINT64_MAX we will always wait until the next image has been acquired or an actual error is thrown
|
||||
// With that we don't have to handle VK_NOT_READY
|
||||
return fpAcquireNextImageKHR(device, swapChain, UINT64_MAX, presentCompleteSemaphore, (VkFence)nullptr, imageIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* Queue an image for presentation
|
||||
*
|
||||
* @param queue Presentation queue for presenting the image
|
||||
* @param imageIndex Index of the swapchain image to queue for presentation
|
||||
* @param waitSemaphore (Optional) Semaphore that is waited on before the image is presented (only used if != VK_NULL_HANDLE)
|
||||
*
|
||||
* @return VkResult of the queue presentation
|
||||
*/
|
||||
VkResult VulkanSwapChain::queuePresent(VkQueue queue, uint32_t imageIndex, VkSemaphore waitSemaphore)
|
||||
{
|
||||
VkPresentInfoKHR presentInfo = {};
|
||||
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
presentInfo.pNext = NULL;
|
||||
presentInfo.swapchainCount = 1;
|
||||
presentInfo.pSwapchains = &swapChain;
|
||||
presentInfo.pImageIndices = &imageIndex;
|
||||
// Check if a wait semaphore has been specified to wait for before presenting the image
|
||||
if (waitSemaphore != VK_NULL_HANDLE)
|
||||
{
|
||||
presentInfo.pWaitSemaphores = &waitSemaphore;
|
||||
presentInfo.waitSemaphoreCount = 1;
|
||||
}
|
||||
return fpQueuePresentKHR(queue, &presentInfo);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Destroy and free Vulkan resources used for the swapchain
|
||||
*/
|
||||
void VulkanSwapChain::cleanup()
|
||||
{
|
||||
if (swapChain != VK_NULL_HANDLE)
|
||||
{
|
||||
for (uint32_t i = 0; i < imageCount; i++)
|
||||
{
|
||||
vkDestroyImageView(device, buffers[i].view, nullptr);
|
||||
}
|
||||
}
|
||||
if (surface != VK_NULL_HANDLE)
|
||||
{
|
||||
fpDestroySwapchainKHR(device, swapChain, nullptr);
|
||||
vkDestroySurfaceKHR(instance, surface, nullptr);
|
||||
}
|
||||
surface = VK_NULL_HANDLE;
|
||||
swapChain = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
#if defined(_DIRECT2DISPLAY)
|
||||
/**
|
||||
* Create direct to display surface
|
||||
*/
|
||||
void VulkanSwapChain::createDirect2DisplaySurface(uint32_t width, uint32_t height)
|
||||
{
|
||||
uint32_t displayPropertyCount;
|
||||
|
||||
// Get display property
|
||||
vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayPropertyCount, NULL);
|
||||
VkDisplayPropertiesKHR* pDisplayProperties = new VkDisplayPropertiesKHR[displayPropertyCount];
|
||||
vkGetPhysicalDeviceDisplayPropertiesKHR(physicalDevice, &displayPropertyCount, pDisplayProperties);
|
||||
|
||||
// Get plane property
|
||||
uint32_t planePropertyCount;
|
||||
vkGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, &planePropertyCount, NULL);
|
||||
VkDisplayPlanePropertiesKHR* pPlaneProperties = new VkDisplayPlanePropertiesKHR[planePropertyCount];
|
||||
vkGetPhysicalDeviceDisplayPlanePropertiesKHR(physicalDevice, &planePropertyCount, pPlaneProperties);
|
||||
|
||||
VkDisplayKHR display = VK_NULL_HANDLE;
|
||||
VkDisplayModeKHR displayMode;
|
||||
VkDisplayModePropertiesKHR* pModeProperties;
|
||||
bool foundMode = false;
|
||||
|
||||
for(uint32_t i = 0; i < displayPropertyCount;++i)
|
||||
{
|
||||
display = pDisplayProperties[i].display;
|
||||
uint32_t modeCount;
|
||||
vkGetDisplayModePropertiesKHR(physicalDevice, display, &modeCount, NULL);
|
||||
pModeProperties = new VkDisplayModePropertiesKHR[modeCount];
|
||||
vkGetDisplayModePropertiesKHR(physicalDevice, display, &modeCount, pModeProperties);
|
||||
|
||||
for (uint32_t j = 0; j < modeCount; ++j)
|
||||
{
|
||||
const VkDisplayModePropertiesKHR* mode = &pModeProperties[j];
|
||||
|
||||
if (mode->parameters.visibleRegion.width == width && mode->parameters.visibleRegion.height == height)
|
||||
{
|
||||
displayMode = mode->displayMode;
|
||||
foundMode = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (foundMode)
|
||||
{
|
||||
break;
|
||||
}
|
||||
delete [] pModeProperties;
|
||||
}
|
||||
|
||||
if(!foundMode)
|
||||
{
|
||||
vks::tools::exitFatal("Can't find a display and a display mode!", -1);
|
||||
return;
|
||||
}
|
||||
|
||||
// Search for a best plane we can use
|
||||
uint32_t bestPlaneIndex = UINT32_MAX;
|
||||
VkDisplayKHR* pDisplays = NULL;
|
||||
for(uint32_t i = 0; i < planePropertyCount; i++)
|
||||
{
|
||||
uint32_t planeIndex=i;
|
||||
uint32_t displayCount;
|
||||
vkGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, &displayCount, NULL);
|
||||
if (pDisplays)
|
||||
{
|
||||
delete [] pDisplays;
|
||||
}
|
||||
pDisplays = new VkDisplayKHR[displayCount];
|
||||
vkGetDisplayPlaneSupportedDisplaysKHR(physicalDevice, planeIndex, &displayCount, pDisplays);
|
||||
|
||||
// Find a display that matches the current plane
|
||||
bestPlaneIndex = UINT32_MAX;
|
||||
for(uint32_t j = 0; j < displayCount; j++)
|
||||
{
|
||||
if(display == pDisplays[j])
|
||||
{
|
||||
bestPlaneIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(bestPlaneIndex != UINT32_MAX)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(bestPlaneIndex == UINT32_MAX)
|
||||
{
|
||||
vks::tools::exitFatal("Can't find a plane for displaying!", -1);
|
||||
return;
|
||||
}
|
||||
|
||||
VkDisplayPlaneCapabilitiesKHR planeCap;
|
||||
vkGetDisplayPlaneCapabilitiesKHR(physicalDevice, displayMode, bestPlaneIndex, &planeCap);
|
||||
VkDisplayPlaneAlphaFlagBitsKHR alphaMode = (VkDisplayPlaneAlphaFlagBitsKHR)0;
|
||||
|
||||
if (planeCap.supportedAlpha & VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR)
|
||||
{
|
||||
alphaMode = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR;
|
||||
}
|
||||
else if (planeCap.supportedAlpha & VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR)
|
||||
{
|
||||
alphaMode = VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR;
|
||||
}
|
||||
else if (planeCap.supportedAlpha & VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR)
|
||||
{
|
||||
alphaMode = VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR;
|
||||
}
|
||||
else if (planeCap.supportedAlpha & VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR)
|
||||
{
|
||||
alphaMode = VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR;
|
||||
}
|
||||
|
||||
VkDisplaySurfaceCreateInfoKHR surfaceInfo{};
|
||||
surfaceInfo.sType = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR;
|
||||
surfaceInfo.pNext = NULL;
|
||||
surfaceInfo.flags = 0;
|
||||
surfaceInfo.displayMode = displayMode;
|
||||
surfaceInfo.planeIndex = bestPlaneIndex;
|
||||
surfaceInfo.planeStackIndex = pPlaneProperties[bestPlaneIndex].currentStackIndex;
|
||||
surfaceInfo.transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR;
|
||||
surfaceInfo.globalAlpha = 1.0;
|
||||
surfaceInfo.alphaMode = alphaMode;
|
||||
surfaceInfo.imageExtent.width = width;
|
||||
surfaceInfo.imageExtent.height = height;
|
||||
|
||||
VkResult result = vkCreateDisplayPlaneSurfaceKHR(instance, &surfaceInfo, NULL, &surface);
|
||||
if (result !=VK_SUCCESS) {
|
||||
vks::tools::exitFatal("Failed to create surface!", result);
|
||||
}
|
||||
|
||||
delete[] pDisplays;
|
||||
delete[] pModeProperties;
|
||||
delete[] pDisplayProperties;
|
||||
delete[] pPlaneProperties;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Class wrapping access to the swap chain
|
||||
*
|
||||
* A swap chain is a collection of framebuffers used for rendering and presentation to the windowing system
|
||||
*
|
||||
* Copyright (C) 2016-2017 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <vector>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include "VulkanTools.h"
|
||||
|
||||
#ifdef __ANDROID__
|
||||
#include "VulkanAndroid.h"
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <sys/utsname.h>
|
||||
#endif
|
||||
|
||||
typedef struct _SwapChainBuffers {
|
||||
VkImage image;
|
||||
VkImageView view;
|
||||
} SwapChainBuffer;
|
||||
|
||||
class VulkanSwapChain
|
||||
{
|
||||
private:
|
||||
VkInstance instance;
|
||||
VkDevice device;
|
||||
VkPhysicalDevice physicalDevice;
|
||||
VkSurfaceKHR surface;
|
||||
// Function pointers
|
||||
PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR;
|
||||
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR;
|
||||
PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR;
|
||||
PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR;
|
||||
PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR;
|
||||
PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR;
|
||||
PFN_vkQueuePresentKHR fpQueuePresentKHR;
|
||||
public:
|
||||
VkFormat colorFormat;
|
||||
VkColorSpaceKHR colorSpace;
|
||||
VkSwapchainKHR swapChain = VK_NULL_HANDLE;
|
||||
uint32_t imageCount;
|
||||
std::vector<VkImage> images;
|
||||
std::vector<SwapChainBuffer> buffers;
|
||||
uint32_t queueNodeIndex = UINT32_MAX;
|
||||
|
||||
#if defined(VK_USE_PLATFORM_WIN32_KHR)
|
||||
void initSurface(void* platformHandle, void* platformWindow);
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
void initSurface(ANativeWindow* window);
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
void initSurface(IDirectFB* dfb, IDirectFBSurface* window);
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
void initSurface(wl_display* display, wl_surface* window);
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
void initSurface(xcb_connection_t* connection, xcb_window_t window);
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
void initSurface(void* view);
|
||||
#elif (defined(_DIRECT2DISPLAY) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
||||
void initSurface(uint32_t width, uint32_t height);
|
||||
#if defined(_DIRECT2DISPLAY)
|
||||
void createDirect2DisplaySurface(uint32_t width, uint32_t height);
|
||||
#endif
|
||||
#endif
|
||||
void connect(VkInstance instance, VkPhysicalDevice physicalDevice, VkDevice device);
|
||||
void create(uint32_t* width, uint32_t* height, bool vsync = false, bool fullscreen = false);
|
||||
VkResult acquireNextImage(VkSemaphore presentCompleteSemaphore, uint32_t* imageIndex);
|
||||
VkResult queuePresent(VkQueue queue, uint32_t imageIndex, VkSemaphore waitSemaphore = VK_NULL_HANDLE);
|
||||
void cleanup();
|
||||
};
|
||||
|
|
@ -0,0 +1,869 @@
|
|||
/*
|
||||
* Vulkan texture loader
|
||||
*
|
||||
* Copyright(C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license(MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include <VulkanTexture.h>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
void Texture::updateDescriptor()
|
||||
{
|
||||
descriptor.sampler = sampler;
|
||||
descriptor.imageView = view;
|
||||
descriptor.imageLayout = imageLayout;
|
||||
}
|
||||
|
||||
void Texture::destroy()
|
||||
{
|
||||
vkDestroyImageView(device->logicalDevice, view, nullptr);
|
||||
vkDestroyImage(device->logicalDevice, image, nullptr);
|
||||
if (sampler)
|
||||
{
|
||||
vkDestroySampler(device->logicalDevice, sampler, nullptr);
|
||||
}
|
||||
vkFreeMemory(device->logicalDevice, deviceMemory, nullptr);
|
||||
}
|
||||
|
||||
ktxResult Texture::loadKTXFile(std::string filename, ktxTexture **target)
|
||||
{
|
||||
ktxResult result = KTX_SUCCESS;
|
||||
#if defined(__ANDROID__)
|
||||
AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, filename.c_str(), AASSET_MODE_STREAMING);
|
||||
if (!asset) {
|
||||
vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1);
|
||||
}
|
||||
size_t size = AAsset_getLength(asset);
|
||||
assert(size > 0);
|
||||
ktx_uint8_t *textureData = new ktx_uint8_t[size];
|
||||
AAsset_read(asset, textureData, size);
|
||||
AAsset_close(asset);
|
||||
result = ktxTexture_CreateFromMemory(textureData, size, KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target);
|
||||
delete[] textureData;
|
||||
#else
|
||||
if (!vks::tools::fileExists(filename)) {
|
||||
vks::tools::exitFatal("Could not load texture from " + filename + "\n\nThe file may be part of the additional asset pack.\n\nRun \"download_assets.py\" in the repository root to download the latest version.", -1);
|
||||
}
|
||||
result = ktxTexture_CreateFromNamedFile(filename.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, target);
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a 2D texture including all mip levels
|
||||
*
|
||||
* @param filename File to load (supports .ktx)
|
||||
* @param format Vulkan format of the image data stored in the file
|
||||
* @param device Vulkan device to create the texture on
|
||||
* @param copyQueue Queue used for the texture staging copy commands (must support transfer)
|
||||
* @param (Optional) imageUsageFlags Usage flags for the texture's image (defaults to VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||
* @param (Optional) imageLayout Usage layout for the texture (defaults VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
|
||||
* @param (Optional) forceLinear Force linear tiling (not advised, defaults to false)
|
||||
*
|
||||
*/
|
||||
void Texture2D::loadFromFile(std::string filename, VkFormat format, vks::VulkanDevice *device, VkQueue copyQueue, VkImageUsageFlags imageUsageFlags, VkImageLayout imageLayout, bool forceLinear)
|
||||
{
|
||||
ktxTexture* ktxTexture;
|
||||
ktxResult result = loadKTXFile(filename, &ktxTexture);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
this->device = device;
|
||||
width = ktxTexture->baseWidth;
|
||||
height = ktxTexture->baseHeight;
|
||||
mipLevels = ktxTexture->numLevels;
|
||||
|
||||
ktx_uint8_t *ktxTextureData = ktxTexture_GetData(ktxTexture);
|
||||
ktx_size_t ktxTextureSize = ktxTexture_GetSize(ktxTexture);
|
||||
|
||||
// Get device properties for the requested texture format
|
||||
VkFormatProperties formatProperties;
|
||||
vkGetPhysicalDeviceFormatProperties(device->physicalDevice, format, &formatProperties);
|
||||
|
||||
// Only use linear tiling if requested (and supported by the device)
|
||||
// Support for linear tiling is mostly limited, so prefer to use
|
||||
// optimal tiling instead
|
||||
// On most implementations linear tiling will only support a very
|
||||
// limited amount of formats and features (mip maps, cubemaps, arrays, etc.)
|
||||
VkBool32 useStaging = !forceLinear;
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vks::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
// Use a separate command buffer for texture loading
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
if (useStaging)
|
||||
{
|
||||
// Create a host-visible staging buffer that contains the raw image data
|
||||
VkBuffer stagingBuffer;
|
||||
VkDeviceMemory stagingMemory;
|
||||
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo();
|
||||
bufferCreateInfo.size = ktxTextureSize;
|
||||
// This buffer is used as a transfer source for the buffer copy
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateBuffer(device->logicalDevice, &bufferCreateInfo, nullptr, &stagingBuffer));
|
||||
|
||||
// Get memory requirements for the staging buffer (alignment, memory type bits)
|
||||
vkGetBufferMemoryRequirements(device->logicalDevice, stagingBuffer, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
// Get memory type index for a host visible buffer
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &stagingMemory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(device->logicalDevice, stagingBuffer, stagingMemory, 0));
|
||||
|
||||
// Copy texture data into staging buffer
|
||||
uint8_t *data;
|
||||
VK_CHECK_RESULT(vkMapMemory(device->logicalDevice, stagingMemory, 0, memReqs.size, 0, (void **)&data));
|
||||
memcpy(data, ktxTextureData, ktxTextureSize);
|
||||
vkUnmapMemory(device->logicalDevice, stagingMemory);
|
||||
|
||||
// Setup buffer copy regions for each mip level
|
||||
std::vector<VkBufferImageCopy> bufferCopyRegions;
|
||||
|
||||
for (uint32_t i = 0; i < mipLevels; i++)
|
||||
{
|
||||
ktx_size_t offset;
|
||||
KTX_error_code result = ktxTexture_GetImageOffset(ktxTexture, i, 0, 0, &offset);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
VkBufferImageCopy bufferCopyRegion = {};
|
||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
bufferCopyRegion.imageSubresource.mipLevel = i;
|
||||
bufferCopyRegion.imageSubresource.baseArrayLayer = 0;
|
||||
bufferCopyRegion.imageSubresource.layerCount = 1;
|
||||
bufferCopyRegion.imageExtent.width = std::max(1u, ktxTexture->baseWidth >> i);
|
||||
bufferCopyRegion.imageExtent.height = std::max(1u, ktxTexture->baseHeight >> i);
|
||||
bufferCopyRegion.imageExtent.depth = 1;
|
||||
bufferCopyRegion.bufferOffset = offset;
|
||||
|
||||
bufferCopyRegions.push_back(bufferCopyRegion);
|
||||
}
|
||||
|
||||
// Create optimal tiled target image
|
||||
VkImageCreateInfo imageCreateInfo = vks::initializers::imageCreateInfo();
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.mipLevels = mipLevels;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
imageCreateInfo.extent = { width, height, 1 };
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
// Ensure that the TRANSFER_DST bit is set for staging
|
||||
if (!(imageCreateInfo.usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT))
|
||||
{
|
||||
imageCreateInfo.usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
}
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageCreateInfo, nullptr, &image));
|
||||
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, image, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &deviceMemory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, image, deviceMemory, 0));
|
||||
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = mipLevels;
|
||||
subresourceRange.layerCount = 1;
|
||||
|
||||
// Image barrier for optimal image (target)
|
||||
// Optimal image will be used as destination for the copy
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
subresourceRange);
|
||||
|
||||
// Copy mip levels from staging buffer
|
||||
vkCmdCopyBufferToImage(
|
||||
copyCmd,
|
||||
stagingBuffer,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
static_cast<uint32_t>(bufferCopyRegions.size()),
|
||||
bufferCopyRegions.data()
|
||||
);
|
||||
|
||||
// Change texture image layout to shader read after all mip levels have been copied
|
||||
this->imageLayout = imageLayout;
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
imageLayout,
|
||||
subresourceRange);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||
|
||||
// Clean up staging resources
|
||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Prefer using optimal tiling, as linear tiling
|
||||
// may support only a small set of features
|
||||
// depending on implementation (e.g. no mip maps, only one layer, etc.)
|
||||
|
||||
// Check if this support is supported for linear tiling
|
||||
assert(formatProperties.linearTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT);
|
||||
|
||||
VkImage mappableImage;
|
||||
VkDeviceMemory mappableMemory;
|
||||
|
||||
VkImageCreateInfo imageCreateInfo = vks::initializers::imageCreateInfo();
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.extent = { width, height, 1 };
|
||||
imageCreateInfo.mipLevels = 1;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_LINEAR;
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
|
||||
// Load mip map level 0 to linear tiling image
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageCreateInfo, nullptr, &mappableImage));
|
||||
|
||||
// Get memory requirements for this image
|
||||
// like size and alignment
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, mappableImage, &memReqs);
|
||||
// Set memory allocation size to required memory size
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
|
||||
// Get memory type that can be mapped to host memory
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
|
||||
// Allocate host memory
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &mappableMemory));
|
||||
|
||||
// Bind allocated image for use
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, mappableImage, mappableMemory, 0));
|
||||
|
||||
// Get sub resource layout
|
||||
// Mip map count, array layer, etc.
|
||||
VkImageSubresource subRes = {};
|
||||
subRes.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subRes.mipLevel = 0;
|
||||
|
||||
VkSubresourceLayout subResLayout;
|
||||
void *data;
|
||||
|
||||
// Get sub resources layout
|
||||
// Includes row pitch, size offsets, etc.
|
||||
vkGetImageSubresourceLayout(device->logicalDevice, mappableImage, &subRes, &subResLayout);
|
||||
|
||||
// Map image memory
|
||||
VK_CHECK_RESULT(vkMapMemory(device->logicalDevice, mappableMemory, 0, memReqs.size, 0, &data));
|
||||
|
||||
// Copy image data into memory
|
||||
memcpy(data, ktxTextureData, memReqs.size);
|
||||
|
||||
vkUnmapMemory(device->logicalDevice, mappableMemory);
|
||||
|
||||
// Linear tiled images don't need to be staged
|
||||
// and can be directly used as textures
|
||||
image = mappableImage;
|
||||
deviceMemory = mappableMemory;
|
||||
this->imageLayout = imageLayout;
|
||||
|
||||
// Setup image memory barrier
|
||||
vks::tools::setImageLayout(copyCmd, image, VK_IMAGE_ASPECT_COLOR_BIT, VK_IMAGE_LAYOUT_UNDEFINED, imageLayout);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||
}
|
||||
|
||||
ktxTexture_Destroy(ktxTexture);
|
||||
|
||||
// Create a default sampler
|
||||
VkSamplerCreateInfo samplerCreateInfo = {};
|
||||
samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.minFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerCreateInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.mipLodBias = 0.0f;
|
||||
samplerCreateInfo.compareOp = VK_COMPARE_OP_NEVER;
|
||||
samplerCreateInfo.minLod = 0.0f;
|
||||
// Max level-of-detail should match mip level count
|
||||
samplerCreateInfo.maxLod = (useStaging) ? (float)mipLevels : 0.0f;
|
||||
// Only enable anisotropic filtering if enabled on the device
|
||||
samplerCreateInfo.maxAnisotropy = device->enabledFeatures.samplerAnisotropy ? device->properties.limits.maxSamplerAnisotropy : 1.0f;
|
||||
samplerCreateInfo.anisotropyEnable = device->enabledFeatures.samplerAnisotropy;
|
||||
samplerCreateInfo.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
|
||||
VK_CHECK_RESULT(vkCreateSampler(device->logicalDevice, &samplerCreateInfo, nullptr, &sampler));
|
||||
|
||||
// Create image view
|
||||
// Textures are not directly accessed by the shaders and
|
||||
// are abstracted by image views containing additional
|
||||
// information and sub resource ranges
|
||||
VkImageViewCreateInfo viewCreateInfo = {};
|
||||
viewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
viewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
viewCreateInfo.format = format;
|
||||
viewCreateInfo.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
|
||||
// Linear tiling usually won't support mip maps
|
||||
// Only set mip map count if optimal tiling is used
|
||||
viewCreateInfo.subresourceRange.levelCount = (useStaging) ? mipLevels : 1;
|
||||
viewCreateInfo.image = image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(device->logicalDevice, &viewCreateInfo, nullptr, &view));
|
||||
|
||||
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||
updateDescriptor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a 2D texture from a buffer
|
||||
*
|
||||
* @param buffer Buffer containing texture data to upload
|
||||
* @param bufferSize Size of the buffer in machine units
|
||||
* @param width Width of the texture to create
|
||||
* @param height Height of the texture to create
|
||||
* @param format Vulkan format of the image data stored in the file
|
||||
* @param device Vulkan device to create the texture on
|
||||
* @param copyQueue Queue used for the texture staging copy commands (must support transfer)
|
||||
* @param (Optional) filter Texture filtering for the sampler (defaults to VK_FILTER_LINEAR)
|
||||
* @param (Optional) imageUsageFlags Usage flags for the texture's image (defaults to VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||
* @param (Optional) imageLayout Usage layout for the texture (defaults VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
|
||||
*/
|
||||
void Texture2D::fromBuffer(void* buffer, VkDeviceSize bufferSize, VkFormat format, uint32_t texWidth, uint32_t texHeight, vks::VulkanDevice *device, VkQueue copyQueue, VkFilter filter, VkImageUsageFlags imageUsageFlags, VkImageLayout imageLayout)
|
||||
{
|
||||
assert(buffer);
|
||||
|
||||
this->device = device;
|
||||
width = texWidth;
|
||||
height = texHeight;
|
||||
mipLevels = 1;
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vks::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
// Use a separate command buffer for texture loading
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
// Create a host-visible staging buffer that contains the raw image data
|
||||
VkBuffer stagingBuffer;
|
||||
VkDeviceMemory stagingMemory;
|
||||
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo();
|
||||
bufferCreateInfo.size = bufferSize;
|
||||
// This buffer is used as a transfer source for the buffer copy
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateBuffer(device->logicalDevice, &bufferCreateInfo, nullptr, &stagingBuffer));
|
||||
|
||||
// Get memory requirements for the staging buffer (alignment, memory type bits)
|
||||
vkGetBufferMemoryRequirements(device->logicalDevice, stagingBuffer, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
// Get memory type index for a host visible buffer
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &stagingMemory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(device->logicalDevice, stagingBuffer, stagingMemory, 0));
|
||||
|
||||
// Copy texture data into staging buffer
|
||||
uint8_t *data;
|
||||
VK_CHECK_RESULT(vkMapMemory(device->logicalDevice, stagingMemory, 0, memReqs.size, 0, (void **)&data));
|
||||
memcpy(data, buffer, bufferSize);
|
||||
vkUnmapMemory(device->logicalDevice, stagingMemory);
|
||||
|
||||
VkBufferImageCopy bufferCopyRegion = {};
|
||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
bufferCopyRegion.imageSubresource.mipLevel = 0;
|
||||
bufferCopyRegion.imageSubresource.baseArrayLayer = 0;
|
||||
bufferCopyRegion.imageSubresource.layerCount = 1;
|
||||
bufferCopyRegion.imageExtent.width = width;
|
||||
bufferCopyRegion.imageExtent.height = height;
|
||||
bufferCopyRegion.imageExtent.depth = 1;
|
||||
bufferCopyRegion.bufferOffset = 0;
|
||||
|
||||
// Create optimal tiled target image
|
||||
VkImageCreateInfo imageCreateInfo = vks::initializers::imageCreateInfo();
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.mipLevels = mipLevels;
|
||||
imageCreateInfo.arrayLayers = 1;
|
||||
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
imageCreateInfo.extent = { width, height, 1 };
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
// Ensure that the TRANSFER_DST bit is set for staging
|
||||
if (!(imageCreateInfo.usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT))
|
||||
{
|
||||
imageCreateInfo.usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
}
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageCreateInfo, nullptr, &image));
|
||||
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, image, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &deviceMemory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, image, deviceMemory, 0));
|
||||
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = mipLevels;
|
||||
subresourceRange.layerCount = 1;
|
||||
|
||||
// Image barrier for optimal image (target)
|
||||
// Optimal image will be used as destination for the copy
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
subresourceRange);
|
||||
|
||||
// Copy mip levels from staging buffer
|
||||
vkCmdCopyBufferToImage(
|
||||
copyCmd,
|
||||
stagingBuffer,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
1,
|
||||
&bufferCopyRegion
|
||||
);
|
||||
|
||||
// Change texture image layout to shader read after all mip levels have been copied
|
||||
this->imageLayout = imageLayout;
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
imageLayout,
|
||||
subresourceRange);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||
|
||||
// Clean up staging resources
|
||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||
|
||||
// Create sampler
|
||||
VkSamplerCreateInfo samplerCreateInfo = {};
|
||||
samplerCreateInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
samplerCreateInfo.magFilter = filter;
|
||||
samplerCreateInfo.minFilter = filter;
|
||||
samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerCreateInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
|
||||
samplerCreateInfo.mipLodBias = 0.0f;
|
||||
samplerCreateInfo.compareOp = VK_COMPARE_OP_NEVER;
|
||||
samplerCreateInfo.minLod = 0.0f;
|
||||
samplerCreateInfo.maxLod = 0.0f;
|
||||
samplerCreateInfo.maxAnisotropy = 1.0f;
|
||||
VK_CHECK_RESULT(vkCreateSampler(device->logicalDevice, &samplerCreateInfo, nullptr, &sampler));
|
||||
|
||||
// Create image view
|
||||
VkImageViewCreateInfo viewCreateInfo = {};
|
||||
viewCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
viewCreateInfo.pNext = NULL;
|
||||
viewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
viewCreateInfo.format = format;
|
||||
viewCreateInfo.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
|
||||
viewCreateInfo.subresourceRange.levelCount = 1;
|
||||
viewCreateInfo.image = image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(device->logicalDevice, &viewCreateInfo, nullptr, &view));
|
||||
|
||||
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||
updateDescriptor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a 2D texture array including all mip levels
|
||||
*
|
||||
* @param filename File to load (supports .ktx)
|
||||
* @param format Vulkan format of the image data stored in the file
|
||||
* @param device Vulkan device to create the texture on
|
||||
* @param copyQueue Queue used for the texture staging copy commands (must support transfer)
|
||||
* @param (Optional) imageUsageFlags Usage flags for the texture's image (defaults to VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||
* @param (Optional) imageLayout Usage layout for the texture (defaults VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
|
||||
*
|
||||
*/
|
||||
void Texture2DArray::loadFromFile(std::string filename, VkFormat format, vks::VulkanDevice *device, VkQueue copyQueue, VkImageUsageFlags imageUsageFlags, VkImageLayout imageLayout)
|
||||
{
|
||||
ktxTexture* ktxTexture;
|
||||
ktxResult result = loadKTXFile(filename, &ktxTexture);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
this->device = device;
|
||||
width = ktxTexture->baseWidth;
|
||||
height = ktxTexture->baseHeight;
|
||||
layerCount = ktxTexture->numLayers;
|
||||
mipLevels = ktxTexture->numLevels;
|
||||
|
||||
ktx_uint8_t *ktxTextureData = ktxTexture_GetData(ktxTexture);
|
||||
ktx_size_t ktxTextureSize = ktxTexture_GetSize(ktxTexture);
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vks::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
// Create a host-visible staging buffer that contains the raw image data
|
||||
VkBuffer stagingBuffer;
|
||||
VkDeviceMemory stagingMemory;
|
||||
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo();
|
||||
bufferCreateInfo.size = ktxTextureSize;
|
||||
// This buffer is used as a transfer source for the buffer copy
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateBuffer(device->logicalDevice, &bufferCreateInfo, nullptr, &stagingBuffer));
|
||||
|
||||
// Get memory requirements for the staging buffer (alignment, memory type bits)
|
||||
vkGetBufferMemoryRequirements(device->logicalDevice, stagingBuffer, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
// Get memory type index for a host visible buffer
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &stagingMemory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(device->logicalDevice, stagingBuffer, stagingMemory, 0));
|
||||
|
||||
// Copy texture data into staging buffer
|
||||
uint8_t *data;
|
||||
VK_CHECK_RESULT(vkMapMemory(device->logicalDevice, stagingMemory, 0, memReqs.size, 0, (void **)&data));
|
||||
memcpy(data, ktxTextureData, ktxTextureSize);
|
||||
vkUnmapMemory(device->logicalDevice, stagingMemory);
|
||||
|
||||
// Setup buffer copy regions for each layer including all of its miplevels
|
||||
std::vector<VkBufferImageCopy> bufferCopyRegions;
|
||||
|
||||
for (uint32_t layer = 0; layer < layerCount; layer++)
|
||||
{
|
||||
for (uint32_t level = 0; level < mipLevels; level++)
|
||||
{
|
||||
ktx_size_t offset;
|
||||
KTX_error_code result = ktxTexture_GetImageOffset(ktxTexture, level, layer, 0, &offset);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
VkBufferImageCopy bufferCopyRegion = {};
|
||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
bufferCopyRegion.imageSubresource.mipLevel = level;
|
||||
bufferCopyRegion.imageSubresource.baseArrayLayer = layer;
|
||||
bufferCopyRegion.imageSubresource.layerCount = 1;
|
||||
bufferCopyRegion.imageExtent.width = ktxTexture->baseWidth >> level;
|
||||
bufferCopyRegion.imageExtent.height = ktxTexture->baseHeight >> level;
|
||||
bufferCopyRegion.imageExtent.depth = 1;
|
||||
bufferCopyRegion.bufferOffset = offset;
|
||||
|
||||
bufferCopyRegions.push_back(bufferCopyRegion);
|
||||
}
|
||||
}
|
||||
|
||||
// Create optimal tiled target image
|
||||
VkImageCreateInfo imageCreateInfo = vks::initializers::imageCreateInfo();
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
imageCreateInfo.extent = { width, height, 1 };
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
// Ensure that the TRANSFER_DST bit is set for staging
|
||||
if (!(imageCreateInfo.usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT))
|
||||
{
|
||||
imageCreateInfo.usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
}
|
||||
imageCreateInfo.arrayLayers = layerCount;
|
||||
imageCreateInfo.mipLevels = mipLevels;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageCreateInfo, nullptr, &image));
|
||||
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, image, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &deviceMemory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, image, deviceMemory, 0));
|
||||
|
||||
// Use a separate command buffer for texture loading
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
// Image barrier for optimal image (target)
|
||||
// Set initial layout for all array layers (faces) of the optimal (target) tiled texture
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = mipLevels;
|
||||
subresourceRange.layerCount = layerCount;
|
||||
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
subresourceRange);
|
||||
|
||||
// Copy the layers and mip levels from the staging buffer to the optimal tiled image
|
||||
vkCmdCopyBufferToImage(
|
||||
copyCmd,
|
||||
stagingBuffer,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
static_cast<uint32_t>(bufferCopyRegions.size()),
|
||||
bufferCopyRegions.data());
|
||||
|
||||
// Change texture image layout to shader read after all faces have been copied
|
||||
this->imageLayout = imageLayout;
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
imageLayout,
|
||||
subresourceRange);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||
|
||||
// Create sampler
|
||||
VkSamplerCreateInfo samplerCreateInfo = vks::initializers::samplerCreateInfo();
|
||||
samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.minFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerCreateInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samplerCreateInfo.addressModeV = samplerCreateInfo.addressModeU;
|
||||
samplerCreateInfo.addressModeW = samplerCreateInfo.addressModeU;
|
||||
samplerCreateInfo.mipLodBias = 0.0f;
|
||||
samplerCreateInfo.maxAnisotropy = device->enabledFeatures.samplerAnisotropy ? device->properties.limits.maxSamplerAnisotropy : 1.0f;
|
||||
samplerCreateInfo.anisotropyEnable = device->enabledFeatures.samplerAnisotropy;
|
||||
samplerCreateInfo.compareOp = VK_COMPARE_OP_NEVER;
|
||||
samplerCreateInfo.minLod = 0.0f;
|
||||
samplerCreateInfo.maxLod = (float)mipLevels;
|
||||
samplerCreateInfo.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
|
||||
VK_CHECK_RESULT(vkCreateSampler(device->logicalDevice, &samplerCreateInfo, nullptr, &sampler));
|
||||
|
||||
// Create image view
|
||||
VkImageViewCreateInfo viewCreateInfo = vks::initializers::imageViewCreateInfo();
|
||||
viewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY;
|
||||
viewCreateInfo.format = format;
|
||||
viewCreateInfo.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
|
||||
viewCreateInfo.subresourceRange.layerCount = layerCount;
|
||||
viewCreateInfo.subresourceRange.levelCount = mipLevels;
|
||||
viewCreateInfo.image = image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(device->logicalDevice, &viewCreateInfo, nullptr, &view));
|
||||
|
||||
// Clean up staging resources
|
||||
ktxTexture_Destroy(ktxTexture);
|
||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||
|
||||
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||
updateDescriptor();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load a cubemap texture including all mip levels from a single file
|
||||
*
|
||||
* @param filename File to load (supports .ktx)
|
||||
* @param format Vulkan format of the image data stored in the file
|
||||
* @param device Vulkan device to create the texture on
|
||||
* @param copyQueue Queue used for the texture staging copy commands (must support transfer)
|
||||
* @param (Optional) imageUsageFlags Usage flags for the texture's image (defaults to VK_IMAGE_USAGE_SAMPLED_BIT)
|
||||
* @param (Optional) imageLayout Usage layout for the texture (defaults VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
|
||||
*
|
||||
*/
|
||||
void TextureCubeMap::loadFromFile(std::string filename, VkFormat format, vks::VulkanDevice *device, VkQueue copyQueue, VkImageUsageFlags imageUsageFlags, VkImageLayout imageLayout)
|
||||
{
|
||||
ktxTexture* ktxTexture;
|
||||
ktxResult result = loadKTXFile(filename, &ktxTexture);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
this->device = device;
|
||||
width = ktxTexture->baseWidth;
|
||||
height = ktxTexture->baseHeight;
|
||||
mipLevels = ktxTexture->numLevels;
|
||||
|
||||
ktx_uint8_t *ktxTextureData = ktxTexture_GetData(ktxTexture);
|
||||
ktx_size_t ktxTextureSize = ktxTexture_GetSize(ktxTexture);
|
||||
|
||||
VkMemoryAllocateInfo memAllocInfo = vks::initializers::memoryAllocateInfo();
|
||||
VkMemoryRequirements memReqs;
|
||||
|
||||
// Create a host-visible staging buffer that contains the raw image data
|
||||
VkBuffer stagingBuffer;
|
||||
VkDeviceMemory stagingMemory;
|
||||
|
||||
VkBufferCreateInfo bufferCreateInfo = vks::initializers::bufferCreateInfo();
|
||||
bufferCreateInfo.size = ktxTextureSize;
|
||||
// This buffer is used as a transfer source for the buffer copy
|
||||
bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateBuffer(device->logicalDevice, &bufferCreateInfo, nullptr, &stagingBuffer));
|
||||
|
||||
// Get memory requirements for the staging buffer (alignment, memory type bits)
|
||||
vkGetBufferMemoryRequirements(device->logicalDevice, stagingBuffer, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
// Get memory type index for a host visible buffer
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &stagingMemory));
|
||||
VK_CHECK_RESULT(vkBindBufferMemory(device->logicalDevice, stagingBuffer, stagingMemory, 0));
|
||||
|
||||
// Copy texture data into staging buffer
|
||||
uint8_t *data;
|
||||
VK_CHECK_RESULT(vkMapMemory(device->logicalDevice, stagingMemory, 0, memReqs.size, 0, (void **)&data));
|
||||
memcpy(data, ktxTextureData, ktxTextureSize);
|
||||
vkUnmapMemory(device->logicalDevice, stagingMemory);
|
||||
|
||||
// Setup buffer copy regions for each face including all of its mip levels
|
||||
std::vector<VkBufferImageCopy> bufferCopyRegions;
|
||||
|
||||
for (uint32_t face = 0; face < 6; face++)
|
||||
{
|
||||
for (uint32_t level = 0; level < mipLevels; level++)
|
||||
{
|
||||
ktx_size_t offset;
|
||||
KTX_error_code result = ktxTexture_GetImageOffset(ktxTexture, level, 0, face, &offset);
|
||||
assert(result == KTX_SUCCESS);
|
||||
|
||||
VkBufferImageCopy bufferCopyRegion = {};
|
||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
bufferCopyRegion.imageSubresource.mipLevel = level;
|
||||
bufferCopyRegion.imageSubresource.baseArrayLayer = face;
|
||||
bufferCopyRegion.imageSubresource.layerCount = 1;
|
||||
bufferCopyRegion.imageExtent.width = ktxTexture->baseWidth >> level;
|
||||
bufferCopyRegion.imageExtent.height = ktxTexture->baseHeight >> level;
|
||||
bufferCopyRegion.imageExtent.depth = 1;
|
||||
bufferCopyRegion.bufferOffset = offset;
|
||||
|
||||
bufferCopyRegions.push_back(bufferCopyRegion);
|
||||
}
|
||||
}
|
||||
|
||||
// Create optimal tiled target image
|
||||
VkImageCreateInfo imageCreateInfo = vks::initializers::imageCreateInfo();
|
||||
imageCreateInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageCreateInfo.format = format;
|
||||
imageCreateInfo.mipLevels = mipLevels;
|
||||
imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
imageCreateInfo.extent = { width, height, 1 };
|
||||
imageCreateInfo.usage = imageUsageFlags;
|
||||
// Ensure that the TRANSFER_DST bit is set for staging
|
||||
if (!(imageCreateInfo.usage & VK_IMAGE_USAGE_TRANSFER_DST_BIT))
|
||||
{
|
||||
imageCreateInfo.usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
}
|
||||
// Cube faces count as array layers in Vulkan
|
||||
imageCreateInfo.arrayLayers = 6;
|
||||
// This flag is required for cube map images
|
||||
imageCreateInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
|
||||
|
||||
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageCreateInfo, nullptr, &image));
|
||||
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, image, &memReqs);
|
||||
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &deviceMemory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, image, deviceMemory, 0));
|
||||
|
||||
// Use a separate command buffer for texture loading
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
// Image barrier for optimal image (target)
|
||||
// Set initial layout for all array layers (faces) of the optimal (target) tiled texture
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = mipLevels;
|
||||
subresourceRange.layerCount = 6;
|
||||
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
subresourceRange);
|
||||
|
||||
// Copy the cube map faces from the staging buffer to the optimal tiled image
|
||||
vkCmdCopyBufferToImage(
|
||||
copyCmd,
|
||||
stagingBuffer,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
static_cast<uint32_t>(bufferCopyRegions.size()),
|
||||
bufferCopyRegions.data());
|
||||
|
||||
// Change texture image layout to shader read after all faces have been copied
|
||||
this->imageLayout = imageLayout;
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
image,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
imageLayout,
|
||||
subresourceRange);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, copyQueue);
|
||||
|
||||
// Create sampler
|
||||
VkSamplerCreateInfo samplerCreateInfo = vks::initializers::samplerCreateInfo();
|
||||
samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.minFilter = VK_FILTER_LINEAR;
|
||||
samplerCreateInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerCreateInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samplerCreateInfo.addressModeV = samplerCreateInfo.addressModeU;
|
||||
samplerCreateInfo.addressModeW = samplerCreateInfo.addressModeU;
|
||||
samplerCreateInfo.mipLodBias = 0.0f;
|
||||
samplerCreateInfo.maxAnisotropy = device->enabledFeatures.samplerAnisotropy ? device->properties.limits.maxSamplerAnisotropy : 1.0f;
|
||||
samplerCreateInfo.anisotropyEnable = device->enabledFeatures.samplerAnisotropy;
|
||||
samplerCreateInfo.compareOp = VK_COMPARE_OP_NEVER;
|
||||
samplerCreateInfo.minLod = 0.0f;
|
||||
samplerCreateInfo.maxLod = (float)mipLevels;
|
||||
samplerCreateInfo.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
|
||||
VK_CHECK_RESULT(vkCreateSampler(device->logicalDevice, &samplerCreateInfo, nullptr, &sampler));
|
||||
|
||||
// Create image view
|
||||
VkImageViewCreateInfo viewCreateInfo = vks::initializers::imageViewCreateInfo();
|
||||
viewCreateInfo.viewType = VK_IMAGE_VIEW_TYPE_CUBE;
|
||||
viewCreateInfo.format = format;
|
||||
viewCreateInfo.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 };
|
||||
viewCreateInfo.subresourceRange.layerCount = 6;
|
||||
viewCreateInfo.subresourceRange.levelCount = mipLevels;
|
||||
viewCreateInfo.image = image;
|
||||
VK_CHECK_RESULT(vkCreateImageView(device->logicalDevice, &viewCreateInfo, nullptr, &view));
|
||||
|
||||
// Clean up staging resources
|
||||
ktxTexture_Destroy(ktxTexture);
|
||||
vkFreeMemory(device->logicalDevice, stagingMemory, nullptr);
|
||||
vkDestroyBuffer(device->logicalDevice, stagingBuffer, nullptr);
|
||||
|
||||
// Update descriptor image info member that can be used for setting up descriptor sets
|
||||
updateDescriptor();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Vulkan texture loader
|
||||
*
|
||||
* Copyright(C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license(MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
#include <ktx.h>
|
||||
#include <ktxvulkan.h>
|
||||
|
||||
#include "VulkanBuffer.h"
|
||||
#include "VulkanDevice.h"
|
||||
#include "VulkanTools.h"
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
# include <android/asset_manager.h>
|
||||
#endif
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class Texture
|
||||
{
|
||||
public:
|
||||
vks::VulkanDevice * device;
|
||||
VkImage image;
|
||||
VkImageLayout imageLayout;
|
||||
VkDeviceMemory deviceMemory;
|
||||
VkImageView view;
|
||||
uint32_t width, height;
|
||||
uint32_t mipLevels;
|
||||
uint32_t layerCount;
|
||||
VkDescriptorImageInfo descriptor;
|
||||
VkSampler sampler;
|
||||
|
||||
void updateDescriptor();
|
||||
void destroy();
|
||||
ktxResult loadKTXFile(std::string filename, ktxTexture **target);
|
||||
};
|
||||
|
||||
class Texture2D : public Texture
|
||||
{
|
||||
public:
|
||||
void loadFromFile(
|
||||
std::string filename,
|
||||
VkFormat format,
|
||||
vks::VulkanDevice *device,
|
||||
VkQueue copyQueue,
|
||||
VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
bool forceLinear = false);
|
||||
void fromBuffer(
|
||||
void * buffer,
|
||||
VkDeviceSize bufferSize,
|
||||
VkFormat format,
|
||||
uint32_t texWidth,
|
||||
uint32_t texHeight,
|
||||
vks::VulkanDevice *device,
|
||||
VkQueue copyQueue,
|
||||
VkFilter filter = VK_FILTER_LINEAR,
|
||||
VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
};
|
||||
|
||||
class Texture2DArray : public Texture
|
||||
{
|
||||
public:
|
||||
void loadFromFile(
|
||||
std::string filename,
|
||||
VkFormat format,
|
||||
vks::VulkanDevice *device,
|
||||
VkQueue copyQueue,
|
||||
VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
};
|
||||
|
||||
class TextureCubeMap : public Texture
|
||||
{
|
||||
public:
|
||||
void loadFromFile(
|
||||
std::string filename,
|
||||
VkFormat format,
|
||||
vks::VulkanDevice *device,
|
||||
VkQueue copyQueue,
|
||||
VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT,
|
||||
VkImageLayout imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
||||
};
|
||||
} // namespace vks
|
||||
|
|
@ -0,0 +1,403 @@
|
|||
/*
|
||||
* Assorted commonly used Vulkan helper functions
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanTools.h"
|
||||
|
||||
#if !(defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
// iOS & macOS: VulkanExampleBase::getAssetPath() implemented externally to allow access to Objective-C components
|
||||
const std::string getAssetPath()
|
||||
{
|
||||
#if defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
return "";
|
||||
#elif defined(VK_EXAMPLE_DATA_DIR)
|
||||
return VK_EXAMPLE_DATA_DIR;
|
||||
#else
|
||||
return "./../data/";
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace tools
|
||||
{
|
||||
bool errorModeSilent = false;
|
||||
|
||||
std::string errorString(VkResult errorCode)
|
||||
{
|
||||
switch (errorCode)
|
||||
{
|
||||
#define STR(r) case VK_ ##r: return #r
|
||||
STR(NOT_READY);
|
||||
STR(TIMEOUT);
|
||||
STR(EVENT_SET);
|
||||
STR(EVENT_RESET);
|
||||
STR(INCOMPLETE);
|
||||
STR(ERROR_OUT_OF_HOST_MEMORY);
|
||||
STR(ERROR_OUT_OF_DEVICE_MEMORY);
|
||||
STR(ERROR_INITIALIZATION_FAILED);
|
||||
STR(ERROR_DEVICE_LOST);
|
||||
STR(ERROR_MEMORY_MAP_FAILED);
|
||||
STR(ERROR_LAYER_NOT_PRESENT);
|
||||
STR(ERROR_EXTENSION_NOT_PRESENT);
|
||||
STR(ERROR_FEATURE_NOT_PRESENT);
|
||||
STR(ERROR_INCOMPATIBLE_DRIVER);
|
||||
STR(ERROR_TOO_MANY_OBJECTS);
|
||||
STR(ERROR_FORMAT_NOT_SUPPORTED);
|
||||
STR(ERROR_SURFACE_LOST_KHR);
|
||||
STR(ERROR_NATIVE_WINDOW_IN_USE_KHR);
|
||||
STR(SUBOPTIMAL_KHR);
|
||||
STR(ERROR_OUT_OF_DATE_KHR);
|
||||
STR(ERROR_INCOMPATIBLE_DISPLAY_KHR);
|
||||
STR(ERROR_VALIDATION_FAILED_EXT);
|
||||
STR(ERROR_INVALID_SHADER_NV);
|
||||
#undef STR
|
||||
default:
|
||||
return "UNKNOWN_ERROR";
|
||||
}
|
||||
}
|
||||
|
||||
std::string physicalDeviceTypeString(VkPhysicalDeviceType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
#define STR(r) case VK_PHYSICAL_DEVICE_TYPE_ ##r: return #r
|
||||
STR(OTHER);
|
||||
STR(INTEGRATED_GPU);
|
||||
STR(DISCRETE_GPU);
|
||||
STR(VIRTUAL_GPU);
|
||||
STR(CPU);
|
||||
#undef STR
|
||||
default: return "UNKNOWN_DEVICE_TYPE";
|
||||
}
|
||||
}
|
||||
|
||||
VkBool32 getSupportedDepthFormat(VkPhysicalDevice physicalDevice, VkFormat *depthFormat)
|
||||
{
|
||||
// Since all depth formats may be optional, we need to find a suitable depth format to use
|
||||
// Start with the highest precision packed format
|
||||
std::vector<VkFormat> depthFormats = {
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM
|
||||
};
|
||||
|
||||
for (auto& format : depthFormats)
|
||||
{
|
||||
VkFormatProperties formatProps;
|
||||
vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &formatProps);
|
||||
// Format must support depth stencil attachment for optimal tiling
|
||||
if (formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
|
||||
{
|
||||
*depthFormat = format;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
VkBool32 formatHasStencil(VkFormat format)
|
||||
{
|
||||
std::vector<VkFormat> stencilFormats = {
|
||||
VK_FORMAT_S8_UINT,
|
||||
VK_FORMAT_D16_UNORM_S8_UINT,
|
||||
VK_FORMAT_D24_UNORM_S8_UINT,
|
||||
VK_FORMAT_D32_SFLOAT_S8_UINT,
|
||||
};
|
||||
return std::find(stencilFormats.begin(), stencilFormats.end(), format) != std::end(stencilFormats);
|
||||
}
|
||||
|
||||
// Returns if a given format support LINEAR filtering
|
||||
VkBool32 formatIsFilterable(VkPhysicalDevice physicalDevice, VkFormat format, VkImageTiling tiling)
|
||||
{
|
||||
VkFormatProperties formatProps;
|
||||
vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &formatProps);
|
||||
|
||||
if (tiling == VK_IMAGE_TILING_OPTIMAL)
|
||||
return formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
|
||||
if (tiling == VK_IMAGE_TILING_LINEAR)
|
||||
return formatProps.linearTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create an image memory barrier for changing the layout of
|
||||
// an image and put it into an active command buffer
|
||||
// See chapter 11.4 "Image Layout" for details
|
||||
|
||||
void setImageLayout(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkImageSubresourceRange subresourceRange,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask)
|
||||
{
|
||||
// Create an image barrier object
|
||||
VkImageMemoryBarrier imageMemoryBarrier = vks::initializers::imageMemoryBarrier();
|
||||
imageMemoryBarrier.oldLayout = oldImageLayout;
|
||||
imageMemoryBarrier.newLayout = newImageLayout;
|
||||
imageMemoryBarrier.image = image;
|
||||
imageMemoryBarrier.subresourceRange = subresourceRange;
|
||||
|
||||
// Source layouts (old)
|
||||
// Source access mask controls actions that have to be finished on the old layout
|
||||
// before it will be transitioned to the new layout
|
||||
switch (oldImageLayout)
|
||||
{
|
||||
case VK_IMAGE_LAYOUT_UNDEFINED:
|
||||
// Image layout is undefined (or does not matter)
|
||||
// Only valid as initial layout
|
||||
// No flags required, listed only for completeness
|
||||
imageMemoryBarrier.srcAccessMask = 0;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_PREINITIALIZED:
|
||||
// Image is preinitialized
|
||||
// Only valid as initial layout for linear images, preserves memory contents
|
||||
// Make sure host writes have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
|
||||
// Image is a color attachment
|
||||
// Make sure any writes to the color buffer have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
|
||||
// Image is a depth/stencil attachment
|
||||
// Make sure any writes to the depth/stencil buffer have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
|
||||
// Image is a transfer source
|
||||
// Make sure any reads from the image have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
|
||||
// Image is a transfer destination
|
||||
// Make sure any writes to the image have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
|
||||
// Image is read by a shader
|
||||
// Make sure any shader reads from the image have been finished
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
||||
break;
|
||||
default:
|
||||
// Other source layouts aren't handled (yet)
|
||||
break;
|
||||
}
|
||||
|
||||
// Target layouts (new)
|
||||
// Destination access mask controls the dependency for the new image layout
|
||||
switch (newImageLayout)
|
||||
{
|
||||
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
|
||||
// Image will be used as a transfer destination
|
||||
// Make sure any writes to the image have been finished
|
||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
|
||||
// Image will be used as a transfer source
|
||||
// Make sure any reads from the image have been finished
|
||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
|
||||
// Image will be used as a color attachment
|
||||
// Make sure any writes to the color buffer have been finished
|
||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
|
||||
// Image layout will be used as a depth/stencil attachment
|
||||
// Make sure any writes to depth/stencil buffer have been finished
|
||||
imageMemoryBarrier.dstAccessMask = imageMemoryBarrier.dstAccessMask | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
|
||||
break;
|
||||
|
||||
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
|
||||
// Image will be read in a shader (sampler, input attachment)
|
||||
// Make sure any writes to the image have been finished
|
||||
if (imageMemoryBarrier.srcAccessMask == 0)
|
||||
{
|
||||
imageMemoryBarrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;
|
||||
}
|
||||
imageMemoryBarrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
|
||||
break;
|
||||
default:
|
||||
// Other source layouts aren't handled (yet)
|
||||
break;
|
||||
}
|
||||
|
||||
// Put barrier inside setup command buffer
|
||||
vkCmdPipelineBarrier(
|
||||
cmdbuffer,
|
||||
srcStageMask,
|
||||
dstStageMask,
|
||||
0,
|
||||
0, nullptr,
|
||||
0, nullptr,
|
||||
1, &imageMemoryBarrier);
|
||||
}
|
||||
|
||||
// Fixed sub resource on first mip level and layer
|
||||
void setImageLayout(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask)
|
||||
{
|
||||
VkImageSubresourceRange subresourceRange = {};
|
||||
subresourceRange.aspectMask = aspectMask;
|
||||
subresourceRange.baseMipLevel = 0;
|
||||
subresourceRange.levelCount = 1;
|
||||
subresourceRange.layerCount = 1;
|
||||
setImageLayout(cmdbuffer, image, oldImageLayout, newImageLayout, subresourceRange, srcStageMask, dstStageMask);
|
||||
}
|
||||
|
||||
void insertImageMemoryBarrier(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkAccessFlags srcAccessMask,
|
||||
VkAccessFlags dstAccessMask,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkImageSubresourceRange subresourceRange)
|
||||
{
|
||||
VkImageMemoryBarrier imageMemoryBarrier = vks::initializers::imageMemoryBarrier();
|
||||
imageMemoryBarrier.srcAccessMask = srcAccessMask;
|
||||
imageMemoryBarrier.dstAccessMask = dstAccessMask;
|
||||
imageMemoryBarrier.oldLayout = oldImageLayout;
|
||||
imageMemoryBarrier.newLayout = newImageLayout;
|
||||
imageMemoryBarrier.image = image;
|
||||
imageMemoryBarrier.subresourceRange = subresourceRange;
|
||||
|
||||
vkCmdPipelineBarrier(
|
||||
cmdbuffer,
|
||||
srcStageMask,
|
||||
dstStageMask,
|
||||
0,
|
||||
0, nullptr,
|
||||
0, nullptr,
|
||||
1, &imageMemoryBarrier);
|
||||
}
|
||||
|
||||
void exitFatal(const std::string& message, int32_t exitCode)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
if (!errorModeSilent) {
|
||||
MessageBox(NULL, message.c_str(), NULL, MB_OK | MB_ICONERROR);
|
||||
}
|
||||
#elif defined(__ANDROID__)
|
||||
LOGE("Fatal error: %s", message.c_str());
|
||||
vks::android::showAlert(message.c_str());
|
||||
#endif
|
||||
std::cerr << message << "\n";
|
||||
#if !defined(__ANDROID__)
|
||||
exit(exitCode);
|
||||
#endif
|
||||
}
|
||||
|
||||
void exitFatal(const std::string& message, VkResult resultCode)
|
||||
{
|
||||
exitFatal(message, (int32_t)resultCode);
|
||||
}
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
// Android shaders are stored as assets in the apk
|
||||
// So they need to be loaded via the asset manager
|
||||
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device)
|
||||
{
|
||||
// Load shader from compressed asset
|
||||
AAsset* asset = AAssetManager_open(assetManager, fileName, AASSET_MODE_STREAMING);
|
||||
assert(asset);
|
||||
size_t size = AAsset_getLength(asset);
|
||||
assert(size > 0);
|
||||
|
||||
char *shaderCode = new char[size];
|
||||
AAsset_read(asset, shaderCode, size);
|
||||
AAsset_close(asset);
|
||||
|
||||
VkShaderModule shaderModule;
|
||||
VkShaderModuleCreateInfo moduleCreateInfo;
|
||||
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||
moduleCreateInfo.pNext = NULL;
|
||||
moduleCreateInfo.codeSize = size;
|
||||
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
|
||||
moduleCreateInfo.flags = 0;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
|
||||
|
||||
delete[] shaderCode;
|
||||
|
||||
return shaderModule;
|
||||
}
|
||||
#else
|
||||
VkShaderModule loadShader(const char *fileName, VkDevice device)
|
||||
{
|
||||
std::ifstream is(fileName, std::ios::binary | std::ios::in | std::ios::ate);
|
||||
|
||||
if (is.is_open())
|
||||
{
|
||||
size_t size = is.tellg();
|
||||
is.seekg(0, std::ios::beg);
|
||||
char* shaderCode = new char[size];
|
||||
is.read(shaderCode, size);
|
||||
is.close();
|
||||
|
||||
assert(size > 0);
|
||||
|
||||
VkShaderModule shaderModule;
|
||||
VkShaderModuleCreateInfo moduleCreateInfo{};
|
||||
moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||
moduleCreateInfo.codeSize = size;
|
||||
moduleCreateInfo.pCode = (uint32_t*)shaderCode;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateShaderModule(device, &moduleCreateInfo, NULL, &shaderModule));
|
||||
|
||||
delete[] shaderCode;
|
||||
|
||||
return shaderModule;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "Error: Could not open shader file \"" << fileName << "\"" << "\n";
|
||||
return VK_NULL_HANDLE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
bool fileExists(const std::string &filename)
|
||||
{
|
||||
std::ifstream f(filename.c_str());
|
||||
return !f.fail();
|
||||
}
|
||||
|
||||
uint32_t alignedSize(uint32_t value, uint32_t alignment)
|
||||
{
|
||||
return (value + alignment - 1) & ~(alignment - 1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
/*
|
||||
* Assorted Vulkan helper functions
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "VulkanInitializers.hpp"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
#include <stdexcept>
|
||||
#include <fstream>
|
||||
#include <algorithm>
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#elif defined(__ANDROID__)
|
||||
#include "VulkanAndroid.h"
|
||||
#include <android/asset_manager.h>
|
||||
#endif
|
||||
|
||||
// Custom define for better code readability
|
||||
#define VK_FLAGS_NONE 0
|
||||
// Default fence timeout in nanoseconds
|
||||
#define DEFAULT_FENCE_TIMEOUT 100000000000
|
||||
|
||||
// Macro to check and display Vulkan return results
|
||||
#if defined(__ANDROID__)
|
||||
#define VK_CHECK_RESULT(f) \
|
||||
{ \
|
||||
VkResult res = (f); \
|
||||
if (res != VK_SUCCESS) \
|
||||
{ \
|
||||
LOGE("Fatal : VkResult is \" %s \" in %s at line %d", vks::tools::errorString(res).c_str(), __FILE__, __LINE__); \
|
||||
assert(res == VK_SUCCESS); \
|
||||
} \
|
||||
}
|
||||
#else
|
||||
#define VK_CHECK_RESULT(f) \
|
||||
{ \
|
||||
VkResult res = (f); \
|
||||
if (res != VK_SUCCESS) \
|
||||
{ \
|
||||
std::cout << "Fatal : VkResult is \"" << vks::tools::errorString(res) << "\" in " << __FILE__ << " at line " << __LINE__ << "\n"; \
|
||||
assert(res == VK_SUCCESS); \
|
||||
} \
|
||||
}
|
||||
#endif
|
||||
|
||||
const std::string getAssetPath();
|
||||
|
||||
namespace vks
|
||||
{
|
||||
namespace tools
|
||||
{
|
||||
/** @brief Disable message boxes on fatal errors */
|
||||
extern bool errorModeSilent;
|
||||
|
||||
/** @brief Returns an error code as a string */
|
||||
std::string errorString(VkResult errorCode);
|
||||
|
||||
/** @brief Returns the device type as a string */
|
||||
std::string physicalDeviceTypeString(VkPhysicalDeviceType type);
|
||||
|
||||
// Selected a suitable supported depth format starting with 32 bit down to 16 bit
|
||||
// Returns false if none of the depth formats in the list is supported by the device
|
||||
VkBool32 getSupportedDepthFormat(VkPhysicalDevice physicalDevice, VkFormat *depthFormat);
|
||||
|
||||
// Returns tru a given format support LINEAR filtering
|
||||
VkBool32 formatIsFilterable(VkPhysicalDevice physicalDevice, VkFormat format, VkImageTiling tiling);
|
||||
// Returns true if a given format has a stencil part
|
||||
VkBool32 formatHasStencil(VkFormat format);
|
||||
|
||||
// Put an image memory barrier for setting an image layout on the sub resource into the given command buffer
|
||||
void setImageLayout(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkImageSubresourceRange subresourceRange,
|
||||
VkPipelineStageFlags srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
|
||||
// Uses a fixed sub resource layout with first mip level and layer
|
||||
void setImageLayout(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkImageAspectFlags aspectMask,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
|
||||
VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);
|
||||
|
||||
/** @brief Insert an image memory barrier into the command buffer */
|
||||
void insertImageMemoryBarrier(
|
||||
VkCommandBuffer cmdbuffer,
|
||||
VkImage image,
|
||||
VkAccessFlags srcAccessMask,
|
||||
VkAccessFlags dstAccessMask,
|
||||
VkImageLayout oldImageLayout,
|
||||
VkImageLayout newImageLayout,
|
||||
VkPipelineStageFlags srcStageMask,
|
||||
VkPipelineStageFlags dstStageMask,
|
||||
VkImageSubresourceRange subresourceRange);
|
||||
|
||||
// Display error message and exit on fatal error
|
||||
void exitFatal(const std::string& message, int32_t exitCode);
|
||||
void exitFatal(const std::string& message, VkResult resultCode);
|
||||
|
||||
// Load a SPIR-V shader (binary)
|
||||
#if defined(__ANDROID__)
|
||||
VkShaderModule loadShader(AAssetManager* assetManager, const char *fileName, VkDevice device);
|
||||
#else
|
||||
VkShaderModule loadShader(const char *fileName, VkDevice device);
|
||||
#endif
|
||||
|
||||
/** @brief Checks if a file exists */
|
||||
bool fileExists(const std::string &filename);
|
||||
|
||||
uint32_t alignedSize(uint32_t value, uint32_t alignment);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,517 @@
|
|||
|
||||
/*
|
||||
* UI overlay class using ImGui
|
||||
*
|
||||
* Copyright (C) 2017 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include "VulkanUIOverlay.h"
|
||||
|
||||
namespace vks
|
||||
{
|
||||
UIOverlay::UIOverlay()
|
||||
{
|
||||
#if defined(__ANDROID__)
|
||||
if (vks::android::screenDensity >= ACONFIGURATION_DENSITY_XXHIGH) {
|
||||
scale = 3.5f;
|
||||
}
|
||||
else if (vks::android::screenDensity >= ACONFIGURATION_DENSITY_XHIGH) {
|
||||
scale = 2.5f;
|
||||
}
|
||||
else if (vks::android::screenDensity >= ACONFIGURATION_DENSITY_HIGH) {
|
||||
scale = 2.0f;
|
||||
};
|
||||
#endif
|
||||
|
||||
// Init ImGui
|
||||
ImGui::CreateContext();
|
||||
// Color scheme
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
style.Colors[ImGuiCol_TitleBg] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
style.Colors[ImGuiCol_TitleBgActive] = ImVec4(1.0f, 0.0f, 0.0f, 1.0f);
|
||||
style.Colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.0f, 0.0f, 0.0f, 0.1f);
|
||||
style.Colors[ImGuiCol_MenuBarBg] = ImVec4(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_Header] = ImVec4(0.8f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_HeaderActive] = ImVec4(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_HeaderHovered] = ImVec4(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_FrameBg] = ImVec4(0.0f, 0.0f, 0.0f, 0.8f);
|
||||
style.Colors[ImGuiCol_CheckMark] = ImVec4(1.0f, 0.0f, 0.0f, 0.8f);
|
||||
style.Colors[ImGuiCol_SliderGrab] = ImVec4(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_SliderGrabActive] = ImVec4(1.0f, 0.0f, 0.0f, 0.8f);
|
||||
style.Colors[ImGuiCol_FrameBgHovered] = ImVec4(1.0f, 1.0f, 1.0f, 0.1f);
|
||||
style.Colors[ImGuiCol_FrameBgActive] = ImVec4(1.0f, 1.0f, 1.0f, 0.2f);
|
||||
style.Colors[ImGuiCol_Button] = ImVec4(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
style.Colors[ImGuiCol_ButtonHovered] = ImVec4(1.0f, 0.0f, 0.0f, 0.6f);
|
||||
style.Colors[ImGuiCol_ButtonActive] = ImVec4(1.0f, 0.0f, 0.0f, 0.8f);
|
||||
// Dimensions
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
io.FontGlobalScale = scale;
|
||||
}
|
||||
|
||||
UIOverlay::~UIOverlay() {
|
||||
if (ImGui::GetCurrentContext()) {
|
||||
ImGui::DestroyContext();
|
||||
}
|
||||
}
|
||||
|
||||
/** Prepare all vulkan resources required to render the UI overlay */
|
||||
void UIOverlay::prepareResources()
|
||||
{
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
// Create font texture
|
||||
unsigned char* fontData;
|
||||
int texWidth, texHeight;
|
||||
#if defined(__ANDROID__)
|
||||
float scale = (float)vks::android::screenDensity / (float)ACONFIGURATION_DENSITY_MEDIUM;
|
||||
AAsset* asset = AAssetManager_open(androidApp->activity->assetManager, "Roboto-Medium.ttf", AASSET_MODE_STREAMING);
|
||||
if (asset) {
|
||||
size_t size = AAsset_getLength(asset);
|
||||
assert(size > 0);
|
||||
char *fontAsset = new char[size];
|
||||
AAsset_read(asset, fontAsset, size);
|
||||
AAsset_close(asset);
|
||||
io.Fonts->AddFontFromMemoryTTF(fontAsset, size, 14.0f * scale);
|
||||
delete[] fontAsset;
|
||||
}
|
||||
#else
|
||||
const std::string filename = getAssetPath() + "Roboto-Medium.ttf";
|
||||
io.Fonts->AddFontFromFileTTF(filename.c_str(), 16.0f * scale);
|
||||
#endif
|
||||
io.Fonts->GetTexDataAsRGBA32(&fontData, &texWidth, &texHeight);
|
||||
VkDeviceSize uploadSize = texWidth*texHeight * 4 * sizeof(char);
|
||||
|
||||
//SRS - Set ImGui style scale factor to handle retina and other HiDPI displays (same as font scaling above)
|
||||
ImGuiStyle& style = ImGui::GetStyle();
|
||||
style.ScaleAllSizes(scale);
|
||||
|
||||
// Create target image for copy
|
||||
VkImageCreateInfo imageInfo = vks::initializers::imageCreateInfo();
|
||||
imageInfo.imageType = VK_IMAGE_TYPE_2D;
|
||||
imageInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
|
||||
imageInfo.extent.width = texWidth;
|
||||
imageInfo.extent.height = texHeight;
|
||||
imageInfo.extent.depth = 1;
|
||||
imageInfo.mipLevels = 1;
|
||||
imageInfo.arrayLayers = 1;
|
||||
imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
|
||||
imageInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
|
||||
imageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT;
|
||||
imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
imageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
|
||||
VK_CHECK_RESULT(vkCreateImage(device->logicalDevice, &imageInfo, nullptr, &fontImage));
|
||||
VkMemoryRequirements memReqs;
|
||||
vkGetImageMemoryRequirements(device->logicalDevice, fontImage, &memReqs);
|
||||
VkMemoryAllocateInfo memAllocInfo = vks::initializers::memoryAllocateInfo();
|
||||
memAllocInfo.allocationSize = memReqs.size;
|
||||
memAllocInfo.memoryTypeIndex = device->getMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
|
||||
VK_CHECK_RESULT(vkAllocateMemory(device->logicalDevice, &memAllocInfo, nullptr, &fontMemory));
|
||||
VK_CHECK_RESULT(vkBindImageMemory(device->logicalDevice, fontImage, fontMemory, 0));
|
||||
|
||||
// Image view
|
||||
VkImageViewCreateInfo viewInfo = vks::initializers::imageViewCreateInfo();
|
||||
viewInfo.image = fontImage;
|
||||
viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
|
||||
viewInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
|
||||
viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
viewInfo.subresourceRange.levelCount = 1;
|
||||
viewInfo.subresourceRange.layerCount = 1;
|
||||
VK_CHECK_RESULT(vkCreateImageView(device->logicalDevice, &viewInfo, nullptr, &fontView));
|
||||
|
||||
// Staging buffers for font data upload
|
||||
vks::Buffer stagingBuffer;
|
||||
|
||||
VK_CHECK_RESULT(device->createBuffer(
|
||||
VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
|
||||
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
|
||||
&stagingBuffer,
|
||||
uploadSize));
|
||||
|
||||
stagingBuffer.map();
|
||||
memcpy(stagingBuffer.mapped, fontData, uploadSize);
|
||||
stagingBuffer.unmap();
|
||||
|
||||
// Copy buffer data to font image
|
||||
VkCommandBuffer copyCmd = device->createCommandBuffer(VK_COMMAND_BUFFER_LEVEL_PRIMARY, true);
|
||||
|
||||
// Prepare for transfer
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
fontImage,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_UNDEFINED,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_PIPELINE_STAGE_HOST_BIT,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT);
|
||||
|
||||
// Copy
|
||||
VkBufferImageCopy bufferCopyRegion = {};
|
||||
bufferCopyRegion.imageSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
|
||||
bufferCopyRegion.imageSubresource.layerCount = 1;
|
||||
bufferCopyRegion.imageExtent.width = texWidth;
|
||||
bufferCopyRegion.imageExtent.height = texHeight;
|
||||
bufferCopyRegion.imageExtent.depth = 1;
|
||||
|
||||
vkCmdCopyBufferToImage(
|
||||
copyCmd,
|
||||
stagingBuffer.buffer,
|
||||
fontImage,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
1,
|
||||
&bufferCopyRegion
|
||||
);
|
||||
|
||||
// Prepare for shader read
|
||||
vks::tools::setImageLayout(
|
||||
copyCmd,
|
||||
fontImage,
|
||||
VK_IMAGE_ASPECT_COLOR_BIT,
|
||||
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,
|
||||
VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||
VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
|
||||
|
||||
device->flushCommandBuffer(copyCmd, queue, true);
|
||||
|
||||
stagingBuffer.destroy();
|
||||
|
||||
// Font texture Sampler
|
||||
VkSamplerCreateInfo samplerInfo = vks::initializers::samplerCreateInfo();
|
||||
samplerInfo.magFilter = VK_FILTER_LINEAR;
|
||||
samplerInfo.minFilter = VK_FILTER_LINEAR;
|
||||
samplerInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
|
||||
samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
|
||||
samplerInfo.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE;
|
||||
VK_CHECK_RESULT(vkCreateSampler(device->logicalDevice, &samplerInfo, nullptr, &sampler));
|
||||
|
||||
// Descriptor pool
|
||||
std::vector<VkDescriptorPoolSize> poolSizes = {
|
||||
vks::initializers::descriptorPoolSize(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1)
|
||||
};
|
||||
VkDescriptorPoolCreateInfo descriptorPoolInfo = vks::initializers::descriptorPoolCreateInfo(poolSizes, 2);
|
||||
VK_CHECK_RESULT(vkCreateDescriptorPool(device->logicalDevice, &descriptorPoolInfo, nullptr, &descriptorPool));
|
||||
|
||||
// Descriptor set layout
|
||||
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
|
||||
vks::initializers::descriptorSetLayoutBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, 0),
|
||||
};
|
||||
VkDescriptorSetLayoutCreateInfo descriptorLayout = vks::initializers::descriptorSetLayoutCreateInfo(setLayoutBindings);
|
||||
VK_CHECK_RESULT(vkCreateDescriptorSetLayout(device->logicalDevice, &descriptorLayout, nullptr, &descriptorSetLayout));
|
||||
|
||||
// Descriptor set
|
||||
VkDescriptorSetAllocateInfo allocInfo = vks::initializers::descriptorSetAllocateInfo(descriptorPool, &descriptorSetLayout, 1);
|
||||
VK_CHECK_RESULT(vkAllocateDescriptorSets(device->logicalDevice, &allocInfo, &descriptorSet));
|
||||
VkDescriptorImageInfo fontDescriptor = vks::initializers::descriptorImageInfo(
|
||||
sampler,
|
||||
fontView,
|
||||
VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
|
||||
);
|
||||
std::vector<VkWriteDescriptorSet> writeDescriptorSets = {
|
||||
vks::initializers::writeDescriptorSet(descriptorSet, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 0, &fontDescriptor)
|
||||
};
|
||||
vkUpdateDescriptorSets(device->logicalDevice, static_cast<uint32_t>(writeDescriptorSets.size()), writeDescriptorSets.data(), 0, nullptr);
|
||||
}
|
||||
|
||||
/** Prepare a separate pipeline for the UI overlay rendering decoupled from the main application */
|
||||
void UIOverlay::preparePipeline(const VkPipelineCache pipelineCache, const VkRenderPass renderPass, const VkFormat colorFormat, const VkFormat depthFormat)
|
||||
{
|
||||
// Pipeline layout
|
||||
// Push constants for UI rendering parameters
|
||||
VkPushConstantRange pushConstantRange = vks::initializers::pushConstantRange(VK_SHADER_STAGE_VERTEX_BIT, sizeof(PushConstBlock), 0);
|
||||
VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = vks::initializers::pipelineLayoutCreateInfo(&descriptorSetLayout, 1);
|
||||
pipelineLayoutCreateInfo.pushConstantRangeCount = 1;
|
||||
pipelineLayoutCreateInfo.pPushConstantRanges = &pushConstantRange;
|
||||
VK_CHECK_RESULT(vkCreatePipelineLayout(device->logicalDevice, &pipelineLayoutCreateInfo, nullptr, &pipelineLayout));
|
||||
|
||||
// Setup graphics pipeline for UI rendering
|
||||
VkPipelineInputAssemblyStateCreateInfo inputAssemblyState =
|
||||
vks::initializers::pipelineInputAssemblyStateCreateInfo(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, 0, VK_FALSE);
|
||||
|
||||
VkPipelineRasterizationStateCreateInfo rasterizationState =
|
||||
vks::initializers::pipelineRasterizationStateCreateInfo(VK_POLYGON_MODE_FILL, VK_CULL_MODE_NONE, VK_FRONT_FACE_COUNTER_CLOCKWISE);
|
||||
|
||||
// Enable blending
|
||||
VkPipelineColorBlendAttachmentState blendAttachmentState{};
|
||||
blendAttachmentState.blendEnable = VK_TRUE;
|
||||
blendAttachmentState.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
|
||||
blendAttachmentState.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
|
||||
blendAttachmentState.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
||||
blendAttachmentState.colorBlendOp = VK_BLEND_OP_ADD;
|
||||
blendAttachmentState.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
|
||||
blendAttachmentState.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
|
||||
blendAttachmentState.alphaBlendOp = VK_BLEND_OP_ADD;
|
||||
|
||||
VkPipelineColorBlendStateCreateInfo colorBlendState =
|
||||
vks::initializers::pipelineColorBlendStateCreateInfo(1, &blendAttachmentState);
|
||||
|
||||
VkPipelineDepthStencilStateCreateInfo depthStencilState =
|
||||
vks::initializers::pipelineDepthStencilStateCreateInfo(VK_FALSE, VK_FALSE, VK_COMPARE_OP_ALWAYS);
|
||||
|
||||
VkPipelineViewportStateCreateInfo viewportState =
|
||||
vks::initializers::pipelineViewportStateCreateInfo(1, 1, 0);
|
||||
|
||||
VkPipelineMultisampleStateCreateInfo multisampleState =
|
||||
vks::initializers::pipelineMultisampleStateCreateInfo(rasterizationSamples);
|
||||
|
||||
std::vector<VkDynamicState> dynamicStateEnables = {
|
||||
VK_DYNAMIC_STATE_VIEWPORT,
|
||||
VK_DYNAMIC_STATE_SCISSOR
|
||||
};
|
||||
VkPipelineDynamicStateCreateInfo dynamicState =
|
||||
vks::initializers::pipelineDynamicStateCreateInfo(dynamicStateEnables);
|
||||
|
||||
VkGraphicsPipelineCreateInfo pipelineCreateInfo = vks::initializers::pipelineCreateInfo(pipelineLayout, renderPass);
|
||||
|
||||
pipelineCreateInfo.pInputAssemblyState = &inputAssemblyState;
|
||||
pipelineCreateInfo.pRasterizationState = &rasterizationState;
|
||||
pipelineCreateInfo.pColorBlendState = &colorBlendState;
|
||||
pipelineCreateInfo.pMultisampleState = &multisampleState;
|
||||
pipelineCreateInfo.pViewportState = &viewportState;
|
||||
pipelineCreateInfo.pDepthStencilState = &depthStencilState;
|
||||
pipelineCreateInfo.pDynamicState = &dynamicState;
|
||||
pipelineCreateInfo.stageCount = static_cast<uint32_t>(shaders.size());
|
||||
pipelineCreateInfo.pStages = shaders.data();
|
||||
pipelineCreateInfo.subpass = subpass;
|
||||
|
||||
#if defined(VK_KHR_dynamic_rendering)
|
||||
// SRS - if we are using dynamic rendering (i.e. renderPass null), must define color, depth and stencil attachments at pipeline create time
|
||||
VkPipelineRenderingCreateInfo pipelineRenderingCreateInfo = {};
|
||||
if (renderPass == VK_NULL_HANDLE) {
|
||||
pipelineRenderingCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO;
|
||||
pipelineRenderingCreateInfo.colorAttachmentCount = 1;
|
||||
pipelineRenderingCreateInfo.pColorAttachmentFormats = &colorFormat;
|
||||
pipelineRenderingCreateInfo.depthAttachmentFormat = depthFormat;
|
||||
pipelineRenderingCreateInfo.stencilAttachmentFormat = depthFormat;
|
||||
pipelineCreateInfo.pNext = &pipelineRenderingCreateInfo;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Vertex bindings an attributes based on ImGui vertex definition
|
||||
std::vector<VkVertexInputBindingDescription> vertexInputBindings = {
|
||||
vks::initializers::vertexInputBindingDescription(0, sizeof(ImDrawVert), VK_VERTEX_INPUT_RATE_VERTEX),
|
||||
};
|
||||
std::vector<VkVertexInputAttributeDescription> vertexInputAttributes = {
|
||||
vks::initializers::vertexInputAttributeDescription(0, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(ImDrawVert, pos)), // Location 0: Position
|
||||
vks::initializers::vertexInputAttributeDescription(0, 1, VK_FORMAT_R32G32_SFLOAT, offsetof(ImDrawVert, uv)), // Location 1: UV
|
||||
vks::initializers::vertexInputAttributeDescription(0, 2, VK_FORMAT_R8G8B8A8_UNORM, offsetof(ImDrawVert, col)), // Location 0: Color
|
||||
};
|
||||
VkPipelineVertexInputStateCreateInfo vertexInputState = vks::initializers::pipelineVertexInputStateCreateInfo();
|
||||
vertexInputState.vertexBindingDescriptionCount = static_cast<uint32_t>(vertexInputBindings.size());
|
||||
vertexInputState.pVertexBindingDescriptions = vertexInputBindings.data();
|
||||
vertexInputState.vertexAttributeDescriptionCount = static_cast<uint32_t>(vertexInputAttributes.size());
|
||||
vertexInputState.pVertexAttributeDescriptions = vertexInputAttributes.data();
|
||||
|
||||
pipelineCreateInfo.pVertexInputState = &vertexInputState;
|
||||
|
||||
VK_CHECK_RESULT(vkCreateGraphicsPipelines(device->logicalDevice, pipelineCache, 1, &pipelineCreateInfo, nullptr, &pipeline));
|
||||
}
|
||||
|
||||
/** Update vertex and index buffer containing the imGui elements when required */
|
||||
bool UIOverlay::update()
|
||||
{
|
||||
ImDrawData* imDrawData = ImGui::GetDrawData();
|
||||
bool updateCmdBuffers = false;
|
||||
|
||||
if (!imDrawData) { return false; };
|
||||
|
||||
// Note: Alignment is done inside buffer creation
|
||||
VkDeviceSize vertexBufferSize = imDrawData->TotalVtxCount * sizeof(ImDrawVert);
|
||||
VkDeviceSize indexBufferSize = imDrawData->TotalIdxCount * sizeof(ImDrawIdx);
|
||||
|
||||
// Update buffers only if vertex or index count has been changed compared to current buffer size
|
||||
if ((vertexBufferSize == 0) || (indexBufferSize == 0)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Vertex buffer
|
||||
if ((vertexBuffer.buffer == VK_NULL_HANDLE) || (vertexCount != imDrawData->TotalVtxCount)) {
|
||||
vertexBuffer.unmap();
|
||||
vertexBuffer.destroy();
|
||||
VK_CHECK_RESULT(device->createBuffer(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &vertexBuffer, vertexBufferSize));
|
||||
vertexCount = imDrawData->TotalVtxCount;
|
||||
vertexBuffer.unmap();
|
||||
vertexBuffer.map();
|
||||
updateCmdBuffers = true;
|
||||
}
|
||||
|
||||
// Index buffer
|
||||
if ((indexBuffer.buffer == VK_NULL_HANDLE) || (indexCount < imDrawData->TotalIdxCount)) {
|
||||
indexBuffer.unmap();
|
||||
indexBuffer.destroy();
|
||||
VK_CHECK_RESULT(device->createBuffer(VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, &indexBuffer, indexBufferSize));
|
||||
indexCount = imDrawData->TotalIdxCount;
|
||||
indexBuffer.map();
|
||||
updateCmdBuffers = true;
|
||||
}
|
||||
|
||||
// Upload data
|
||||
ImDrawVert* vtxDst = (ImDrawVert*)vertexBuffer.mapped;
|
||||
ImDrawIdx* idxDst = (ImDrawIdx*)indexBuffer.mapped;
|
||||
|
||||
for (int n = 0; n < imDrawData->CmdListsCount; n++) {
|
||||
const ImDrawList* cmd_list = imDrawData->CmdLists[n];
|
||||
memcpy(vtxDst, cmd_list->VtxBuffer.Data, cmd_list->VtxBuffer.Size * sizeof(ImDrawVert));
|
||||
memcpy(idxDst, cmd_list->IdxBuffer.Data, cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx));
|
||||
vtxDst += cmd_list->VtxBuffer.Size;
|
||||
idxDst += cmd_list->IdxBuffer.Size;
|
||||
}
|
||||
|
||||
// Flush to make writes visible to GPU
|
||||
vertexBuffer.flush();
|
||||
indexBuffer.flush();
|
||||
|
||||
return updateCmdBuffers;
|
||||
}
|
||||
|
||||
void UIOverlay::draw(const VkCommandBuffer commandBuffer)
|
||||
{
|
||||
ImDrawData* imDrawData = ImGui::GetDrawData();
|
||||
int32_t vertexOffset = 0;
|
||||
int32_t indexOffset = 0;
|
||||
|
||||
if ((!imDrawData) || (imDrawData->CmdListsCount == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
|
||||
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
|
||||
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSet, 0, NULL);
|
||||
|
||||
pushConstBlock.scale = glm::vec2(2.0f / io.DisplaySize.x, 2.0f / io.DisplaySize.y);
|
||||
pushConstBlock.translate = glm::vec2(-1.0f);
|
||||
vkCmdPushConstants(commandBuffer, pipelineLayout, VK_SHADER_STAGE_VERTEX_BIT, 0, sizeof(PushConstBlock), &pushConstBlock);
|
||||
|
||||
VkDeviceSize offsets[1] = { 0 };
|
||||
vkCmdBindVertexBuffers(commandBuffer, 0, 1, &vertexBuffer.buffer, offsets);
|
||||
vkCmdBindIndexBuffer(commandBuffer, indexBuffer.buffer, 0, VK_INDEX_TYPE_UINT16);
|
||||
|
||||
for (int32_t i = 0; i < imDrawData->CmdListsCount; i++)
|
||||
{
|
||||
const ImDrawList* cmd_list = imDrawData->CmdLists[i];
|
||||
for (int32_t j = 0; j < cmd_list->CmdBuffer.Size; j++)
|
||||
{
|
||||
const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[j];
|
||||
VkRect2D scissorRect;
|
||||
scissorRect.offset.x = std::max((int32_t)(pcmd->ClipRect.x), 0);
|
||||
scissorRect.offset.y = std::max((int32_t)(pcmd->ClipRect.y), 0);
|
||||
scissorRect.extent.width = (uint32_t)(pcmd->ClipRect.z - pcmd->ClipRect.x);
|
||||
scissorRect.extent.height = (uint32_t)(pcmd->ClipRect.w - pcmd->ClipRect.y);
|
||||
vkCmdSetScissor(commandBuffer, 0, 1, &scissorRect);
|
||||
vkCmdDrawIndexed(commandBuffer, pcmd->ElemCount, 1, indexOffset, vertexOffset, 0);
|
||||
indexOffset += pcmd->ElemCount;
|
||||
}
|
||||
vertexOffset += cmd_list->VtxBuffer.Size;
|
||||
}
|
||||
}
|
||||
|
||||
void UIOverlay::resize(uint32_t width, uint32_t height)
|
||||
{
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
io.DisplaySize = ImVec2((float)(width), (float)(height));
|
||||
}
|
||||
|
||||
void UIOverlay::freeResources()
|
||||
{
|
||||
vertexBuffer.destroy();
|
||||
indexBuffer.destroy();
|
||||
vkDestroyImageView(device->logicalDevice, fontView, nullptr);
|
||||
vkDestroyImage(device->logicalDevice, fontImage, nullptr);
|
||||
vkFreeMemory(device->logicalDevice, fontMemory, nullptr);
|
||||
vkDestroySampler(device->logicalDevice, sampler, nullptr);
|
||||
vkDestroyDescriptorSetLayout(device->logicalDevice, descriptorSetLayout, nullptr);
|
||||
vkDestroyDescriptorPool(device->logicalDevice, descriptorPool, nullptr);
|
||||
vkDestroyPipelineLayout(device->logicalDevice, pipelineLayout, nullptr);
|
||||
vkDestroyPipeline(device->logicalDevice, pipeline, nullptr);
|
||||
}
|
||||
|
||||
bool UIOverlay::header(const char *caption)
|
||||
{
|
||||
return ImGui::CollapsingHeader(caption, ImGuiTreeNodeFlags_DefaultOpen);
|
||||
}
|
||||
|
||||
bool UIOverlay::checkBox(const char *caption, bool *value)
|
||||
{
|
||||
bool res = ImGui::Checkbox(caption, value);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::checkBox(const char *caption, int32_t *value)
|
||||
{
|
||||
bool val = (*value == 1);
|
||||
bool res = ImGui::Checkbox(caption, &val);
|
||||
*value = val;
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::radioButton(const char* caption, bool value)
|
||||
{
|
||||
bool res = ImGui::RadioButton(caption, value);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::inputFloat(const char *caption, float *value, float step, uint32_t precision)
|
||||
{
|
||||
bool res = ImGui::InputFloat(caption, value, step, step * 10.0f, precision);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::sliderFloat(const char* caption, float* value, float min, float max)
|
||||
{
|
||||
bool res = ImGui::SliderFloat(caption, value, min, max);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::sliderInt(const char* caption, int32_t* value, int32_t min, int32_t max)
|
||||
{
|
||||
bool res = ImGui::SliderInt(caption, value, min, max);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::comboBox(const char *caption, int32_t *itemindex, std::vector<std::string> items)
|
||||
{
|
||||
if (items.empty()) {
|
||||
return false;
|
||||
}
|
||||
std::vector<const char*> charitems;
|
||||
charitems.reserve(items.size());
|
||||
for (size_t i = 0; i < items.size(); i++) {
|
||||
charitems.push_back(items[i].c_str());
|
||||
}
|
||||
uint32_t itemCount = static_cast<uint32_t>(charitems.size());
|
||||
bool res = ImGui::Combo(caption, itemindex, &charitems[0], itemCount, itemCount);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::button(const char *caption)
|
||||
{
|
||||
bool res = ImGui::Button(caption);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
bool UIOverlay::colorPicker(const char* caption, float* color) {
|
||||
bool res = ImGui::ColorEdit4(caption, color, ImGuiColorEditFlags_NoInputs);
|
||||
if (res) { updated = true; };
|
||||
return res;
|
||||
}
|
||||
|
||||
void UIOverlay::text(const char *formatstr, ...)
|
||||
{
|
||||
va_list args;
|
||||
va_start(args, formatstr);
|
||||
ImGui::TextV(formatstr, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
* UI overlay class using ImGui
|
||||
*
|
||||
* Copyright (C) 2017 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <vector>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include "VulkanTools.h"
|
||||
#include "VulkanDebug.h"
|
||||
#include "VulkanBuffer.h"
|
||||
#include "VulkanDevice.h"
|
||||
|
||||
#include "../external/imgui/imgui.h"
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
#include "VulkanAndroid.h"
|
||||
#endif
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class UIOverlay
|
||||
{
|
||||
public:
|
||||
vks::VulkanDevice *device;
|
||||
VkQueue queue;
|
||||
|
||||
VkSampleCountFlagBits rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
|
||||
uint32_t subpass = 0;
|
||||
|
||||
vks::Buffer vertexBuffer;
|
||||
vks::Buffer indexBuffer;
|
||||
int32_t vertexCount = 0;
|
||||
int32_t indexCount = 0;
|
||||
|
||||
std::vector<VkPipelineShaderStageCreateInfo> shaders;
|
||||
|
||||
VkDescriptorPool descriptorPool;
|
||||
VkDescriptorSetLayout descriptorSetLayout;
|
||||
VkDescriptorSet descriptorSet;
|
||||
VkPipelineLayout pipelineLayout;
|
||||
VkPipeline pipeline;
|
||||
|
||||
VkDeviceMemory fontMemory = VK_NULL_HANDLE;
|
||||
VkImage fontImage = VK_NULL_HANDLE;
|
||||
VkImageView fontView = VK_NULL_HANDLE;
|
||||
VkSampler sampler;
|
||||
|
||||
struct PushConstBlock {
|
||||
glm::vec2 scale;
|
||||
glm::vec2 translate;
|
||||
} pushConstBlock;
|
||||
|
||||
bool visible = true;
|
||||
bool updated = false;
|
||||
float scale = 1.0f;
|
||||
|
||||
UIOverlay();
|
||||
~UIOverlay();
|
||||
|
||||
void preparePipeline(const VkPipelineCache pipelineCache, const VkRenderPass renderPass, const VkFormat colorFormat, const VkFormat depthFormat);
|
||||
void prepareResources();
|
||||
|
||||
bool update();
|
||||
void draw(const VkCommandBuffer commandBuffer);
|
||||
void resize(uint32_t width, uint32_t height);
|
||||
|
||||
void freeResources();
|
||||
|
||||
bool header(const char* caption);
|
||||
bool checkBox(const char* caption, bool* value);
|
||||
bool checkBox(const char* caption, int32_t* value);
|
||||
bool radioButton(const char* caption, bool value);
|
||||
bool inputFloat(const char* caption, float* value, float step, uint32_t precision);
|
||||
bool sliderFloat(const char* caption, float* value, float min, float max);
|
||||
bool sliderInt(const char* caption, int32_t* value, int32_t min, int32_t max);
|
||||
bool comboBox(const char* caption, int32_t* itemindex, std::vector<std::string> items);
|
||||
bool button(const char* caption);
|
||||
bool colorPicker(const char* caption, float* color);
|
||||
void text(const char* formatstr, ...);
|
||||
};
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,308 @@
|
|||
/*
|
||||
* Vulkan glTF model and texture loading class based on tinyglTF (https://github.com/syoyo/tinygltf)
|
||||
*
|
||||
* Copyright (C) 2018 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <fstream>
|
||||
#include <vector>
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
#include "VulkanDevice.h"
|
||||
|
||||
#include <ktx.h>
|
||||
#include <ktxvulkan.h>
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
|
||||
#define TINYGLTF_NO_STB_IMAGE_WRITE
|
||||
#ifdef VK_USE_PLATFORM_ANDROID_KHR
|
||||
#define TINYGLTF_ANDROID_LOAD_FROM_ASSETS
|
||||
#endif
|
||||
#include "tiny_gltf.h"
|
||||
|
||||
#if defined(__ANDROID__)
|
||||
#include <android/asset_manager.h>
|
||||
#endif
|
||||
|
||||
namespace vkglTF
|
||||
{
|
||||
enum DescriptorBindingFlags {
|
||||
ImageBaseColor = 0x00000001,
|
||||
ImageNormalMap = 0x00000002
|
||||
};
|
||||
|
||||
extern VkDescriptorSetLayout descriptorSetLayoutImage;
|
||||
extern VkDescriptorSetLayout descriptorSetLayoutUbo;
|
||||
extern VkMemoryPropertyFlags memoryPropertyFlags;
|
||||
extern uint32_t descriptorBindingFlags;
|
||||
|
||||
struct Node;
|
||||
|
||||
/*
|
||||
glTF texture loading class
|
||||
*/
|
||||
struct Texture {
|
||||
vks::VulkanDevice* device = nullptr;
|
||||
VkImage image;
|
||||
VkImageLayout imageLayout;
|
||||
VkDeviceMemory deviceMemory;
|
||||
VkImageView view;
|
||||
uint32_t width, height;
|
||||
uint32_t mipLevels;
|
||||
uint32_t layerCount;
|
||||
VkDescriptorImageInfo descriptor;
|
||||
VkSampler sampler;
|
||||
void updateDescriptor();
|
||||
void destroy();
|
||||
void fromglTfImage(tinygltf::Image& gltfimage, std::string path, vks::VulkanDevice* device, VkQueue copyQueue);
|
||||
};
|
||||
|
||||
/*
|
||||
glTF material class
|
||||
*/
|
||||
struct Material {
|
||||
vks::VulkanDevice* device = nullptr;
|
||||
enum AlphaMode { ALPHAMODE_OPAQUE, ALPHAMODE_MASK, ALPHAMODE_BLEND };
|
||||
AlphaMode alphaMode = ALPHAMODE_OPAQUE;
|
||||
float alphaCutoff = 1.0f;
|
||||
float metallicFactor = 1.0f;
|
||||
float roughnessFactor = 1.0f;
|
||||
glm::vec4 baseColorFactor = glm::vec4(1.0f);
|
||||
vkglTF::Texture* baseColorTexture = nullptr;
|
||||
vkglTF::Texture* metallicRoughnessTexture = nullptr;
|
||||
vkglTF::Texture* normalTexture = nullptr;
|
||||
vkglTF::Texture* occlusionTexture = nullptr;
|
||||
vkglTF::Texture* emissiveTexture = nullptr;
|
||||
|
||||
vkglTF::Texture* specularGlossinessTexture;
|
||||
vkglTF::Texture* diffuseTexture;
|
||||
|
||||
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
|
||||
|
||||
Material(vks::VulkanDevice* device) : device(device) {};
|
||||
void createDescriptorSet(VkDescriptorPool descriptorPool, VkDescriptorSetLayout descriptorSetLayout, uint32_t descriptorBindingFlags);
|
||||
};
|
||||
|
||||
/*
|
||||
glTF primitive
|
||||
*/
|
||||
struct Primitive {
|
||||
uint32_t firstIndex;
|
||||
uint32_t indexCount;
|
||||
uint32_t firstVertex;
|
||||
uint32_t vertexCount;
|
||||
Material& material;
|
||||
|
||||
struct Dimensions {
|
||||
glm::vec3 min = glm::vec3(FLT_MAX);
|
||||
glm::vec3 max = glm::vec3(-FLT_MAX);
|
||||
glm::vec3 size;
|
||||
glm::vec3 center;
|
||||
float radius;
|
||||
} dimensions;
|
||||
|
||||
void setDimensions(glm::vec3 min, glm::vec3 max);
|
||||
Primitive(uint32_t firstIndex, uint32_t indexCount, Material& material) : firstIndex(firstIndex), indexCount(indexCount), material(material) {};
|
||||
};
|
||||
|
||||
/*
|
||||
glTF mesh
|
||||
*/
|
||||
struct Mesh {
|
||||
vks::VulkanDevice* device;
|
||||
|
||||
std::vector<Primitive*> primitives;
|
||||
std::string name;
|
||||
|
||||
struct UniformBuffer {
|
||||
VkBuffer buffer;
|
||||
VkDeviceMemory memory;
|
||||
VkDescriptorBufferInfo descriptor;
|
||||
VkDescriptorSet descriptorSet = VK_NULL_HANDLE;
|
||||
void* mapped;
|
||||
} uniformBuffer;
|
||||
|
||||
struct UniformBlock {
|
||||
glm::mat4 matrix;
|
||||
glm::mat4 jointMatrix[64]{};
|
||||
float jointcount{ 0 };
|
||||
} uniformBlock;
|
||||
|
||||
Mesh(vks::VulkanDevice* device, glm::mat4 matrix);
|
||||
~Mesh();
|
||||
};
|
||||
|
||||
/*
|
||||
glTF skin
|
||||
*/
|
||||
struct Skin {
|
||||
std::string name;
|
||||
Node* skeletonRoot = nullptr;
|
||||
std::vector<glm::mat4> inverseBindMatrices;
|
||||
std::vector<Node*> joints;
|
||||
};
|
||||
|
||||
/*
|
||||
glTF node
|
||||
*/
|
||||
struct Node {
|
||||
Node* parent;
|
||||
uint32_t index;
|
||||
std::vector<Node*> children;
|
||||
glm::mat4 matrix;
|
||||
std::string name;
|
||||
Mesh* mesh;
|
||||
Skin* skin;
|
||||
int32_t skinIndex = -1;
|
||||
glm::vec3 translation{};
|
||||
glm::vec3 scale{ 1.0f };
|
||||
glm::quat rotation{};
|
||||
glm::mat4 localMatrix();
|
||||
glm::mat4 getMatrix();
|
||||
void update();
|
||||
~Node();
|
||||
};
|
||||
|
||||
/*
|
||||
glTF animation channel
|
||||
*/
|
||||
struct AnimationChannel {
|
||||
enum PathType { TRANSLATION, ROTATION, SCALE };
|
||||
PathType path;
|
||||
Node* node;
|
||||
uint32_t samplerIndex;
|
||||
};
|
||||
|
||||
/*
|
||||
glTF animation sampler
|
||||
*/
|
||||
struct AnimationSampler {
|
||||
enum InterpolationType { LINEAR, STEP, CUBICSPLINE };
|
||||
InterpolationType interpolation;
|
||||
std::vector<float> inputs;
|
||||
std::vector<glm::vec4> outputsVec4;
|
||||
};
|
||||
|
||||
/*
|
||||
glTF animation
|
||||
*/
|
||||
struct Animation {
|
||||
std::string name;
|
||||
std::vector<AnimationSampler> samplers;
|
||||
std::vector<AnimationChannel> channels;
|
||||
float start = std::numeric_limits<float>::max();
|
||||
float end = std::numeric_limits<float>::min();
|
||||
};
|
||||
|
||||
/*
|
||||
glTF default vertex layout with easy Vulkan mapping functions
|
||||
*/
|
||||
enum class VertexComponent { Position, Normal, UV, Color, Tangent, Joint0, Weight0 };
|
||||
|
||||
struct Vertex {
|
||||
glm::vec3 pos;
|
||||
glm::vec3 normal;
|
||||
glm::vec2 uv;
|
||||
glm::vec4 color;
|
||||
glm::vec4 joint0;
|
||||
glm::vec4 weight0;
|
||||
glm::vec4 tangent;
|
||||
static VkVertexInputBindingDescription vertexInputBindingDescription;
|
||||
static std::vector<VkVertexInputAttributeDescription> vertexInputAttributeDescriptions;
|
||||
static VkPipelineVertexInputStateCreateInfo pipelineVertexInputStateCreateInfo;
|
||||
static VkVertexInputBindingDescription inputBindingDescription(uint32_t binding);
|
||||
static VkVertexInputAttributeDescription inputAttributeDescription(uint32_t binding, uint32_t location, VertexComponent component);
|
||||
static std::vector<VkVertexInputAttributeDescription> inputAttributeDescriptions(uint32_t binding, const std::vector<VertexComponent> components);
|
||||
/** @brief Returns the default pipeline vertex input state create info structure for the requested vertex components */
|
||||
static VkPipelineVertexInputStateCreateInfo* getPipelineVertexInputState(const std::vector<VertexComponent> components);
|
||||
};
|
||||
|
||||
enum FileLoadingFlags {
|
||||
None = 0x00000000,
|
||||
PreTransformVertices = 0x00000001,
|
||||
PreMultiplyVertexColors = 0x00000002,
|
||||
FlipY = 0x00000004,
|
||||
DontLoadImages = 0x00000008
|
||||
};
|
||||
|
||||
enum RenderFlags {
|
||||
BindImages = 0x00000001,
|
||||
RenderOpaqueNodes = 0x00000002,
|
||||
RenderAlphaMaskedNodes = 0x00000004,
|
||||
RenderAlphaBlendedNodes = 0x00000008
|
||||
};
|
||||
|
||||
/*
|
||||
glTF model loading and rendering class
|
||||
*/
|
||||
class Model {
|
||||
private:
|
||||
vkglTF::Texture* getTexture(uint32_t index);
|
||||
vkglTF::Texture emptyTexture;
|
||||
void createEmptyTexture(VkQueue transferQueue);
|
||||
public:
|
||||
vks::VulkanDevice* device;
|
||||
VkDescriptorPool descriptorPool;
|
||||
|
||||
struct Vertices {
|
||||
int count;
|
||||
VkBuffer buffer;
|
||||
VkDeviceMemory memory;
|
||||
} vertices;
|
||||
struct Indices {
|
||||
int count;
|
||||
VkBuffer buffer;
|
||||
VkDeviceMemory memory;
|
||||
} indices;
|
||||
|
||||
std::vector<Node*> nodes;
|
||||
std::vector<Node*> linearNodes;
|
||||
|
||||
std::vector<Skin*> skins;
|
||||
|
||||
std::vector<Texture> textures;
|
||||
std::vector<Material> materials;
|
||||
std::vector<Animation> animations;
|
||||
|
||||
struct Dimensions {
|
||||
glm::vec3 min = glm::vec3(FLT_MAX);
|
||||
glm::vec3 max = glm::vec3(-FLT_MAX);
|
||||
glm::vec3 size;
|
||||
glm::vec3 center;
|
||||
float radius;
|
||||
} dimensions;
|
||||
|
||||
bool metallicRoughnessWorkflow = true;
|
||||
bool buffersBound = false;
|
||||
std::string path;
|
||||
|
||||
Model() {};
|
||||
~Model();
|
||||
void loadNode(vkglTF::Node* parent, const tinygltf::Node& node, uint32_t nodeIndex, const tinygltf::Model& model, std::vector<uint32_t>& indexBuffer, std::vector<Vertex>& vertexBuffer, float globalscale);
|
||||
void loadSkins(tinygltf::Model& gltfModel);
|
||||
void loadImages(tinygltf::Model& gltfModel, vks::VulkanDevice* device, VkQueue transferQueue);
|
||||
void loadMaterials(tinygltf::Model& gltfModel);
|
||||
void loadAnimations(tinygltf::Model& gltfModel);
|
||||
void loadFromFile(std::string filename, vks::VulkanDevice* device, VkQueue transferQueue, uint32_t fileLoadingFlags = vkglTF::FileLoadingFlags::None, float scale = 1.0f);
|
||||
void bindBuffers(VkCommandBuffer commandBuffer);
|
||||
void drawNode(Node* node, VkCommandBuffer commandBuffer, uint32_t renderFlags = 0, VkPipelineLayout pipelineLayout = VK_NULL_HANDLE, uint32_t bindImageSet = 1);
|
||||
void draw(VkCommandBuffer commandBuffer, uint32_t renderFlags = 0, VkPipelineLayout pipelineLayout = VK_NULL_HANDLE, uint32_t bindImageSet = 1);
|
||||
void getNodeDimensions(Node* node, glm::vec3& min, glm::vec3& max);
|
||||
void getSceneDimensions();
|
||||
void updateAnimation(uint32_t index, float time);
|
||||
Node* findNode(Node* parent, uint32_t index);
|
||||
Node* nodeFromIndex(uint32_t index);
|
||||
void prepareNodeDescriptor(vkglTF::Node* node, VkDescriptorSetLayout descriptorSetLayout);
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* Benchmark class
|
||||
*
|
||||
* Copyright (C) 2016-2017 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <limits>
|
||||
#include <functional>
|
||||
#include <chrono>
|
||||
#include <iomanip>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class Benchmark {
|
||||
private:
|
||||
FILE *stream;
|
||||
VkPhysicalDeviceProperties deviceProps;
|
||||
public:
|
||||
bool active = false;
|
||||
bool outputFrameTimes = false;
|
||||
int outputFrames = -1; // -1 means no frames limit
|
||||
uint32_t warmup = 1;
|
||||
uint32_t duration = 10;
|
||||
std::vector<double> frameTimes;
|
||||
std::string filename = "";
|
||||
|
||||
double runtime = 0.0;
|
||||
uint32_t frameCount = 0;
|
||||
|
||||
void run(std::function<void()> renderFunc, VkPhysicalDeviceProperties deviceProps) {
|
||||
active = true;
|
||||
this->deviceProps = deviceProps;
|
||||
#if defined(_WIN32)
|
||||
AttachConsole(ATTACH_PARENT_PROCESS);
|
||||
freopen_s(&stream, "CONOUT$", "w+", stdout);
|
||||
freopen_s(&stream, "CONOUT$", "w+", stderr);
|
||||
#endif
|
||||
std::cout << std::fixed << std::setprecision(3);
|
||||
|
||||
// Warm up phase to get more stable frame rates
|
||||
{
|
||||
double tMeasured = 0.0;
|
||||
while (tMeasured < (warmup * 1000)) {
|
||||
auto tStart = std::chrono::high_resolution_clock::now();
|
||||
renderFunc();
|
||||
auto tDiff = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now() - tStart).count();
|
||||
tMeasured += tDiff;
|
||||
};
|
||||
}
|
||||
|
||||
// Benchmark phase
|
||||
{
|
||||
while (runtime < (duration * 1000.0)) {
|
||||
auto tStart = std::chrono::high_resolution_clock::now();
|
||||
renderFunc();
|
||||
auto tDiff = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now() - tStart).count();
|
||||
runtime += tDiff;
|
||||
frameTimes.push_back(tDiff);
|
||||
frameCount++;
|
||||
if (outputFrames != -1 && outputFrames == frameCount) break;
|
||||
};
|
||||
std::cout << "Benchmark finished" << "\n";
|
||||
std::cout << "device : " << deviceProps.deviceName << " (driver version: " << deviceProps.driverVersion << ")" << "\n";
|
||||
std::cout << "runtime: " << (runtime / 1000.0) << "\n";
|
||||
std::cout << "frames : " << frameCount << "\n";
|
||||
std::cout << "fps : " << frameCount / (runtime / 1000.0) << "\n";
|
||||
}
|
||||
}
|
||||
|
||||
void saveResults() {
|
||||
std::ofstream result(filename, std::ios::out);
|
||||
if (result.is_open()) {
|
||||
result << std::fixed << std::setprecision(4);
|
||||
|
||||
result << "device,driverversion,duration (ms),frames,fps" << "\n";
|
||||
result << deviceProps.deviceName << "," << deviceProps.driverVersion << "," << runtime << "," << frameCount << "," << frameCount / (runtime / 1000.0) << "\n";
|
||||
|
||||
if (outputFrameTimes) {
|
||||
result << "\n" << "frame,ms" << "\n";
|
||||
for (size_t i = 0; i < frameTimes.size(); i++) {
|
||||
result << i << "," << frameTimes[i] << "\n";
|
||||
}
|
||||
double tMin = *std::min_element(frameTimes.begin(), frameTimes.end());
|
||||
double tMax = *std::max_element(frameTimes.begin(), frameTimes.end());
|
||||
double tAvg = std::accumulate(frameTimes.begin(), frameTimes.end(), 0.0) / (double)frameTimes.size();
|
||||
std::cout << "best : " << (1000.0 / tMin) << " fps (" << tMin << " ms)" << "\n";
|
||||
std::cout << "worst : " << (1000.0 / tMax) << " fps (" << tMax << " ms)" << "\n";
|
||||
std::cout << "avg : " << (1000.0 / tAvg) << " fps (" << tAvg << " ms)" << "\n";
|
||||
std::cout << "\n";
|
||||
}
|
||||
|
||||
result.flush();
|
||||
#if defined(_WIN32)
|
||||
FreeConsole();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,241 @@
|
|||
/*
|
||||
* Basic camera class
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/quaternion.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
|
||||
class Camera
|
||||
{
|
||||
private:
|
||||
float fov;
|
||||
float znear, zfar;
|
||||
|
||||
void updateViewMatrix()
|
||||
{
|
||||
glm::mat4 rotM = glm::mat4(1.0f);
|
||||
glm::mat4 transM;
|
||||
|
||||
rotM = glm::rotate(rotM, glm::radians(rotation.x * (flipY ? -1.0f : 1.0f)), glm::vec3(1.0f, 0.0f, 0.0f));
|
||||
rotM = glm::rotate(rotM, glm::radians(rotation.y), glm::vec3(0.0f, 1.0f, 0.0f));
|
||||
rotM = glm::rotate(rotM, glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));
|
||||
|
||||
glm::vec3 translation = position;
|
||||
if (flipY) {
|
||||
translation.y *= -1.0f;
|
||||
}
|
||||
transM = glm::translate(glm::mat4(1.0f), translation);
|
||||
|
||||
if (type == CameraType::firstperson)
|
||||
{
|
||||
matrices.view = rotM * transM;
|
||||
}
|
||||
else
|
||||
{
|
||||
matrices.view = transM * rotM;
|
||||
}
|
||||
|
||||
viewPos = glm::vec4(position, 0.0f) * glm::vec4(-1.0f, 1.0f, -1.0f, 1.0f);
|
||||
|
||||
updated = true;
|
||||
};
|
||||
public:
|
||||
enum CameraType { lookat, firstperson };
|
||||
CameraType type = CameraType::lookat;
|
||||
|
||||
glm::vec3 rotation = glm::vec3();
|
||||
glm::vec3 position = glm::vec3();
|
||||
glm::vec4 viewPos = glm::vec4();
|
||||
|
||||
float rotationSpeed = 1.0f;
|
||||
float movementSpeed = 1.0f;
|
||||
|
||||
bool updated = false;
|
||||
bool flipY = false;
|
||||
|
||||
struct
|
||||
{
|
||||
glm::mat4 perspective;
|
||||
glm::mat4 view;
|
||||
} matrices;
|
||||
|
||||
struct
|
||||
{
|
||||
bool left = false;
|
||||
bool right = false;
|
||||
bool up = false;
|
||||
bool down = false;
|
||||
} keys;
|
||||
|
||||
bool moving()
|
||||
{
|
||||
return keys.left || keys.right || keys.up || keys.down;
|
||||
}
|
||||
|
||||
float getNearClip() {
|
||||
return znear;
|
||||
}
|
||||
|
||||
float getFarClip() {
|
||||
return zfar;
|
||||
}
|
||||
|
||||
void setPerspective(float fov, float aspect, float znear, float zfar)
|
||||
{
|
||||
this->fov = fov;
|
||||
this->znear = znear;
|
||||
this->zfar = zfar;
|
||||
matrices.perspective = glm::perspective(glm::radians(fov), aspect, znear, zfar);
|
||||
if (flipY) {
|
||||
matrices.perspective[1][1] *= -1.0f;
|
||||
}
|
||||
};
|
||||
|
||||
void updateAspectRatio(float aspect)
|
||||
{
|
||||
matrices.perspective = glm::perspective(glm::radians(fov), aspect, znear, zfar);
|
||||
if (flipY) {
|
||||
matrices.perspective[1][1] *= -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void setPosition(glm::vec3 position)
|
||||
{
|
||||
this->position = position;
|
||||
updateViewMatrix();
|
||||
}
|
||||
|
||||
void setRotation(glm::vec3 rotation)
|
||||
{
|
||||
this->rotation = rotation;
|
||||
updateViewMatrix();
|
||||
}
|
||||
|
||||
void rotate(glm::vec3 delta)
|
||||
{
|
||||
this->rotation += delta;
|
||||
updateViewMatrix();
|
||||
}
|
||||
|
||||
void setTranslation(glm::vec3 translation)
|
||||
{
|
||||
this->position = translation;
|
||||
updateViewMatrix();
|
||||
};
|
||||
|
||||
void translate(glm::vec3 delta)
|
||||
{
|
||||
this->position += delta;
|
||||
updateViewMatrix();
|
||||
}
|
||||
|
||||
void setRotationSpeed(float rotationSpeed)
|
||||
{
|
||||
this->rotationSpeed = rotationSpeed;
|
||||
}
|
||||
|
||||
void setMovementSpeed(float movementSpeed)
|
||||
{
|
||||
this->movementSpeed = movementSpeed;
|
||||
}
|
||||
|
||||
void update(float deltaTime)
|
||||
{
|
||||
updated = false;
|
||||
if (type == CameraType::firstperson)
|
||||
{
|
||||
if (moving())
|
||||
{
|
||||
glm::vec3 camFront;
|
||||
camFront.x = -cos(glm::radians(rotation.x)) * sin(glm::radians(rotation.y));
|
||||
camFront.y = sin(glm::radians(rotation.x));
|
||||
camFront.z = cos(glm::radians(rotation.x)) * cos(glm::radians(rotation.y));
|
||||
camFront = glm::normalize(camFront);
|
||||
|
||||
float moveSpeed = deltaTime * movementSpeed;
|
||||
|
||||
if (keys.up)
|
||||
position += camFront * moveSpeed;
|
||||
if (keys.down)
|
||||
position -= camFront * moveSpeed;
|
||||
if (keys.left)
|
||||
position -= glm::normalize(glm::cross(camFront, glm::vec3(0.0f, 1.0f, 0.0f))) * moveSpeed;
|
||||
if (keys.right)
|
||||
position += glm::normalize(glm::cross(camFront, glm::vec3(0.0f, 1.0f, 0.0f))) * moveSpeed;
|
||||
}
|
||||
}
|
||||
updateViewMatrix();
|
||||
};
|
||||
|
||||
// Update camera passing separate axis data (gamepad)
|
||||
// Returns true if view or position has been changed
|
||||
bool updatePad(glm::vec2 axisLeft, glm::vec2 axisRight, float deltaTime)
|
||||
{
|
||||
bool retVal = false;
|
||||
|
||||
if (type == CameraType::firstperson)
|
||||
{
|
||||
// Use the common console thumbstick layout
|
||||
// Left = view, right = move
|
||||
|
||||
const float deadZone = 0.0015f;
|
||||
const float range = 1.0f - deadZone;
|
||||
|
||||
glm::vec3 camFront;
|
||||
camFront.x = -cos(glm::radians(rotation.x)) * sin(glm::radians(rotation.y));
|
||||
camFront.y = sin(glm::radians(rotation.x));
|
||||
camFront.z = cos(glm::radians(rotation.x)) * cos(glm::radians(rotation.y));
|
||||
camFront = glm::normalize(camFront);
|
||||
|
||||
float moveSpeed = deltaTime * movementSpeed * 2.0f;
|
||||
float rotSpeed = deltaTime * rotationSpeed * 50.0f;
|
||||
|
||||
// Move
|
||||
if (fabsf(axisLeft.y) > deadZone)
|
||||
{
|
||||
float pos = (fabsf(axisLeft.y) - deadZone) / range;
|
||||
position -= camFront * pos * ((axisLeft.y < 0.0f) ? -1.0f : 1.0f) * moveSpeed;
|
||||
retVal = true;
|
||||
}
|
||||
if (fabsf(axisLeft.x) > deadZone)
|
||||
{
|
||||
float pos = (fabsf(axisLeft.x) - deadZone) / range;
|
||||
position += glm::normalize(glm::cross(camFront, glm::vec3(0.0f, 1.0f, 0.0f))) * pos * ((axisLeft.x < 0.0f) ? -1.0f : 1.0f) * moveSpeed;
|
||||
retVal = true;
|
||||
}
|
||||
|
||||
// Rotate
|
||||
if (fabsf(axisRight.x) > deadZone)
|
||||
{
|
||||
float pos = (fabsf(axisRight.x) - deadZone) / range;
|
||||
rotation.y += pos * ((axisRight.x < 0.0f) ? -1.0f : 1.0f) * rotSpeed;
|
||||
retVal = true;
|
||||
}
|
||||
if (fabsf(axisRight.y) > deadZone)
|
||||
{
|
||||
float pos = (fabsf(axisRight.y) - deadZone) / range;
|
||||
rotation.x -= pos * ((axisRight.y < 0.0f) ? -1.0f : 1.0f) * rotSpeed;
|
||||
retVal = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// todo: move code from example base class for look-at
|
||||
}
|
||||
|
||||
if (retVal)
|
||||
{
|
||||
updateViewMatrix();
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* View frustum culling class
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include <array>
|
||||
#include <math.h>
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class Frustum
|
||||
{
|
||||
public:
|
||||
enum side { LEFT = 0, RIGHT = 1, TOP = 2, BOTTOM = 3, BACK = 4, FRONT = 5 };
|
||||
std::array<glm::vec4, 6> planes;
|
||||
|
||||
void update(glm::mat4 matrix)
|
||||
{
|
||||
planes[LEFT].x = matrix[0].w + matrix[0].x;
|
||||
planes[LEFT].y = matrix[1].w + matrix[1].x;
|
||||
planes[LEFT].z = matrix[2].w + matrix[2].x;
|
||||
planes[LEFT].w = matrix[3].w + matrix[3].x;
|
||||
|
||||
planes[RIGHT].x = matrix[0].w - matrix[0].x;
|
||||
planes[RIGHT].y = matrix[1].w - matrix[1].x;
|
||||
planes[RIGHT].z = matrix[2].w - matrix[2].x;
|
||||
planes[RIGHT].w = matrix[3].w - matrix[3].x;
|
||||
|
||||
planes[TOP].x = matrix[0].w - matrix[0].y;
|
||||
planes[TOP].y = matrix[1].w - matrix[1].y;
|
||||
planes[TOP].z = matrix[2].w - matrix[2].y;
|
||||
planes[TOP].w = matrix[3].w - matrix[3].y;
|
||||
|
||||
planes[BOTTOM].x = matrix[0].w + matrix[0].y;
|
||||
planes[BOTTOM].y = matrix[1].w + matrix[1].y;
|
||||
planes[BOTTOM].z = matrix[2].w + matrix[2].y;
|
||||
planes[BOTTOM].w = matrix[3].w + matrix[3].y;
|
||||
|
||||
planes[BACK].x = matrix[0].w + matrix[0].z;
|
||||
planes[BACK].y = matrix[1].w + matrix[1].z;
|
||||
planes[BACK].z = matrix[2].w + matrix[2].z;
|
||||
planes[BACK].w = matrix[3].w + matrix[3].z;
|
||||
|
||||
planes[FRONT].x = matrix[0].w - matrix[0].z;
|
||||
planes[FRONT].y = matrix[1].w - matrix[1].z;
|
||||
planes[FRONT].z = matrix[2].w - matrix[2].z;
|
||||
planes[FRONT].w = matrix[3].w - matrix[3].z;
|
||||
|
||||
for (auto i = 0; i < planes.size(); i++)
|
||||
{
|
||||
float length = sqrtf(planes[i].x * planes[i].x + planes[i].y * planes[i].y + planes[i].z * planes[i].z);
|
||||
planes[i] /= length;
|
||||
}
|
||||
}
|
||||
|
||||
bool checkSphere(glm::vec3 pos, float radius)
|
||||
{
|
||||
for (auto i = 0; i < planes.size(); i++)
|
||||
{
|
||||
if ((planes[i].x * pos.x) + (planes[i].y * pos.y) + (planes[i].z * pos.z) + planes[i].w <= -radius)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Key codes for multiple platforms
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined(_WIN32)
|
||||
#define KEY_ESCAPE VK_ESCAPE
|
||||
#define KEY_F1 VK_F1
|
||||
#define KEY_F2 VK_F2
|
||||
#define KEY_F3 VK_F3
|
||||
#define KEY_F4 VK_F4
|
||||
#define KEY_F5 VK_F5
|
||||
#define KEY_W 0x57
|
||||
#define KEY_A 0x41
|
||||
#define KEY_S 0x53
|
||||
#define KEY_D 0x44
|
||||
#define KEY_P 0x50
|
||||
#define KEY_SPACE 0x20
|
||||
#define KEY_KPADD 0x6B
|
||||
#define KEY_KPSUB 0x6D
|
||||
#define KEY_B 0x42
|
||||
#define KEY_F 0x46
|
||||
#define KEY_L 0x4C
|
||||
#define KEY_N 0x4E
|
||||
#define KEY_O 0x4F
|
||||
#define KEY_T 0x54
|
||||
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
#define GAMEPAD_BUTTON_A 0x1000
|
||||
#define GAMEPAD_BUTTON_B 0x1001
|
||||
#define GAMEPAD_BUTTON_X 0x1002
|
||||
#define GAMEPAD_BUTTON_Y 0x1003
|
||||
#define GAMEPAD_BUTTON_L1 0x1004
|
||||
#define GAMEPAD_BUTTON_R1 0x1005
|
||||
#define GAMEPAD_BUTTON_START 0x1006
|
||||
#define TOUCH_DOUBLE_TAP 0x1100
|
||||
|
||||
// for textoverlay example
|
||||
#define KEY_SPACE 0x3E // AKEYCODE_SPACE
|
||||
#define KEY_KPADD 0x9D // AKEYCODE_NUMPAD_ADD
|
||||
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
#if !defined(VK_EXAMPLE_XCODE_GENERATED)
|
||||
// For iOS and macOS pre-configured Xcode example project: Use character keycodes
|
||||
// - Use numeric keys as optional alternative to function keys
|
||||
#define KEY_DELETE 0x7F
|
||||
#define KEY_ESCAPE 0x1B
|
||||
#define KEY_F1 0xF704 // NSF1FunctionKey
|
||||
#define KEY_F2 0xF705 // NSF2FunctionKey
|
||||
#define KEY_F3 0xF706 // NSF3FunctionKey
|
||||
#define KEY_F4 0xF707 // NSF4FunctionKey
|
||||
#define KEY_1 '1'
|
||||
#define KEY_2 '2'
|
||||
#define KEY_3 '3'
|
||||
#define KEY_4 '4'
|
||||
#define KEY_W 'w'
|
||||
#define KEY_A 'a'
|
||||
#define KEY_S 's'
|
||||
#define KEY_D 'd'
|
||||
#define KEY_P 'p'
|
||||
#define KEY_SPACE ' '
|
||||
#define KEY_KPADD '+'
|
||||
#define KEY_KPSUB '-'
|
||||
#define KEY_B 'b'
|
||||
#define KEY_F 'f'
|
||||
#define KEY_L 'l'
|
||||
#define KEY_N 'n'
|
||||
#define KEY_O 'o'
|
||||
#define KEY_Q 'q'
|
||||
#define KEY_T 't'
|
||||
#define KEY_Z 'z'
|
||||
|
||||
#else // defined(VK_EXAMPLE_XCODE_GENERATED)
|
||||
// For cross-platform cmake-generated Xcode project: Use ANSI keyboard keycodes
|
||||
// - Use numeric keys as optional alternative to function keys
|
||||
// - Use main keyboard plus/minus instead of keypad plus/minus
|
||||
#include <Carbon/Carbon.h>
|
||||
#define KEY_DELETE kVK_Delete
|
||||
#define KEY_ESCAPE kVK_Escape
|
||||
#define KEY_F1 kVK_F1
|
||||
#define KEY_F2 kVK_F2
|
||||
#define KEY_F3 kVK_F3
|
||||
#define KEY_F4 kVK_F4
|
||||
#define KEY_1 kVK_ANSI_1
|
||||
#define KEY_2 kVK_ANSI_2
|
||||
#define KEY_3 kVK_ANSI_3
|
||||
#define KEY_4 kVK_ANSI_4
|
||||
#define KEY_W kVK_ANSI_W
|
||||
#define KEY_A kVK_ANSI_A
|
||||
#define KEY_S kVK_ANSI_S
|
||||
#define KEY_D kVK_ANSI_D
|
||||
#define KEY_P kVK_ANSI_P
|
||||
#define KEY_SPACE kVK_Space
|
||||
#define KEY_KPADD kVK_ANSI_Equal
|
||||
#define KEY_KPSUB kVK_ANSI_Minus
|
||||
#define KEY_B kVK_ANSI_B
|
||||
#define KEY_F kVK_ANSI_F
|
||||
#define KEY_L kVK_ANSI_L
|
||||
#define KEY_N kVK_ANSI_N
|
||||
#define KEY_O kVK_ANSI_O
|
||||
#define KEY_Q kVK_ANSI_Q
|
||||
#define KEY_T kVK_ANSI_T
|
||||
#define KEY_Z kVK_ANSI_Z
|
||||
#endif
|
||||
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
#define KEY_ESCAPE DIKS_ESCAPE
|
||||
#define KEY_F1 DIKS_F1
|
||||
#define KEY_F2 DIKS_F2
|
||||
#define KEY_F3 DIKS_F3
|
||||
#define KEY_F4 DIKS_F4
|
||||
#define KEY_W DIKS_SMALL_W
|
||||
#define KEY_A DIKS_SMALL_A
|
||||
#define KEY_S DIKS_SMALL_S
|
||||
#define KEY_D DIKS_SMALL_D
|
||||
#define KEY_P DIKS_SMALL_P
|
||||
#define KEY_SPACE DIKS_SPACE
|
||||
#define KEY_KPADD DIKS_PLUS_SIGN
|
||||
#define KEY_KPSUB DIKS_MINUS_SIGN
|
||||
#define KEY_B DIKS_SMALL_B
|
||||
#define KEY_F DIKS_SMALL_F
|
||||
#define KEY_L DIKS_SMALL_L
|
||||
#define KEY_N DIKS_SMALL_N
|
||||
#define KEY_O DIKS_SMALL_O
|
||||
#define KEY_T DIKS_SMALL_T
|
||||
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
#include <linux/input.h>
|
||||
|
||||
// todo: hack for bloom example
|
||||
#define KEY_ESCAPE KEY_ESC
|
||||
#define KEY_KPADD KEY_KPPLUS
|
||||
#define KEY_KPSUB KEY_KPMINUS
|
||||
|
||||
#elif defined(__linux__) || defined(__FreeBSD__)
|
||||
#define KEY_ESCAPE 0x9
|
||||
#define KEY_F1 0x43
|
||||
#define KEY_F2 0x44
|
||||
#define KEY_F3 0x45
|
||||
#define KEY_F4 0x46
|
||||
#define KEY_W 0x19
|
||||
#define KEY_A 0x26
|
||||
#define KEY_S 0x27
|
||||
#define KEY_D 0x28
|
||||
#define KEY_P 0x21
|
||||
#define KEY_SPACE 0x41
|
||||
#define KEY_KPADD 0x56
|
||||
#define KEY_KPSUB 0x52
|
||||
#define KEY_B 0x38
|
||||
#define KEY_F 0x29
|
||||
#define KEY_L 0x2E
|
||||
#define KEY_N 0x39
|
||||
#define KEY_O 0x20
|
||||
#define KEY_T 0x1C
|
||||
#endif
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Basic C++11 based thread pool with per-thread job queues
|
||||
*
|
||||
* Copyright (C) 2016 by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
#include <thread>
|
||||
#include <queue>
|
||||
#include <mutex>
|
||||
#include <condition_variable>
|
||||
#include <functional>
|
||||
|
||||
// make_unique is not available in C++11
|
||||
// Taken from Herb Sutter's blog (https://herbsutter.com/gotw/_102/)
|
||||
template<typename T, typename ...Args>
|
||||
std::unique_ptr<T> make_unique(Args&& ...args)
|
||||
{
|
||||
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
|
||||
}
|
||||
|
||||
namespace vks
|
||||
{
|
||||
class Thread
|
||||
{
|
||||
private:
|
||||
bool destroying = false;
|
||||
std::thread worker;
|
||||
std::queue<std::function<void()>> jobQueue;
|
||||
std::mutex queueMutex;
|
||||
std::condition_variable condition;
|
||||
|
||||
// Loop through all remaining jobs
|
||||
void queueLoop()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
std::function<void()> job;
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(queueMutex);
|
||||
condition.wait(lock, [this] { return !jobQueue.empty() || destroying; });
|
||||
if (destroying)
|
||||
{
|
||||
break;
|
||||
}
|
||||
job = jobQueue.front();
|
||||
}
|
||||
|
||||
job();
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(queueMutex);
|
||||
jobQueue.pop();
|
||||
condition.notify_one();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
Thread()
|
||||
{
|
||||
worker = std::thread(&Thread::queueLoop, this);
|
||||
}
|
||||
|
||||
~Thread()
|
||||
{
|
||||
if (worker.joinable())
|
||||
{
|
||||
wait();
|
||||
queueMutex.lock();
|
||||
destroying = true;
|
||||
condition.notify_one();
|
||||
queueMutex.unlock();
|
||||
worker.join();
|
||||
}
|
||||
}
|
||||
|
||||
// Add a new job to the thread's queue
|
||||
void addJob(std::function<void()> function)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(queueMutex);
|
||||
jobQueue.push(std::move(function));
|
||||
condition.notify_one();
|
||||
}
|
||||
|
||||
// Wait until all work items have been finished
|
||||
void wait()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(queueMutex);
|
||||
condition.wait(lock, [this]() { return jobQueue.empty(); });
|
||||
}
|
||||
};
|
||||
|
||||
class ThreadPool
|
||||
{
|
||||
public:
|
||||
std::vector<std::unique_ptr<Thread>> threads;
|
||||
|
||||
// Sets the number of threads to be allocated in this pool
|
||||
void setThreadCount(uint32_t count)
|
||||
{
|
||||
threads.clear();
|
||||
for (auto i = 0; i < count; i++)
|
||||
{
|
||||
threads.push_back(make_unique<Thread>());
|
||||
}
|
||||
}
|
||||
|
||||
// Wait until all threads have finished their work items
|
||||
void wait()
|
||||
{
|
||||
for (auto &thread : threads)
|
||||
{
|
||||
thread->wait();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,534 @@
|
|||
/*
|
||||
* Vulkan Example base class
|
||||
*
|
||||
* Copyright (C) by Sascha Willems - www.saschawillems.de
|
||||
*
|
||||
* This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT)
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma comment(linker, "/subsystem:windows")
|
||||
#include <windows.h>
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
#include <ShellScalingAPI.h>
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
#include <android/native_activity.h>
|
||||
#include <android/asset_manager.h>
|
||||
#include <android_native_app_glue.h>
|
||||
#include <sys/system_properties.h>
|
||||
#include "VulkanAndroid.h"
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
#include <directfb.h>
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
#include <wayland-client.h>
|
||||
#include "xdg-shell-client-protocol.h"
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
//
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
#include <xcb/xcb.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
#include <unordered_map>
|
||||
#include <numeric>
|
||||
#include <ctime>
|
||||
#include <iostream>
|
||||
#include <chrono>
|
||||
#include <random>
|
||||
#include <algorithm>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#define GLM_ENABLE_EXPERIMENTAL
|
||||
#include <glm/glm.hpp>
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include <glm/gtc/matrix_inverse.hpp>
|
||||
#include <glm/gtc/type_ptr.hpp>
|
||||
#include <string>
|
||||
#include <numeric>
|
||||
#include <array>
|
||||
|
||||
#include "vulkan/vulkan.h"
|
||||
|
||||
#include "CommandLineParser.hpp"
|
||||
#include "keycodes.hpp"
|
||||
#include "VulkanTools.h"
|
||||
#include "VulkanDebug.h"
|
||||
#include "VulkanUIOverlay.h"
|
||||
#include "VulkanSwapChain.h"
|
||||
#include "VulkanBuffer.h"
|
||||
#include "VulkanDevice.h"
|
||||
#include "VulkanTexture.h"
|
||||
|
||||
#include "VulkanInitializers.hpp"
|
||||
#include "camera.hpp"
|
||||
#include "benchmark.hpp"
|
||||
|
||||
class VulkanExampleBase
|
||||
{
|
||||
private:
|
||||
std::string getWindowTitle();
|
||||
uint32_t destWidth;
|
||||
uint32_t destHeight;
|
||||
bool resizing = false;
|
||||
void windowResize();
|
||||
void handleMouseMove(int32_t x, int32_t y);
|
||||
void nextFrame();
|
||||
void updateOverlay();
|
||||
void createPipelineCache();
|
||||
void createCommandPool();
|
||||
void createSynchronizationPrimitives();
|
||||
void initSwapchain();
|
||||
void setupSwapChain();
|
||||
void createCommandBuffers();
|
||||
void destroyCommandBuffers();
|
||||
std::string shaderDir = "glsl";
|
||||
protected:
|
||||
// Returns the path to the root of the glsl or hlsl shader directory.
|
||||
std::string getShadersPath() const;
|
||||
// Returns the path to the root of the homework glsl or hlsl shader directory.
|
||||
std::string getHomeworkShadersPath() const;
|
||||
// Frame counter to display fps
|
||||
uint32_t frameCounter = 0;
|
||||
uint32_t lastFPS = 0;
|
||||
std::chrono::time_point<std::chrono::high_resolution_clock> lastTimestamp, tPrevEnd;
|
||||
// Vulkan instance, stores all per-application states
|
||||
VkInstance instance;
|
||||
std::vector<std::string> supportedInstanceExtensions;
|
||||
// Physical device (GPU) that Vulkan will use
|
||||
VkPhysicalDevice physicalDevice;
|
||||
// Stores physical device properties (for e.g. checking device limits)
|
||||
VkPhysicalDeviceProperties deviceProperties;
|
||||
// Stores the features available on the selected physical device (for e.g. checking if a feature is available)
|
||||
VkPhysicalDeviceFeatures deviceFeatures;
|
||||
// Stores all available memory (type) properties for the physical device
|
||||
VkPhysicalDeviceMemoryProperties deviceMemoryProperties;
|
||||
/** @brief Set of physical device features to be enabled for this example (must be set in the derived constructor) */
|
||||
VkPhysicalDeviceFeatures enabledFeatures{};
|
||||
/** @brief Set of device extensions to be enabled for this example (must be set in the derived constructor) */
|
||||
std::vector<const char*> enabledDeviceExtensions;
|
||||
std::vector<const char*> enabledInstanceExtensions;
|
||||
/** @brief Optional pNext structure for passing extension structures to device creation */
|
||||
void* deviceCreatepNextChain = nullptr;
|
||||
/** @brief Logical device, application's view of the physical device (GPU) */
|
||||
VkDevice device;
|
||||
// Handle to the device graphics queue that command buffers are submitted to
|
||||
VkQueue queue;
|
||||
// Depth buffer format (selected during Vulkan initialization)
|
||||
VkFormat depthFormat;
|
||||
// Command buffer pool
|
||||
VkCommandPool cmdPool;
|
||||
/** @brief Pipeline stages used to wait at for graphics queue submissions */
|
||||
VkPipelineStageFlags submitPipelineStages = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
// Contains command buffers and semaphores to be presented to the queue
|
||||
VkSubmitInfo submitInfo;
|
||||
// Command buffers used for rendering
|
||||
std::vector<VkCommandBuffer> drawCmdBuffers;
|
||||
// Global render pass for frame buffer writes
|
||||
VkRenderPass renderPass = VK_NULL_HANDLE;
|
||||
// List of available frame buffers (same as number of swap chain images)
|
||||
std::vector<VkFramebuffer>frameBuffers;
|
||||
// Active frame buffer index
|
||||
uint32_t currentBuffer = 0;
|
||||
// Descriptor set pool
|
||||
VkDescriptorPool descriptorPool = VK_NULL_HANDLE;
|
||||
// List of shader modules created (stored for cleanup)
|
||||
std::vector<VkShaderModule> shaderModules;
|
||||
// Pipeline cache object
|
||||
VkPipelineCache pipelineCache;
|
||||
// Wraps the swap chain to present images (framebuffers) to the windowing system
|
||||
VulkanSwapChain swapChain;
|
||||
// Synchronization semaphores
|
||||
struct {
|
||||
// Swap chain image presentation
|
||||
VkSemaphore presentComplete;
|
||||
// Command buffer submission and execution
|
||||
VkSemaphore renderComplete;
|
||||
} semaphores;
|
||||
std::vector<VkFence> waitFences;
|
||||
public:
|
||||
bool prepared = false;
|
||||
bool resized = false;
|
||||
bool viewUpdated = false;
|
||||
uint32_t width = 1280;
|
||||
uint32_t height = 720;
|
||||
|
||||
vks::UIOverlay UIOverlay;
|
||||
CommandLineParser commandLineParser;
|
||||
|
||||
/** @brief Last frame time measured using a high performance timer (if available) */
|
||||
float frameTimer = 1.0f;
|
||||
|
||||
vks::Benchmark benchmark;
|
||||
|
||||
/** @brief Encapsulated physical and logical vulkan device */
|
||||
vks::VulkanDevice *vulkanDevice;
|
||||
|
||||
/** @brief Example settings that can be changed e.g. by command line arguments */
|
||||
struct Settings {
|
||||
/** @brief Activates validation layers (and message output) when set to true */
|
||||
bool validation = false;
|
||||
/** @brief Set to true if fullscreen mode has been requested via command line */
|
||||
bool fullscreen = false;
|
||||
/** @brief Set to true if v-sync will be forced for the swapchain */
|
||||
bool vsync = false;
|
||||
/** @brief Enable UI overlay */
|
||||
bool overlay = true;
|
||||
} settings;
|
||||
|
||||
VkClearColorValue defaultClearColor = { { 0.025f, 0.025f, 0.025f, 1.0f } };
|
||||
|
||||
static std::vector<const char*> args;
|
||||
|
||||
// Defines a frame rate independent timer value clamped from -1.0...1.0
|
||||
// For use in animations, rotations, etc.
|
||||
float timer = 0.0f;
|
||||
// Multiplier for speeding up (or slowing down) the global timer
|
||||
float timerSpeed = 0.25f;
|
||||
bool paused = false;
|
||||
|
||||
Camera camera;
|
||||
glm::vec2 mousePos;
|
||||
|
||||
std::string title = "Vulkan Example";
|
||||
std::string name = "vulkanExample";
|
||||
uint32_t apiVersion = VK_API_VERSION_1_0;
|
||||
|
||||
struct {
|
||||
VkImage image;
|
||||
VkDeviceMemory mem;
|
||||
VkImageView view;
|
||||
} depthStencil;
|
||||
|
||||
struct {
|
||||
glm::vec2 axisLeft = glm::vec2(0.0f);
|
||||
glm::vec2 axisRight = glm::vec2(0.0f);
|
||||
} gamePadState;
|
||||
|
||||
struct {
|
||||
bool left = false;
|
||||
bool right = false;
|
||||
bool middle = false;
|
||||
} mouseButtons;
|
||||
|
||||
// OS specific
|
||||
#if defined(_WIN32)
|
||||
HWND window;
|
||||
HINSTANCE windowInstance;
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
// true if application has focused, false if moved to background
|
||||
bool focused = false;
|
||||
struct TouchPos {
|
||||
int32_t x;
|
||||
int32_t y;
|
||||
} touchPos;
|
||||
bool touchDown = false;
|
||||
double touchTimer = 0.0;
|
||||
int64_t lastTapTime = 0;
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
void* view;
|
||||
#if defined(VK_EXAMPLE_XCODE_GENERATED)
|
||||
bool quit = false;
|
||||
#endif
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
bool quit = false;
|
||||
IDirectFB *dfb = nullptr;
|
||||
IDirectFBDisplayLayer *layer = nullptr;
|
||||
IDirectFBWindow *window = nullptr;
|
||||
IDirectFBSurface *surface = nullptr;
|
||||
IDirectFBEventBuffer *event_buffer = nullptr;
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
wl_display *display = nullptr;
|
||||
wl_registry *registry = nullptr;
|
||||
wl_compositor *compositor = nullptr;
|
||||
struct xdg_wm_base *shell = nullptr;
|
||||
wl_seat *seat = nullptr;
|
||||
wl_pointer *pointer = nullptr;
|
||||
wl_keyboard *keyboard = nullptr;
|
||||
wl_surface *surface = nullptr;
|
||||
struct xdg_surface *xdg_surface;
|
||||
struct xdg_toplevel *xdg_toplevel;
|
||||
bool quit = false;
|
||||
bool configured = false;
|
||||
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
bool quit = false;
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
bool quit = false;
|
||||
xcb_connection_t *connection;
|
||||
xcb_screen_t *screen;
|
||||
xcb_window_t window;
|
||||
xcb_intern_atom_reply_t *atom_wm_delete_window;
|
||||
#elif defined(VK_USE_PLATFORM_HEADLESS_EXT)
|
||||
bool quit = false;
|
||||
#endif
|
||||
|
||||
VulkanExampleBase(bool enableValidation = false);
|
||||
virtual ~VulkanExampleBase();
|
||||
/** @brief Setup the vulkan instance, enable required extensions and connect to the physical device (GPU) */
|
||||
bool initVulkan();
|
||||
|
||||
#if defined(_WIN32)
|
||||
void setupConsole(std::string title);
|
||||
void setupDPIAwareness();
|
||||
HWND setupWindow(HINSTANCE hinstance, WNDPROC wndproc);
|
||||
void handleMessages(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
static int32_t handleAppInput(struct android_app* app, AInputEvent* event);
|
||||
static void handleAppCommand(android_app* app, int32_t cmd);
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
void* setupWindow(void* view);
|
||||
void displayLinkOutputCb();
|
||||
void mouseDragged(float x, float y);
|
||||
void windowWillResize(float x, float y);
|
||||
void windowDidResize();
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
IDirectFBSurface *setupWindow();
|
||||
void handleEvent(const DFBWindowEvent *event);
|
||||
#elif defined(VK_USE_PLATFORM_WAYLAND_KHR)
|
||||
struct xdg_surface *setupWindow();
|
||||
void initWaylandConnection();
|
||||
void setSize(int width, int height);
|
||||
static void registryGlobalCb(void *data, struct wl_registry *registry,
|
||||
uint32_t name, const char *interface, uint32_t version);
|
||||
void registryGlobal(struct wl_registry *registry, uint32_t name,
|
||||
const char *interface, uint32_t version);
|
||||
static void registryGlobalRemoveCb(void *data, struct wl_registry *registry,
|
||||
uint32_t name);
|
||||
static void seatCapabilitiesCb(void *data, wl_seat *seat, uint32_t caps);
|
||||
void seatCapabilities(wl_seat *seat, uint32_t caps);
|
||||
static void pointerEnterCb(void *data, struct wl_pointer *pointer,
|
||||
uint32_t serial, struct wl_surface *surface, wl_fixed_t sx,
|
||||
wl_fixed_t sy);
|
||||
static void pointerLeaveCb(void *data, struct wl_pointer *pointer,
|
||||
uint32_t serial, struct wl_surface *surface);
|
||||
static void pointerMotionCb(void *data, struct wl_pointer *pointer,
|
||||
uint32_t time, wl_fixed_t sx, wl_fixed_t sy);
|
||||
void pointerMotion(struct wl_pointer *pointer,
|
||||
uint32_t time, wl_fixed_t sx, wl_fixed_t sy);
|
||||
static void pointerButtonCb(void *data, struct wl_pointer *wl_pointer,
|
||||
uint32_t serial, uint32_t time, uint32_t button, uint32_t state);
|
||||
void pointerButton(struct wl_pointer *wl_pointer,
|
||||
uint32_t serial, uint32_t time, uint32_t button, uint32_t state);
|
||||
static void pointerAxisCb(void *data, struct wl_pointer *wl_pointer,
|
||||
uint32_t time, uint32_t axis, wl_fixed_t value);
|
||||
void pointerAxis(struct wl_pointer *wl_pointer,
|
||||
uint32_t time, uint32_t axis, wl_fixed_t value);
|
||||
static void keyboardKeymapCb(void *data, struct wl_keyboard *keyboard,
|
||||
uint32_t format, int fd, uint32_t size);
|
||||
static void keyboardEnterCb(void *data, struct wl_keyboard *keyboard,
|
||||
uint32_t serial, struct wl_surface *surface, struct wl_array *keys);
|
||||
static void keyboardLeaveCb(void *data, struct wl_keyboard *keyboard,
|
||||
uint32_t serial, struct wl_surface *surface);
|
||||
static void keyboardKeyCb(void *data, struct wl_keyboard *keyboard,
|
||||
uint32_t serial, uint32_t time, uint32_t key, uint32_t state);
|
||||
void keyboardKey(struct wl_keyboard *keyboard,
|
||||
uint32_t serial, uint32_t time, uint32_t key, uint32_t state);
|
||||
static void keyboardModifiersCb(void *data, struct wl_keyboard *keyboard,
|
||||
uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched,
|
||||
uint32_t mods_locked, uint32_t group);
|
||||
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
//
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
xcb_window_t setupWindow();
|
||||
void initxcbConnection();
|
||||
void handleEvent(const xcb_generic_event_t *event);
|
||||
#else
|
||||
void setupWindow();
|
||||
#endif
|
||||
/** @brief (Virtual) Creates the application wide Vulkan instance */
|
||||
virtual VkResult createInstance(bool enableValidation);
|
||||
/** @brief (Pure virtual) Render function to be implemented by the sample application */
|
||||
virtual void render() = 0;
|
||||
/** @brief (Virtual) Called when the camera view has changed */
|
||||
virtual void viewChanged();
|
||||
/** @brief (Virtual) Called after a key was pressed, can be used to do custom key handling */
|
||||
virtual void keyPressed(uint32_t);
|
||||
/** @brief (Virtual) Called after the mouse cursor moved and before internal events (like camera rotation) is handled */
|
||||
virtual void mouseMoved(double x, double y, bool &handled);
|
||||
/** @brief (Virtual) Called when the window has been resized, can be used by the sample application to recreate resources */
|
||||
virtual void windowResized();
|
||||
/** @brief (Virtual) Called when resources have been recreated that require a rebuild of the command buffers (e.g. frame buffer), to be implemented by the sample application */
|
||||
virtual void buildCommandBuffers();
|
||||
/** @brief (Virtual) Setup default depth and stencil views */
|
||||
virtual void setupDepthStencil();
|
||||
/** @brief (Virtual) Setup default framebuffers for all requested swapchain images */
|
||||
virtual void setupFrameBuffer();
|
||||
/** @brief (Virtual) Setup a default renderpass */
|
||||
virtual void setupRenderPass();
|
||||
/** @brief (Virtual) Called after the physical device features have been read, can be used to set features to enable on the device */
|
||||
virtual void getEnabledFeatures();
|
||||
/** @brief (Virtual) Called after the physical device extensions have been read, can be used to enable extensions based on the supported extension listing*/
|
||||
virtual void getEnabledExtensions();
|
||||
|
||||
/** @brief Prepares all Vulkan resources and functions required to run the sample */
|
||||
virtual void prepare();
|
||||
|
||||
/** @brief Loads a SPIR-V shader file for the given shader stage */
|
||||
VkPipelineShaderStageCreateInfo loadShader(std::string fileName, VkShaderStageFlagBits stage);
|
||||
|
||||
/** @brief Entry point for the main render loop */
|
||||
void renderLoop();
|
||||
|
||||
/** @brief Adds the drawing commands for the ImGui overlay to the given command buffer */
|
||||
void drawUI(const VkCommandBuffer commandBuffer);
|
||||
|
||||
/** Prepare the next frame for workload submission by acquiring the next swap chain image */
|
||||
void prepareFrame();
|
||||
/** @brief Presents the current image to the swap chain */
|
||||
void submitFrame();
|
||||
/** @brief (Virtual) Default image acquire + submission and command buffer submission function */
|
||||
virtual void renderFrame();
|
||||
|
||||
/** @brief (Virtual) Called when the UI overlay is updating, can be used to add custom elements to the overlay */
|
||||
virtual void OnUpdateUIOverlay(vks::UIOverlay *overlay);
|
||||
|
||||
#if defined(_WIN32)
|
||||
virtual void OnHandleMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
#endif
|
||||
};
|
||||
|
||||
// OS specific macros for the example main entry points
|
||||
#if defined(_WIN32)
|
||||
// Windows entry point
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) \
|
||||
{ \
|
||||
if (vulkanExample != NULL) \
|
||||
{ \
|
||||
vulkanExample->handleMessages(hWnd, uMsg, wParam, lParam); \
|
||||
} \
|
||||
return (DefWindowProc(hWnd, uMsg, wParam, lParam)); \
|
||||
} \
|
||||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) \
|
||||
{ \
|
||||
for (int32_t i = 0; i < __argc; i++) { VulkanExample::args.push_back(__argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->setupWindow(hInstance, WndProc); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
return 0; \
|
||||
}
|
||||
#elif defined(VK_USE_PLATFORM_ANDROID_KHR)
|
||||
// Android entry point
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
void android_main(android_app* state) \
|
||||
{ \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
state->userData = vulkanExample; \
|
||||
state->onAppCmd = VulkanExample::handleAppCommand; \
|
||||
state->onInputEvent = VulkanExample::handleAppInput; \
|
||||
androidApp = state; \
|
||||
vks::android::getDeviceConfig(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
}
|
||||
#elif defined(_DIRECT2DISPLAY)
|
||||
// Linux entry point with direct to display wsi
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
static void handleEvent() \
|
||||
{ \
|
||||
} \
|
||||
int main(const int argc, const char *argv[]) \
|
||||
{ \
|
||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
return 0; \
|
||||
}
|
||||
#elif defined(VK_USE_PLATFORM_DIRECTFB_EXT)
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
static void handleEvent(const DFBWindowEvent *event) \
|
||||
{ \
|
||||
if (vulkanExample != NULL) \
|
||||
{ \
|
||||
vulkanExample->handleEvent(event); \
|
||||
} \
|
||||
} \
|
||||
int main(const int argc, const char *argv[]) \
|
||||
{ \
|
||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->setupWindow(); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
return 0; \
|
||||
}
|
||||
#elif (defined(VK_USE_PLATFORM_WAYLAND_KHR) || defined(VK_USE_PLATFORM_HEADLESS_EXT))
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
int main(const int argc, const char *argv[]) \
|
||||
{ \
|
||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->setupWindow(); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
return 0; \
|
||||
}
|
||||
#elif defined(VK_USE_PLATFORM_XCB_KHR)
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
static void handleEvent(const xcb_generic_event_t *event) \
|
||||
{ \
|
||||
if (vulkanExample != NULL) \
|
||||
{ \
|
||||
vulkanExample->handleEvent(event); \
|
||||
} \
|
||||
} \
|
||||
int main(const int argc, const char *argv[]) \
|
||||
{ \
|
||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->setupWindow(); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
return 0; \
|
||||
}
|
||||
#elif (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
|
||||
#if defined(VK_EXAMPLE_XCODE_GENERATED)
|
||||
#define VULKAN_EXAMPLE_MAIN() \
|
||||
VulkanExample *vulkanExample; \
|
||||
int main(const int argc, const char *argv[]) \
|
||||
{ \
|
||||
@autoreleasepool \
|
||||
{ \
|
||||
for (size_t i = 0; i < argc; i++) { VulkanExample::args.push_back(argv[i]); }; \
|
||||
vulkanExample = new VulkanExample(); \
|
||||
vulkanExample->initVulkan(); \
|
||||
vulkanExample->setupWindow(nullptr); \
|
||||
vulkanExample->prepare(); \
|
||||
vulkanExample->renderLoop(); \
|
||||
delete(vulkanExample); \
|
||||
} \
|
||||
return 0; \
|
||||
}
|
||||
#else
|
||||
#define VULKAN_EXAMPLE_MAIN()
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
from urllib.request import urlretrieve
|
||||
from zipfile import ZipFile
|
||||
|
||||
ASSET_PACK_URL = 'http://vulkan.gpuinfo.org/downloads/vulkan_asset_pack_gltf.zip'
|
||||
ASSET_PACK_FILE_NAME = 'vulkan_asset_pack_gltf.zip'
|
||||
|
||||
print("Downloading asset pack from '%s'" % ASSET_PACK_URL)
|
||||
|
||||
def reporthook(blocknum, blocksize, totalsize):
|
||||
bytesread = blocknum * blocksize
|
||||
if totalsize > 0:
|
||||
percent = bytesread * 1e2 / totalsize
|
||||
s = "\r%5.1f%% (%*d / %d bytes)" % (percent, len(str(totalsize)), bytesread, totalsize)
|
||||
sys.stderr.write(s)
|
||||
if bytesread >= totalsize:
|
||||
sys.stderr.write("\n")
|
||||
else:
|
||||
sys.stderr.write("read %d\n" % (bytesread,))
|
||||
|
||||
urlretrieve(ASSET_PACK_URL, ASSET_PACK_FILE_NAME, reporthook)
|
||||
|
||||
print("Download finished")
|
||||
|
||||
print("Extracting assets")
|
||||
|
||||
zip = ZipFile(ASSET_PACK_FILE_NAME, 'r')
|
||||
zip.extractall("./")
|
||||
zip.close()
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
clone_folder: c:\dev\glm-cmake
|
||||
|
||||
os:
|
||||
- Visual Studio 2013
|
||||
|
||||
platform:
|
||||
- x86
|
||||
- x86_64
|
||||
|
||||
build_script:
|
||||
- md build_pure_11
|
||||
- cd build_pure_11
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build . --config Debug
|
||||
- cmake --build . --config Release
|
||||
- cd ..
|
||||
- md build_simd_11
|
||||
- cd build_simd_11
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON ..
|
||||
- cmake --build . --config Debug
|
||||
- cmake --build . --config Release
|
||||
- cd ..
|
||||
- md build_pure_98
|
||||
- cd build_pure_98
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build . --config Debug
|
||||
- cmake --build . --config Release
|
||||
- cd ..
|
||||
- md build_simd_98
|
||||
- cd build_simd_98
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON ..
|
||||
- cmake --build . --config Debug
|
||||
- cmake --build . --config Release
|
||||
- cd ..
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# CMake
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
*.cmake
|
||||
# ^ May need to add future .cmake files as exceptions
|
||||
|
||||
# Test logs
|
||||
Testing/*
|
||||
|
||||
# Test input
|
||||
test/gtc/*.dds
|
||||
|
||||
# Project Files
|
||||
Makefile
|
||||
*.cbp
|
||||
*.user
|
||||
|
||||
# Misc.
|
||||
*.log
|
||||
|
||||
# local build(s)
|
||||
build*
|
||||
|
||||
/.vs
|
||||
/CMakeSettings.json
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
language: cpp
|
||||
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- compiler: gcc
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.9
|
||||
env: COMPILER=g++-4.9
|
||||
- compiler: clang
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- llvm-toolchain-precise-3.8
|
||||
packages:
|
||||
- clang-3.8
|
||||
env: COMPILER=clang++-3.8
|
||||
|
||||
compiler:
|
||||
- clang
|
||||
|
||||
before_script:
|
||||
|
||||
script:
|
||||
- mkdir ./build_pure_11
|
||||
- cd ./build_pure_11
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_pure_98
|
||||
- cd ./build_pure_98
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_pure_11_debug
|
||||
- cd ./build_pure_11_debug
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_pure_98_debug
|
||||
- cd ./build_pure_98_debug
|
||||
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_simd_11
|
||||
- cd ./build_simd_11
|
||||
- if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_simd_98
|
||||
- cd ./build_simd_98
|
||||
- if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_simd_11_debug
|
||||
- cd ./build_simd_11_debug
|
||||
- if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
- mkdir ./build_simd_98_debug
|
||||
- cd ./build_simd_98_debug
|
||||
- if [[ $TRAVIS_OS_NAME == 'osx' ]]; then cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..; else cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..; fi
|
||||
- cmake --build .
|
||||
- ctest
|
||||
- cd ..
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,221 @@
|
|||
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 -g -Weverything -Wpedantic -Werror -Wno-padded -Wno-c++98-compat -Wno-documentation -std=c++11)
|
||||
|
||||
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 dynamic 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_INSTALL_ENABLE "GLM install" ON)
|
||||
|
||||
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()
|
||||
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_definitions(/FAs)
|
||||
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()
|
||||
message(STATUS "GLM: No SIMD instruction set")
|
||||
elseif(GLM_TEST_ENABLE_SIMD_AVX2)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
|
||||
add_definitions(-mavx2)
|
||||
elseif(GLM_USE_INTEL)
|
||||
add_definitions(/QxAVX2)
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_definitions(/arch:AVX2)
|
||||
endif()
|
||||
message(STATUS "GLM: AVX2 instruction set")
|
||||
elseif(GLM_TEST_ENABLE_SIMD_AVX)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
|
||||
add_definitions(-mavx)
|
||||
elseif(GLM_USE_INTEL)
|
||||
add_definitions(/QxAVX)
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_definitions(/arch:AVX)
|
||||
endif()
|
||||
message(STATUS "GLM: AVX instruction set")
|
||||
elseif(GLM_TEST_ENABLE_SIMD_SSE3)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
|
||||
add_definitions(-msse3)
|
||||
elseif(GLM_USE_INTEL)
|
||||
add_definitions(/QxSSE3)
|
||||
elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") AND NOT CMAKE_CL_64)
|
||||
add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3
|
||||
endif()
|
||||
message(STATUS "GLM: SSE3 instruction set")
|
||||
elseif(GLM_TEST_ENABLE_SIMD_SSE2)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
|
||||
add_definitions(-msse2)
|
||||
elseif(GLM_USE_INTEL)
|
||||
add_definitions(/QxSSE2)
|
||||
elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") AND NOT CMAKE_CL_64)
|
||||
add_definitions(/arch:SSE2)
|
||||
endif()
|
||||
message(STATUS "GLM: SSE2 instruction set")
|
||||
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")
|
||||
if (GLM_INSTALL_ENABLE)
|
||||
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
endif()
|
||||
|
||||
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.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)
|
||||
|
||||
if (GLM_INSTALL_ENABLE)
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
|
||||
DESTINATION ${GLM_INSTALL_CONFIGDIR})
|
||||
endif()
|
||||
|
||||
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")
|
||||
|
||||
if (GLM_INSTALL_ENABLE)
|
||||
install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# build pkg-config file
|
||||
configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)
|
||||
|
||||
# install pkg-config file
|
||||
if (GLM_INSTALL_ENABLE)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||
endif()
|
||||
|
||||
export(PACKAGE glm)
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
includedir=${prefix}/include
|
||||
|
||||
Name: GLM
|
||||
Description: OpenGL Mathematics
|
||||
Version: @GLM_VERSION@
|
||||
Cflags: -I${includedir}
|
||||
|
|
@ -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()
|
||||
|
|
@ -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()
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -0,0 +1,496 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -0,0 +1,206 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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="a00140.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="a00145.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="a00145_html_ga568b822b78f045f77c3325e165b44d5d"><div class="ttname"><a href="a00145.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="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -0,0 +1,896 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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="a00140.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="a00140.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="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -0,0 +1,793 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.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>
|
||||
|
|
@ -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.9 API documenation: _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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_da256b9dd32ba43e2eaa8a2832c37f1b.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="a00126.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="a00127.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="a00128.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="a00129.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="a00140.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="a00127_html"><div class="ttname"><a href="a00127.html">type_vec2.hpp</a></div><div class="ttdoc">GLM Core </div></div>
|
||||
<div class="ttc" id="a00126_html"><div class="ttname"><a href="a00126.html">type_vec1.hpp</a></div><div class="ttdoc">GLM Core </div></div>
|
||||
<div class="ttc" id="a00129_html"><div class="ttname"><a href="a00129.html">type_vec4.hpp</a></div><div class="ttdoc">GLM Core </div></div>
|
||||
<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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="a00128_html"><div class="ttname"><a href="a00128.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>
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00181.html">GLM_GTX_associated_min_max</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="memdesc:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga7d9c8785230c8db60f72ec8975f1ba45">More...</a><br /></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="memdesc:ga10ba6001798f42a0f941f19ff30e066a"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga10ba6001798f42a0f941f19ff30e066a">More...</a><br /></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="memdesc:ga62ca63cca6b21387b8a25474f441a869"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga62ca63cca6b21387b8a25474f441a869">More...</a><br /></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="memdesc:ga5364520173815b66a9d9e452c38bf312"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga5364520173815b66a9d9e452c38bf312">More...</a><br /></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="memdesc:gaec891e363d91abbf3a4443cf2f652209"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#gaec891e363d91abbf3a4443cf2f652209">More...</a><br /></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="memdesc:ga065a0c1eb7837118ef79be88dfd78487"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#ga065a0c1eb7837118ef79be88dfd78487">More...</a><br /></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="memdesc:ga553431a468e251623408603bcb51c9cb"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#ga553431a468e251623408603bcb51c9cb">More...</a><br /></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="memdesc:ga327136e6a568569c03a056f90814b656"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#ga327136e6a568569c03a056f90814b656">More...</a><br /></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="memdesc:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga3038ffcb43eaa6af75897a99a5047ccc">More...</a><br /></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="memdesc:gaf607886421c35cd7e4f41a50d7c330e3"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#gaf607886421c35cd7e4f41a50d7c330e3">More...</a><br /></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="memdesc:ga7a165de1af9a3f9193516a3b47407086"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga7a165de1af9a3f9193516a3b47407086">More...</a><br /></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="memdesc:ga3122fbe8133ea54749b10fb93e8a167e"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">More...</a><br /></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="memdesc:gacc01bd272359572fc28437ae214a02df"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#gacc01bd272359572fc28437ae214a02df">More...</a><br /></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="memdesc:ga8b538d10872626668a078e2bd495af25"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga8b538d10872626668a078e2bd495af25">More...</a><br /></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="memdesc:ga1dccff48fa5650c746533de83467da6e"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga1dccff48fa5650c746533de83467da6e">More...</a><br /></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="memdesc:ga076717f4e07c6ae725cc1382d1ac4869"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00181.html#ga076717f4e07c6ae725cc1382d1ac4869">More...</a><br /></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="memdesc:gad0aa8f86259a26d839d34a3577a923fc"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#gad0aa8f86259a26d839d34a3577a923fc">More...</a><br /></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="memdesc:ga5bc6b9acbf9e060d58a342fbe3b73d43"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 3 variables and returns 3 associated variable values. <a href="a00181.html#ga5bc6b9acbf9e060d58a342fbe3b73d43">More...</a><br /></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="memdesc:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga432224ebe2085eaa2b63a077ecbbbff6">More...</a><br /></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="memdesc:ga88e031f22b80215505928900d3dde549"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga88e031f22b80215505928900d3dde549">More...</a><br /></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="memdesc:ga0f63b0dce5a5c3242cc6d9847e7d14f1"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga0f63b0dce5a5c3242cc6d9847e7d14f1">More...</a><br /></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="memdesc:ga00a949fd345f4b31b259f033d3ab4a1c"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">More...</a><br /></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="a00155.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>
|
||||
|
|
@ -0,0 +1,250 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GTX_associated_min_max is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_associated_min_max 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="a00140.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="l00033"></a><span class="lineno"> 33</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="l00034"></a><span class="lineno"> 34</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="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">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="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL tvec2<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</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="l00041"></a><span class="lineno"> 41</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="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, <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="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  T x, <span class="keyword">const</span> vecType<U, P>& a,</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  T y, <span class="keyword">const</span> vecType<U, P>& b);</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, <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="l00053"></a><span class="lineno"> 53</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vecType<T, P> <span class="keyword">const</span> & y, U b);</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, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  T z, U c);</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, <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="l00068"></a><span class="lineno"> 68</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</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="l00071"></a><span class="lineno"> 71</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="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, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  T z, U c,</div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  T w, U d);</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, <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="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</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="l00089"></a><span class="lineno"> 89</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="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, <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="l00094"></a><span class="lineno"> 94</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  T z, vecType<U, P> <span class="keyword">const</span> & c,</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  T w, vecType<U, P> <span class="keyword">const</span> & d);</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, <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="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga00a949fd345f4b31b259f033d3ab4a1c">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  vecType<T, P> <span class="keyword">const</span> & z, U c,</div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  vecType<T, P> <span class="keyword">const</span> & w, U d);</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>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</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="l00113"></a><span class="lineno"> 113</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, <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="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_DECL tvec2<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</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="l00119"></a><span class="lineno"> 119</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="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">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="l00124"></a><span class="lineno"> 124</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  T y, vecType<U, P> <span class="keyword">const</span> & b);</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> 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="l00131"></a><span class="lineno"> 131</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  vecType<T, P> <span class="keyword">const</span> & y, U b);</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>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  T z, U c);</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> 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="l00146"></a><span class="lineno"> 146</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</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="l00148"></a><span class="lineno"> 148</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="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</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, <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="l00154"></a><span class="lineno"> 154</span>  GLM_FUNC_DECL vecType<T, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  T z, vecType<U, P> <span class="keyword">const</span> & c);</div>
|
||||
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div>
|
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</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="l00162"></a><span class="lineno"> 162</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  vecType<T, P> <span class="keyword">const</span> & z, U c);</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="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL U <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T z, U c,</div>
|
||||
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  T w, U d);</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">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="l00179"></a><span class="lineno"> 179</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</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="l00181"></a><span class="lineno"> 181</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="l00182"></a><span class="lineno"> 182</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="l00183"></a><span class="lineno"> 183</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="l00184"></a><span class="lineno"> 184</span> </div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</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="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  T x, vecType<U, P> <span class="keyword">const</span> & a,</div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  T y, vecType<U, P> <span class="keyword">const</span> & b,</div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  T z, vecType<U, P> <span class="keyword">const</span> & c,</div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  T w, vecType<U, P> <span class="keyword">const</span> & d);</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>  <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="l00197"></a><span class="lineno"> 197</span>  GLM_FUNC_DECL vecType<U, P> <a class="code" href="a00181.html#ga3122fbe8133ea54749b10fb93e8a167e">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  vecType<T, P> <span class="keyword">const</span> & x, U a,</div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  vecType<T, P> <span class="keyword">const</span> & y, U b,</div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  vecType<T, P> <span class="keyword">const</span> & z, U c,</div>
|
||||
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  vecType<T, P> <span class="keyword">const</span> & w, U d);</div>
|
||||
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div>
|
||||
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> } <span class="comment">//namespace glm</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"> 206</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="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00182.html">GLM_GTX_bit</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="memdesc:ga5eea3a4d429040af13d39a7d7cd84d73"><td class="mdescLeft"> </td><td class="mdescRight">Find the highest bit set to 1 in a integer variable and return its value. <a href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">More...</a><br /></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="memdesc:ga8cda2459871f574a0aecbe702ac93291"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just higher the input value. <a href="a00182.html#ga8cda2459871f574a0aecbe702ac93291">More...</a><br /></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="memdesc:gafe08808a50226b75b50e640a08b32ddc"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just higher the input value. <a href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">More...</a><br /></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="memdesc:ga3de7df63c589325101a2817a56f8e29d"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just lower the input value. <a href="a00182.html#ga3de7df63c589325101a2817a56f8e29d">More...</a><br /></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="memdesc:gae33bb1ca2b55846b23a0f0796a679195"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just lower the input value. <a href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">More...</a><br /></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="memdesc:ga5f65973a5d2ea38c719e6a663149ead9"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is the closet to the input value. <a href="a00182.html#ga5f65973a5d2ea38c719e6a663149ead9">More...</a><br /></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="memdesc:ga2d7e85995d097518b8d70cd409bda39e"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is the closet to the input value. <a href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">More...</a><br /></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="a00155.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="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>
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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 "../gtc/bitfield.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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_bit is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_bit extension is deprecated, include GLM_GTC_bitfield and GLM_GTC_integer instead")</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="a00140.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="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga5eea3a4d429040af13d39a7d7cd84d73">highestBitValue</a>(genIUType Value);</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> genIUType></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga2ff6568089f3a9b67f5c30918855fc6f">lowestBitValue</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<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="l00044"></a><span class="lineno"> 44</span> </div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#gafe08808a50226b75b50e640a08b32ddc">powerOfTwoAbove</a>(genIUType Value);</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> 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_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="l00060"></a><span class="lineno"> 60</span> </div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#gae33bb1ca2b55846b23a0f0796a679195">powerOfTwoBelow</a>(genIUType Value);</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</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, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</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="l00076"></a><span class="lineno"> 76</span> </div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class="code" href="a00182.html#ga2d7e85995d097518b8d70cd409bda39e">powerOfTwoNearest</a>(genIUType Value);</div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</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, 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="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</span> </div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> } <span class="comment">//namespace glm</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="preprocessor">#include "bit.inl"</span></div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</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="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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -0,0 +1,205 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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 class="el" href="a00159.html">GLM_GTC_bitfield</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00159.html#ga46f9295abe3b5c7658f5b13c7f819f0a">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="mdescLeft"> </td><td class="mdescRight">Set to 1 a range of bits. <a href="a00159.html#ga46f9295abe3b5c7658f5b13c7f819f0a">More...</a><br /></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="a00159.html#gad789042e84e8292ae95dc1af856f2ad5">bitfieldFillOne</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:gad789042e84e8292ae95dc1af856f2ad5"><td class="mdescLeft"> </td><td class="mdescRight">Set to 1 a range of bits. <a href="a00159.html#gad789042e84e8292ae95dc1af856f2ad5">More...</a><br /></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="a00159.html#ga697b86998b7d74ee0a69d8e9f8819fee">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="mdescLeft"> </td><td class="mdescRight">Set to 0 a range of bits. <a href="a00159.html#ga697b86998b7d74ee0a69d8e9f8819fee">More...</a><br /></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="a00159.html#gaddba3196316b0bd240295b09b43c2958">bitfieldFillZero</a> (vecType< T, P > const &Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:gaddba3196316b0bd240295b09b43c2958"><td class="mdescLeft"> </td><td class="mdescRight">Set to 0 a range of bits. <a href="a00159.html#gaddba3196316b0bd240295b09b43c2958">More...</a><br /></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="a00159.html#ga24cad0069f9a0450abd80b3e89501adf">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>
|
||||
<tr class="memdesc:ga24cad0069f9a0450abd80b3e89501adf"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#ga24cad0069f9a0450abd80b3e89501adf">More...</a><br /></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="a00159.html#ga9a4976a529aec2cee56525e1165da484">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>
|
||||
<tr class="memdesc:ga9a4976a529aec2cee56525e1165da484"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#ga9a4976a529aec2cee56525e1165da484">More...</a><br /></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="a00159.html#gac51c33a394593f0631fa3aa5bb778809">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>
|
||||
<tr class="memdesc:gac51c33a394593f0631fa3aa5bb778809"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#gac51c33a394593f0631fa3aa5bb778809">More...</a><br /></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="a00159.html#ga94f3646a5667f4be56f8dcf3310e963f">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>
|
||||
<tr class="memdesc:ga94f3646a5667f4be56f8dcf3310e963f"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#ga94f3646a5667f4be56f8dcf3310e963f">More...</a><br /></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="a00159.html#gaebb756a24a0784e3d6fba8bd011ab77a">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>
|
||||
<tr class="memdesc:gaebb756a24a0784e3d6fba8bd011ab77a"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#gaebb756a24a0784e3d6fba8bd011ab77a">More...</a><br /></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="a00159.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>
|
||||
<tr class="memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00159.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">More...</a><br /></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="a00159.html#ga8fdb724dccd4a07d57efc01147102137">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>
|
||||
<tr class="memdesc:ga8fdb724dccd4a07d57efc01147102137"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#ga8fdb724dccd4a07d57efc01147102137">More...</a><br /></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="a00159.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>
|
||||
<tr class="memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#ga9fc2a0dd5dcf8b00e113f272a5feca93">More...</a><br /></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="a00159.html#gaa901c36a842fa5d126ea650549f17b24">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>
|
||||
<tr class="memdesc:gaa901c36a842fa5d126ea650549f17b24"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#gaa901c36a842fa5d126ea650549f17b24">More...</a><br /></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="a00159.html#ga3afd6d38881fe3948c53d4214d2197fd">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>
|
||||
<tr class="memdesc:ga3afd6d38881fe3948c53d4214d2197fd"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#ga3afd6d38881fe3948c53d4214d2197fd">More...</a><br /></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="a00159.html#gad2075d96a6640121edaa98ea534102ca">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>
|
||||
<tr class="memdesc:gad2075d96a6640121edaa98ea534102ca"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#gad2075d96a6640121edaa98ea534102ca">More...</a><br /></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="a00159.html#gab19fbc739fc0cf7247978602c36f7da8">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>
|
||||
<tr class="memdesc:gab19fbc739fc0cf7247978602c36f7da8"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y and z. <a href="a00159.html#gab19fbc739fc0cf7247978602c36f7da8">More...</a><br /></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="a00159.html#ga8a44ae22f5c953b296c42d067dccbe6d">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>
|
||||
<tr class="memdesc:ga8a44ae22f5c953b296c42d067dccbe6d"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00159.html#ga8a44ae22f5c953b296c42d067dccbe6d">More...</a><br /></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="a00159.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>
|
||||
<tr class="memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00159.html#ga14bb274d54a3c26f4919dd7ed0dd0c36">More...</a><br /></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="a00159.html#ga180a63161e1319fbd5a53c84d0429c7a">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>
|
||||
<tr class="memdesc:ga180a63161e1319fbd5a53c84d0429c7a"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00159.html#ga180a63161e1319fbd5a53c84d0429c7a">More...</a><br /></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="a00159.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>
|
||||
<tr class="memdesc:gafca8768671a14c8016facccb66a89f26"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x, y, z and w. <a href="a00159.html#gafca8768671a14c8016facccb66a89f26">More...</a><br /></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="a00159.html#ga2eb49678a344ce1495bdb5586d9896b9">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>
|
||||
<tr class="memdesc:ga2eb49678a344ce1495bdb5586d9896b9"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the left. <a href="a00159.html#ga2eb49678a344ce1495bdb5586d9896b9">More...</a><br /></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="a00159.html#ga410d130917d85b865718e3ebc32cf0ef">bitfieldRotateLeft</a> (vecType< T, P > const &In, int Shift)</td></tr>
|
||||
<tr class="memdesc:ga410d130917d85b865718e3ebc32cf0ef"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the left. <a href="a00159.html#ga410d130917d85b865718e3ebc32cf0ef">More...</a><br /></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="a00159.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>
|
||||
<tr class="memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the right. <a href="a00159.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">More...</a><br /></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="a00159.html#ga96b56fd2adad1eeaee9e10dfe83904ba">bitfieldRotateRight</a> (vecType< T, P > const &In, int Shift)</td></tr>
|
||||
<tr class="memdesc:ga96b56fd2adad1eeaee9e10dfe83904ba"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the right. <a href="a00159.html#ga96b56fd2adad1eeaee9e10dfe83904ba">More...</a><br /></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="a00159.html#gad7eba518a0b71662114571ee76939f8a">mask</a> (genIUType Bits)</td></tr>
|
||||
<tr class="memdesc:gad7eba518a0b71662114571ee76939f8a"><td class="mdescLeft"> </td><td class="mdescRight">Build a mask of 'count' bits. <a href="a00159.html#gad7eba518a0b71662114571ee76939f8a">More...</a><br /></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="a00159.html#ga073dbd8642f550b51da3572541431c1c">mask</a> (vecIUType< T, P > const &v)</td></tr>
|
||||
<tr class="memdesc:ga073dbd8642f550b51da3572541431c1c"><td class="mdescLeft"> </td><td class="mdescRight">Build a mask of 'count' bits. <a href="a00159.html#ga073dbd8642f550b51da3572541431c1c">More...</a><br /></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="a00159.html">GLM_GTC_bitfield</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00155.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="a00159.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>
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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="a00140.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159.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="a00159_html_ga96b56fd2adad1eeaee9e10dfe83904ba"><div class="ttname"><a href="a00159.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="a00159_html_gafca8768671a14c8016facccb66a89f26"><div class="ttname"><a href="a00159.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="a00159_html_ga073dbd8642f550b51da3572541431c1c"><div class="ttname"><a href="a00159.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="a00159_html_gad789042e84e8292ae95dc1af856f2ad5"><div class="ttname"><a href="a00159.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="a00140_html"><div class="ttname"><a href="a00140.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="a00159_html_gaddba3196316b0bd240295b09b43c2958"><div class="ttname"><a href="a00159.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 class="ttc" id="a00159_html_ga410d130917d85b865718e3ebc32cf0ef"><div class="ttname"><a href="a00159.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><!-- 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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00183.html">GLM_GTX_closest_point</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="memdesc:gac26353282a8213e469f5e33560c1200f"><td class="mdescLeft"> </td><td class="mdescRight">Find the point on a straight line which is the closet of a point. <a href="a00183.html#gac26353282a8213e469f5e33560c1200f">More...</a><br /></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="memdesc:gadc7010070bb0cacd284f560299b21660"><td class="mdescLeft"> </td><td class="mdescRight">2d lines work as well <br /></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="a00155.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_closest_point is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_closest_point 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="a00140.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="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 tvec3<T, P> <a class="code" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  tvec3<T, P> <span class="keyword">const</span> & point,</div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  tvec3<T, P> <span class="keyword">const</span> & a, </div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  tvec3<T, 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="l00040"></a><span class="lineno"> 40</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL tvec2<T, P> <a class="code" href="a00183.html#gadc7010070bb0cacd284f560299b21660">closestPointOnLine</a>(</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  tvec2<T, P> <span class="keyword">const</span> & point,</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  tvec2<T, P> <span class="keyword">const</span> & a, </div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  tvec2<T, P> <span class="keyword">const</span> & b); </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 "closest_point.inl"</span></div>
|
||||
<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: color_encoding.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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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">color_encoding.hpp File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a class="el" href="a00160.html">GLM_GTC_color_encoding</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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:gaf2829bca5bbbd99da0cb1d20170f0096"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf2829bca5bbbd99da0cb1d20170f0096"></a>
|
||||
template<typename T , precision P> </td></tr>
|
||||
<tr class="memitem:gaf2829bca5bbbd99da0cb1d20170f0096"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gaf2829bca5bbbd99da0cb1d20170f0096">convertD50XYZToD65XYZ</a> (tvec3< T, P > const &ColorD50XYZ)</td></tr>
|
||||
<tr class="memdesc:gaf2829bca5bbbd99da0cb1d20170f0096"><td class="mdescLeft"> </td><td class="mdescRight">Convert a D50 YUV color to D65 YUV. <br /></td></tr>
|
||||
<tr class="separator:gaf2829bca5bbbd99da0cb1d20170f0096"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaee1990d4fdb1088c433e9ae4977795d2"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaee1990d4fdb1088c433e9ae4977795d2"></a>
|
||||
template<typename T , precision P> </td></tr>
|
||||
<tr class="memitem:gaee1990d4fdb1088c433e9ae4977795d2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gaee1990d4fdb1088c433e9ae4977795d2">convertD65XYZToD50XYZ</a> (tvec3< T, P > const &ColorD65XYZ)</td></tr>
|
||||
<tr class="memdesc:gaee1990d4fdb1088c433e9ae4977795d2"><td class="mdescLeft"> </td><td class="mdescRight">Convert a D65 YUV color to D50 YUV. <br /></td></tr>
|
||||
<tr class="separator:gaee1990d4fdb1088c433e9ae4977795d2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga395041b0447f08dd581496720a0a1eac"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga395041b0447f08dd581496720a0a1eac"></a>
|
||||
template<typename T , precision P> </td></tr>
|
||||
<tr class="memitem:ga395041b0447f08dd581496720a0a1eac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#ga395041b0447f08dd581496720a0a1eac">convertD65XYZToLinearSRGB</a> (tvec3< T, P > const &ColorD65XYZ)</td></tr>
|
||||
<tr class="memdesc:ga395041b0447f08dd581496720a0a1eac"><td class="mdescLeft"> </td><td class="mdescRight">Convert a D65 YUV color to linear sRGB. <br /></td></tr>
|
||||
<tr class="separator:ga395041b0447f08dd581496720a0a1eac"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa367a13bbf5d9775d6a96a4c2a398fb7"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa367a13bbf5d9775d6a96a4c2a398fb7"></a>
|
||||
template<typename T , precision P> </td></tr>
|
||||
<tr class="memitem:gaa367a13bbf5d9775d6a96a4c2a398fb7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL tvec3< T, P > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00160.html#gaa367a13bbf5d9775d6a96a4c2a398fb7">convertLinearSRGBToD65XYZ</a> (tvec3< T, P > const &ColorLinearSRGB)</td></tr>
|
||||
<tr class="memdesc:gaa367a13bbf5d9775d6a96a4c2a398fb7"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear sRGB color to D65 YUV. <br /></td></tr>
|
||||
<tr class="separator:gaa367a13bbf5d9775d6a96a4c2a398fb7"><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_color_encoding</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00155.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_color_encoding</a> (dependence) </dd></dl>
|
||||
|
||||
<p>Definition in file <a class="el" href="a00011_source.html">color_encoding.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>
|
||||
|
|
@ -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.9 API documenation: color_encoding.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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.html">gtc</a></li> </ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">color_encoding.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 "../vec3.hpp"</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <limits></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_color_encoding 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="a00140.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="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 tvec3<T, P> <a class="code" href="a00160.html#gaa367a13bbf5d9775d6a96a4c2a398fb7">convertLinearSRGBToD65XYZ</a>(tvec3<T, P> <span class="keyword">const</span>& ColorLinearSRGB);</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 tvec3<T, P> <a class="code" href="a00160.html#ga395041b0447f08dd581496720a0a1eac">convertD65XYZToLinearSRGB</a>(tvec3<T, P> <span class="keyword">const</span>& ColorD65XYZ);</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="keyword">template</span> <<span class="keyword">typename</span> T, precision P></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00160.html#gaf2829bca5bbbd99da0cb1d20170f0096">convertD50XYZToD65XYZ</a>(tvec3<T, P> <span class="keyword">const</span>& ColorD50XYZ);</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="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 tvec3<T, P> <a class="code" href="a00160.html#gaee1990d4fdb1088c433e9ae4977795d2">convertD65XYZToD50XYZ</a>(tvec3<T, P> <span class="keyword">const</span>& ColorD65XYZ);</div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</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 "color_encoding.inl"</span></div>
|
||||
<div class="ttc" id="a00160_html_gaa367a13bbf5d9775d6a96a4c2a398fb7"><div class="ttname"><a href="a00160.html#gaa367a13bbf5d9775d6a96a4c2a398fb7">glm::convertLinearSRGBToD65XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > convertLinearSRGBToD65XYZ(tvec3< T, P > const &ColorLinearSRGB)</div><div class="ttdoc">Convert a linear sRGB color to D65 YUV. </div></div>
|
||||
<div class="ttc" id="a00160_html_gaf2829bca5bbbd99da0cb1d20170f0096"><div class="ttname"><a href="a00160.html#gaf2829bca5bbbd99da0cb1d20170f0096">glm::convertD50XYZToD65XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > convertD50XYZToD65XYZ(tvec3< T, P > const &ColorD50XYZ)</div><div class="ttdoc">Convert a D50 YUV color to D65 YUV. </div></div>
|
||||
<div class="ttc" id="a00160_html_gaee1990d4fdb1088c433e9ae4977795d2"><div class="ttname"><a href="a00160.html#gaee1990d4fdb1088c433e9ae4977795d2">glm::convertD65XYZToD50XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > convertD65XYZToD50XYZ(tvec3< T, P > const &ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to D50 YUV. </div></div>
|
||||
<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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_ga395041b0447f08dd581496720a0a1eac"><div class="ttname"><a href="a00160.html#ga395041b0447f08dd581496720a0a1eac">glm::convertD65XYZToLinearSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL tvec3< T, P > convertD65XYZToLinearSRGB(tvec3< T, P > const &ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to linear sRGB. </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>
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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 class="el" href="a00161.html">GLM_GTC_color_space</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gad813dcd99644cafc775e83d6504ccb93"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a standard gamma correction. <a href="a00161.html#gad813dcd99644cafc775e83d6504ccb93">More...</a><br /></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="memdesc:ga63f8b003da7acf44370eb47bfb8b3d42"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a custom gamma correction. <a href="a00161.html#ga63f8b003da7acf44370eb47bfb8b3d42">More...</a><br /></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="memdesc:ga28e98e64347cf385cadc1ceb4def55c9"><td class="mdescLeft"> </td><td class="mdescRight">Convert a sRGB color to linear color using a standard gamma correction. <a href="a00161.html#ga28e98e64347cf385cadc1ceb4def55c9">More...</a><br /></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="memdesc:ga61c4f0efdf55c29d9cfbd26141fddef8"><td class="mdescLeft"> </td><td class="mdescRight">Convert a sRGB color to linear color using a custom gamma correction. <br /></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="a00155.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="a00012_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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="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="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="a00140.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 / Rec. 709 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="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 class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -0,0 +1,139 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00184.html">GLM_GTX_color_space</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gae72039c00a7be2f03a3b94b37a54349a"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from RGB color space to its color in HSV color space. <a href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">More...</a><br /></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="memdesc:gaa2f38a5100c3e1c7d39920df43bd8cbe"><td class="mdescLeft"> </td><td class="mdescRight">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. <a href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">More...</a><br /></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="memdesc:ga36b0619e31daf57bc4a54dac2dcf34b7"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from HSV color space to its color in RGB color space. <a href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">More...</a><br /></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="memdesc:gafecfb15d58da8445103745af3348e516"><td class="mdescLeft"> </td><td class="mdescRight">Build a saturation matrix. <a href="a00184.html#gafecfb15d58da8445103745af3348e516">More...</a><br /></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="memdesc:ga632ee8dadb44e90a05885f6f8c07d46c"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00184.html#ga632ee8dadb44e90a05885f6f8c07d46c">More...</a><br /></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="memdesc:ga2033e0566c595230714af396744e8a61"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00184.html#ga2033e0566c595230714af396744e8a61">More...</a><br /></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="a00155.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">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>
|
||||
|
|
@ -0,0 +1,150 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_color_space is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_color_space 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="a00140.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="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 tvec3<T, P> <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  tvec3<T, P> <span class="keyword">const</span> & hsvValue);</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 tvec3<T, P> <a class="code" href="a00184.html#gae72039c00a7be2f03a3b94b37a54349a">hsvColor</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  tvec3<T, P> <span class="keyword">const</span> & rgbValue);</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></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  T <span class="keyword">const</span> s);</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="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  T <span class="keyword">const</span> s,</div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  tvec3<T, P> <span class="keyword">const</span> & color);</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">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 tvec4<T, P> <a class="code" href="a00184.html#ga2033e0566c595230714af396744e8a61">saturation</a>(</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  T <span class="keyword">const</span> s,</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  tvec4<T, P> <span class="keyword">const</span> & color);</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 T <a class="code" href="a00184.html#gaa2f38a5100c3e1c7d39920df43bd8cbe">luminosity</a>(</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  tvec3<T, P> <span class="keyword">const</span> & color);</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 "color_space.inl"</span></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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00185.html">GLM_GTX_color_space_YCoCg</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<p><a href="a00014_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="memdesc:ga19481f6947c5b5482debd41e71b8c941"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCg color space. <a href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">More...</a><br /></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="memdesc:ga2e534594cc8ad252d23b14fb363ae9e2"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCgR color space. <a href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">More...</a><br /></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="memdesc:ga6d7e988a79b299ca1fa59f537e13800b"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCg color space to RGB color space. <a href="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">More...</a><br /></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="memdesc:ga4bac5462c00df0ae89242ecdbbe5dbad"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCgR color space to RGB color space. <a href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">More...</a><br /></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="a00155.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="a00014_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_color_space_YCoCg is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_color_space_YCoCg 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="a00140.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="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 tvec3<T, P> <a class="code" href="a00185.html#ga19481f6947c5b5482debd41e71b8c941">rgb2YCoCg</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</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, 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="a00185.html#ga6d7e988a79b299ca1fa59f537e13800b">YCoCg2rgb</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  tvec3<T, P> <span class="keyword">const</span> & YCoCgColor);</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> T, precision P></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga2e534594cc8ad252d23b14fb363ae9e2">rgb2YCoCgR</a>(</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  tvec3<T, P> <span class="keyword">const</span> & <a class="code" href="a00184.html#ga36b0619e31daf57bc4a54dac2dcf34b7">rgbColor</a>);</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></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL tvec3<T, P> <a class="code" href="a00185.html#ga4bac5462c00df0ae89242ecdbbe5dbad">YCoCgR2rgb</a>(</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  tvec3<T, P> <span class="keyword">const</span> & YCoCgColor);</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 "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="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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<p><a href="a00015_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">GLM Core</a> </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="a00015_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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="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="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_common.hpp</a>"</span></div>
|
||||
<div class="ttc" id="a00030_html"><div class="ttname"><a href="a00030.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00186.html">GLM_GTX_common</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="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="memdesc:ga2580f50d4064557d62f4a533dfc6c7e3"><td class="mdescLeft"> </td><td class="mdescRight">Similar to 'mod' but with a different rounding and integer support. <a href="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">More...</a><br /></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="memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="mdescLeft"> </td><td class="mdescRight">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. <a href="a00186.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">More...</a><br /></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="a00155.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="a00016_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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 "../vec2.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 "../gtc/vec1.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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># error "GLM: GLM_GTX_common is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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="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_GTX_common 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="a00140.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="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 <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="l00044"></a><span class="lineno"> 44</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="a00186.html#ga2580f50d4064557d62f4a533dfc6c7e3">fmod</a>(vecType<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 "common.inl"</span></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 class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00187.html">GLM_GTX_compatibility</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="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="memdesc:gaddcd7aa2e30e61af5b38660613d3979e"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga7f895c936f0c29c8729afbbf22806090"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gafa8d0bc8dfa7eeb928208305714f648d"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga2bfb53bc320966c85149934fffb0329d"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gad02e7dff74039bb1454643e293d85dfe"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga379c0869949e8a69c3d06d7637caa5d7"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gab8d74ea4c4f4bd980b650ffb27cdb659"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga0fc7ecb53df5be5f9d766fbbfe5190d7"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gae621c9eabcba552eea5f6ade1f403605"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gad13f8250579ebf79760dcf64215ddb17"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga6e79dbfab5917c467a154638ba27898e"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga184ee05ac2bbbf0a91dd364ba8e528db"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga83e4c62ab1addfe708dc3409cc0e5dfb"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga9770607032813e7b0ca7362a47efea1e"><td class="mdescLeft"> </td><td class="mdescRight">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga20b861a9b6e2a300323671c57a02525b"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaa16a13c6f2768e83ca133430e82ab89e"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga320d0a71a4ad9f14a1992d40546cffa7"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gade37cf30c69bacb41ceea7e32717eac7"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaf923922adf744404d5bfb3fafb7d0d8e"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaed4bc64196bd25d46f6a1f417320a391"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaeaac4d0e18164e4d2fe54432c0fbbcf6"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gac934f579ee5cf3cbdbb25b73f2640c0a"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaad84a1ea83be8fce04c1570c5e719413"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gab8bbb086c9a6c2deffbe0e80afd6be56"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga2f87500119da15e35e4a74780ba512bd"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaa4e6d53c03780dfa76bd399324f9fe37"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga686a3a5590f0a0e721faba08bda301d6"><td class="mdescLeft"> </td><td class="mdescRight">double-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga73720b8dc4620835b17f74d428f98c0c"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga872a70333dd25af68b1ebba485be9e42"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaad93cbc2b863e363d53d405d0451d03e"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga098c33a30f901f4f6a76969d6db6b01b"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gab2ce4c366abc06c8bf7fe097ecea0dde"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga2bfa618285894e34f299e4984f092d56"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaf30014e7b6874f45d58eb580d04764ff"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga2692a729a69615d72dbebbdd0eba2363"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gac38c8929ccc87a2dc81eaab97ad5190e"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga5d49ed44dd9a9e944abc30371fc9045b"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga39a2af7aa8f2d29ca40afd2256c0e7c8"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gad749b26be059f35394fd71c7f7a44034"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaf40529862492ded2f3b96a6c886f6136"><td class="mdescLeft"> </td><td class="mdescRight">single-precision floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga0670a2111b5e4a6410bd027fa0232fc3"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga056ffe02d3a45af626f8e62221881c7a"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga2eca687990bf3a08ef28bc4a9f2fe700"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gab1c5d0631a6ae34e28bfb2851da387cc"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga6dc93f0794eb5fadd7f68b85141a2434"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gad5da9e1b4e0c64c5436b5696ab49540e"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaaa6ceedf08a85e5fd73a482bc8b77b88"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaa98b1a06b802c975f02a5583f43632db"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga20c4d23defbc123ac4745c9b4262156f"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga7b00c53838143bce963177122ab92c39"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gab19c2df22e9b14081390fabd074081f1"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gaa53815539021200c4e10fd282832dcd3"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga4a3bf0ecd6f6ff60836c5bee26c14abe"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:ga3bacf576b4b29f2f2959abff7a36652d"><td class="mdescLeft"> </td><td class="mdescRight">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></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="memdesc:gac63011205bf6d0be82589dc56dd26708"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga525f3e849d0fc64807f8ab571b4545f9"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:gad328042b6734d3f2c49c0ec1328b14c0"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga09d39c391a509a045b6c7061f15bdff5"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:gaf4b04dcd3526996d68c1bfe17bfc8657"><td class="mdescLeft"> </td><td class="mdescRight">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></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="memdesc:ga553e2e95b06a0f70c718605998889d3b"><td class="mdescLeft"> </td><td class="mdescRight">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></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="memdesc:ga7dd492aa7d6ec21715f9a91b6e5e596a"><td class="mdescLeft"> </td><td class="mdescRight">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></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="memdesc:ga1be9593d810fceb278a2854da8a25273"><td class="mdescLeft"> </td><td class="mdescRight">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></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="memdesc:ga8c6a59e2f2ac84fba0c5932f1c35bf7a"><td class="mdescLeft"> </td><td class="mdescRight">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></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="memdesc:ga5494ba3a95ea6594c86fc75236886864"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga0aa79a146332650a1eb18ae996c653fe"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:gaf4c885ac72b8879b05777cb516c555c9"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga363d5d069d31a6c2cdd1e9589dde4a60"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga7609b44d8aefc5a277efe73395ff4070"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga90a1d1364a8d078846857178bdcc9af1"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:gae4b0244b0d882657bed0a99dfa33f379"><td class="mdescLeft"> </td><td class="mdescRight">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) <br /></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="memdesc:ga0fd09e616d122bc2ed9726682ffd44b7"><td class="mdescLeft"> </td><td class="mdescRight">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></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="memdesc:ga5815a26488231dfdf92242cf0c2d2107"><td class="mdescLeft"> </td><td class="mdescRight">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></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="memdesc:ga02ed1a53c6df104d56b69f8fb5e9af1b"><td class="mdescLeft"> </td><td class="mdescRight">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></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="memdesc:ga63791409bdef9745b956406afe3157f1"><td class="mdescLeft"> </td><td class="mdescRight">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></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="a00155.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">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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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> </div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># error "GLM: GLM_GTX_compatibility is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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="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_compatibility 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="preprocessor">#if GLM_COMPILER & GLM_COMPILER_VC</span></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor"># include <cfloat></span></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#elif GLM_COMPILER & GLM_COMPILER_GCC</span></div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"># include <cmath></span></div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"># if(GLM_PLATFORM & GLM_PLATFORM_ANDROID)</span></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"># undef isfinite</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">#endif//GLM_COMPILER</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">namespace </span><a class="code" href="a00140.html">glm</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> </div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00187.html#ga5494ba3a95ea6594c86fc75236886864"> 41</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="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00187.html#ga0aa79a146332650a1eb18ae996c653fe"> 42</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="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00187.html#gaf4c885ac72b8879b05777cb516c555c9"> 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, T a){<span class="keywordflow">return</span> <a class="code" href="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00187.html#ga363d5d069d31a6c2cdd1e9589dde4a60"> 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, T a){<span class="keywordflow">return</span> <a class="code" href="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00187.html#ga7609b44d8aefc5a277efe73395ff4070"> 46</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="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00187.html#ga90a1d1364a8d078846857178bdcc9af1"> 47</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="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00187.html#gae4b0244b0d882657bed0a99dfa33f379"> 48</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="a00145.html#gadccbaffe46f369cf1a96b2aef92cbfdd">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00187.html#ga0fd09e616d122bc2ed9726682ffd44b7"> 50</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="a00145.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00187.html#ga5815a26488231dfdf92242cf0c2d2107"> 51</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="a00145.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00187.html#ga02ed1a53c6df104d56b69f8fb5e9af1b"> 52</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="a00145.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00187.html#ga63791409bdef9745b956406afe3157f1"> 53</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="a00145.html#ga93bce26c7d80d30a62f5c508f8498a6c">clamp</a>(x, T(0), T(1));} </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="a00187.html#gac63011205bf6d0be82589dc56dd26708"> 55</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="a00151.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00187.html#ga525f3e849d0fc64807f8ab571b4545f9"> 56</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="a00151.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00187.html#gad328042b6734d3f2c49c0ec1328b14c0"> 57</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="a00151.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00187.html#ga09d39c391a509a045b6c7061f15bdff5"> 58</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="a00151.html#ga461e769acb8b8cb695a5a89334546611">atan</a>(x, y);} </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> 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="l00061"></a><span class="lineno"> 61</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="l00062"></a><span class="lineno"> 62</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="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</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="l00065"></a><span class="lineno"> 65</span> </div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00187.html#gaddcd7aa2e30e61af5b38660613d3979e"> 66</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="l00067"></a><span class="lineno"><a class="line" href="a00187.html#gafa8d0bc8dfa7eeb928208305714f648d"> 67</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="l00068"></a><span class="lineno"><a class="line" href="a00187.html#gab8d74ea4c4f4bd980b650ffb27cdb659"> 68</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="l00069"></a><span class="lineno"><a class="line" href="a00187.html#ga6e79dbfab5917c467a154638ba27898e"> 69</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="l00070"></a><span class="lineno"> 70</span> </div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00187.html#ga7f895c936f0c29c8729afbbf22806090"> 71</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="l00072"></a><span class="lineno"><a class="line" href="a00187.html#ga2bfb53bc320966c85149934fffb0329d"> 72</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="l00073"></a><span class="lineno"><a class="line" href="a00187.html#gad02e7dff74039bb1454643e293d85dfe"> 73</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="l00074"></a><span class="lineno"><a class="line" href="a00187.html#ga379c0869949e8a69c3d06d7637caa5d7"> 74</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="l00075"></a><span class="lineno"><a class="line" href="a00187.html#ga0fc7ecb53df5be5f9d766fbbfe5190d7"> 75</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="l00076"></a><span class="lineno"><a class="line" href="a00187.html#gae621c9eabcba552eea5f6ade1f403605"> 76</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="l00077"></a><span class="lineno"><a class="line" href="a00187.html#gad13f8250579ebf79760dcf64215ddb17"> 77</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="l00078"></a><span class="lineno"><a class="line" href="a00187.html#ga184ee05ac2bbbf0a91dd364ba8e528db"> 78</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="l00079"></a><span class="lineno"><a class="line" href="a00187.html#ga83e4c62ab1addfe708dc3409cc0e5dfb"> 79</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="l00080"></a><span class="lineno"><a class="line" href="a00187.html#ga9770607032813e7b0ca7362a47efea1e"> 80</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="l00081"></a><span class="lineno"> 81</span> </div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00187.html#ga0670a2111b5e4a6410bd027fa0232fc3"> 82</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="l00083"></a><span class="lineno"><a class="line" href="a00187.html#ga2eca687990bf3a08ef28bc4a9f2fe700"> 83</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="l00084"></a><span class="lineno"><a class="line" href="a00187.html#gaaa6ceedf08a85e5fd73a482bc8b77b88"> 84</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="l00085"></a><span class="lineno"><a class="line" href="a00187.html#gab19c2df22e9b14081390fabd074081f1"> 85</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="l00086"></a><span class="lineno"> 86</span> </div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00187.html#ga056ffe02d3a45af626f8e62221881c7a"> 87</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="l00088"></a><span class="lineno"><a class="line" href="a00187.html#gab1c5d0631a6ae34e28bfb2851da387cc"> 88</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="l00089"></a><span class="lineno"><a class="line" href="a00187.html#ga6dc93f0794eb5fadd7f68b85141a2434"> 89</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="l00090"></a><span class="lineno"><a class="line" href="a00187.html#gad5da9e1b4e0c64c5436b5696ab49540e"> 90</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="l00091"></a><span class="lineno"><a class="line" href="a00187.html#gaa98b1a06b802c975f02a5583f43632db"> 91</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="l00092"></a><span class="lineno"><a class="line" href="a00187.html#ga20c4d23defbc123ac4745c9b4262156f"> 92</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="l00093"></a><span class="lineno"><a class="line" href="a00187.html#ga7b00c53838143bce963177122ab92c39"> 93</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="l00094"></a><span class="lineno"><a class="line" href="a00187.html#gaa53815539021200c4e10fd282832dcd3"> 94</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="l00095"></a><span class="lineno"><a class="line" href="a00187.html#ga4a3bf0ecd6f6ff60836c5bee26c14abe"> 95</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="l00096"></a><span class="lineno"><a class="line" href="a00187.html#ga3bacf576b4b29f2f2959abff7a36652d"> 96</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="l00097"></a><span class="lineno"> 97</span> </div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="a00187.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead"> 98</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="l00099"></a><span class="lineno"><a class="line" href="a00187.html#ga872a70333dd25af68b1ebba485be9e42"> 99</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="l00100"></a><span class="lineno"><a class="line" href="a00187.html#ga2bfa618285894e34f299e4984f092d56"> 100</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="l00101"></a><span class="lineno"><a class="line" href="a00187.html#ga5d49ed44dd9a9e944abc30371fc9045b"> 101</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="l00102"></a><span class="lineno"> 102</span> </div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00187.html#ga73720b8dc4620835b17f74d428f98c0c"> 103</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="l00104"></a><span class="lineno"><a class="line" href="a00187.html#gaad93cbc2b863e363d53d405d0451d03e"> 104</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="l00105"></a><span class="lineno"><a class="line" href="a00187.html#ga098c33a30f901f4f6a76969d6db6b01b"> 105</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="l00106"></a><span class="lineno"><a class="line" href="a00187.html#gab2ce4c366abc06c8bf7fe097ecea0dde"> 106</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="l00107"></a><span class="lineno"><a class="line" href="a00187.html#gaf30014e7b6874f45d58eb580d04764ff"> 107</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="l00108"></a><span class="lineno"><a class="line" href="a00187.html#ga2692a729a69615d72dbebbdd0eba2363"> 108</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="l00109"></a><span class="lineno"><a class="line" href="a00187.html#gac38c8929ccc87a2dc81eaab97ad5190e"> 109</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="l00110"></a><span class="lineno"><a class="line" href="a00187.html#ga39a2af7aa8f2d29ca40afd2256c0e7c8"> 110</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="l00111"></a><span class="lineno"><a class="line" href="a00187.html#gad749b26be059f35394fd71c7f7a44034"> 111</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="l00112"></a><span class="lineno"><a class="line" href="a00187.html#gaf40529862492ded2f3b96a6c886f6136"> 112</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="l00113"></a><span class="lineno"> 113</span> </div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="a00187.html#ga20b861a9b6e2a300323671c57a02525b"> 114</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="l00115"></a><span class="lineno"><a class="line" href="a00187.html#gaa16a13c6f2768e83ca133430e82ab89e"> 115</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="l00116"></a><span class="lineno"><a class="line" href="a00187.html#gaed4bc64196bd25d46f6a1f417320a391"> 116</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="l00117"></a><span class="lineno"><a class="line" href="a00187.html#gab8bbb086c9a6c2deffbe0e80afd6be56"> 117</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="l00118"></a><span class="lineno"> 118</span> </div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00187.html#ga45f16a4dd0db1f199afaed9fd12fe9a8"> 119</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="l00120"></a><span class="lineno"><a class="line" href="a00187.html#ga320d0a71a4ad9f14a1992d40546cffa7"> 120</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="l00121"></a><span class="lineno"><a class="line" href="a00187.html#gade37cf30c69bacb41ceea7e32717eac7"> 121</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="l00122"></a><span class="lineno"><a class="line" href="a00187.html#gaf923922adf744404d5bfb3fafb7d0d8e"> 122</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="l00123"></a><span class="lineno"><a class="line" href="a00187.html#gaeaac4d0e18164e4d2fe54432c0fbbcf6"> 123</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="l00124"></a><span class="lineno"><a class="line" href="a00187.html#gac934f579ee5cf3cbdbb25b73f2640c0a"> 124</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="l00125"></a><span class="lineno"><a class="line" href="a00187.html#gaad84a1ea83be8fce04c1570c5e719413"> 125</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="l00126"></a><span class="lineno"><a class="line" href="a00187.html#ga2f87500119da15e35e4a74780ba512bd"> 126</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="l00127"></a><span class="lineno"><a class="line" href="a00187.html#gaa4e6d53c03780dfa76bd399324f9fe37"> 127</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="l00128"></a><span class="lineno"><a class="line" href="a00187.html#ga686a3a5590f0a0e721faba08bda301d6"> 128</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="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 "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="a00017_source.html#l00087">compatibility.hpp:87</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="a00017_source.html#l00076">compatibility.hpp:76</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="a00017_source.html#l00108">compatibility.hpp:108</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="a00017_source.html#l00090">compatibility.hpp:90</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="a00017_source.html#l00106">compatibility.hpp:106</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="a00017_source.html#l00111">compatibility.hpp:111</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="a00017_source.html#l00114">compatibility.hpp:114</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="a00017_source.html#l00120">compatibility.hpp:120</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="a00017_source.html#l00125">compatibility.hpp:125</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="a00017_source.html#l00088">compatibility.hpp:88</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="a00017_source.html#l00083">compatibility.hpp:83</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="a00017_source.html#l00116">compatibility.hpp:116</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="a00017_source.html#l00048">compatibility.hpp:48</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="a00017_source.html#l00092">compatibility.hpp:92</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="a00017_source.html#l00124">compatibility.hpp:124</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="a00017_source.html#l00073">compatibility.hpp:73</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="a00017_source.html#l00080">compatibility.hpp:80</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="a00017_source.html#l00079">compatibility.hpp:79</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="a00017_source.html#l00104">compatibility.hpp:104</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="a00017_source.html#l00053">compatibility.hpp:53</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="a00017_source.html#l00067">compatibility.hpp:67</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="a00017_source.html#l00101">compatibility.hpp:101</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="a00017_source.html#l00112">compatibility.hpp:112</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="a00017_source.html#l00110">compatibility.hpp:110</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="a00017_source.html#l00098">compatibility.hpp:98</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="a00017_source.html#l00107">compatibility.hpp:107</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="a00017_source.html#l00126">compatibility.hpp:126</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="a00017_source.html#l00127">compatibility.hpp:127</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="a00017_source.html#l00119">compatibility.hpp:119</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="a00017_source.html#l00094">compatibility.hpp:94</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="a00017_source.html#l00085">compatibility.hpp:85</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="a00017_source.html#l00068">compatibility.hpp:68</a></div></div>
|
||||
<div class="ttc" id="a00145_html_ga93bce26c7d80d30a62f5c508f8498a6c"><div class="ttname"><a href="a00145.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_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="a00017_source.html#l00091">compatibility.hpp:91</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="a00017_source.html#l00123">compatibility.hpp:123</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="a00017_source.html#l00058">compatibility.hpp:58</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="a00017_source.html#l00117">compatibility.hpp:117</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="a00017_source.html#l00078">compatibility.hpp:78</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="a00017_source.html#l00122">compatibility.hpp:122</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="a00017_source.html#l00095">compatibility.hpp:95</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="a00017_source.html#l00121">compatibility.hpp:121</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="a00017_source.html#l00105">compatibility.hpp:105</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="a00017_source.html#l00093">compatibility.hpp:93</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="a00017_source.html#l00074">compatibility.hpp:74</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="a00017_source.html#l00096">compatibility.hpp:96</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="a00017_source.html#l00082">compatibility.hpp:82</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="a00017_source.html#l00099">compatibility.hpp:99</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="a00017_source.html#l00072">compatibility.hpp:72</a></div></div>
|
||||
<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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_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="a00017_source.html#l00069">compatibility.hpp:69</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="a00017_source.html#l00128">compatibility.hpp:128</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="a00017_source.html#l00066">compatibility.hpp:66</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="a00017_source.html#l00077">compatibility.hpp:77</a></div></div>
|
||||
<div class="ttc" id="a00145_html_gadccbaffe46f369cf1a96b2aef92cbfdd"><div class="ttname"><a href="a00145.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="a00151_html_ga461e769acb8b8cb695a5a89334546611"><div class="ttname"><a href="a00151.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_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="a00017_source.html#l00075">compatibility.hpp:75</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="a00017_source.html#l00109">compatibility.hpp:109</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="a00017_source.html#l00089">compatibility.hpp:89</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="a00017_source.html#l00100">compatibility.hpp:100</a></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="a00017_source.html#l00084">compatibility.hpp:84</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="a00017_source.html#l00103">compatibility.hpp:103</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="a00017_source.html#l00115">compatibility.hpp:115</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="a00017_source.html#l00071">compatibility.hpp:71</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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00188.html">GLM_GTX_component_wise</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gaf71833350e15e74d31cbf8a3e7f27051"><td class="mdescLeft"> </td><td class="mdescRight">Add all vector components together. <a href="a00188.html#gaf71833350e15e74d31cbf8a3e7f27051">More...</a><br /></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="memdesc:gabfa4bb19298c8c73d4217ba759c496b6"><td class="mdescLeft"> </td><td class="mdescRight">Find the maximum value between single vector components. <a href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">More...</a><br /></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="memdesc:gab5d0832b5c7bb01b8d7395973bfb1425"><td class="mdescLeft"> </td><td class="mdescRight">Find the minimum value between single vector components. <a href="a00188.html#gab5d0832b5c7bb01b8d7395973bfb1425">More...</a><br /></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="memdesc:gae8ab88024197202c9479d33bdc5a8a5d"><td class="mdescLeft"> </td><td class="mdescRight">Multiply all vector components together. <a href="a00188.html#gae8ab88024197202c9479d33bdc5a8a5d">More...</a><br /></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="memdesc:gaeb34fdf090d2d4da9babcdfec267f09e"><td class="mdescLeft"> </td><td class="mdescRight">Convert an integer vector to a normalized float vector. <a href="a00188.html#gaeb34fdf090d2d4da9babcdfec267f09e">More...</a><br /></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="memdesc:gaea99a3271016bfd331d9fa7587f3db37"><td class="mdescLeft"> </td><td class="mdescRight">Convert a normalized float vector to an integer vector. <a href="a00188.html#gaea99a3271016bfd331d9fa7587f3db37">More...</a><br /></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="a00155.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="a00018_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>
|
||||
|
|
@ -0,0 +1,145 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># error "GLM: GLM_GTX_component_wise is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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="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_GTX_component_wise 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="a00140.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="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</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="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, <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="l00044"></a><span class="lineno"> 44</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="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> genType> </div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</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="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> genType> </div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</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="l00055"></a><span class="lineno"> 55</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 <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="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 <a class="code" href="a00188.html#gabfa4bb19298c8c73d4217ba759c496b6">compMax</a>(genType <span class="keyword">const</span> & v);</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> }<span class="comment">//namespace glm</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="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="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 class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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 class="el" href="a00162.html">GLM_GTC_constants</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="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="memdesc:ga4b7956eb6e2fbedfc7cf2e46e85c5139"><td class="mdescLeft"> </td><td class="mdescRight">Return e constant. <a href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">More...</a><br /></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="memdesc:ga2a1e57fc5592b69cfae84174cbfc9429"><td class="mdescLeft"> </td><td class="mdescRight">Return the epsilon constant for floating point types. <a href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">More...</a><br /></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="memdesc:gad8fe2e6f90bce9d829e9723b649fbd42"><td class="mdescLeft"> </td><td class="mdescRight">Return Euler's constant. <a href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">More...</a><br /></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="memdesc:ga753950e5140e4ea6a88e4a18ba61dc09"><td class="mdescLeft"> </td><td class="mdescRight">Return 4 / pi. <a href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">More...</a><br /></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="memdesc:ga748cf8642830657c5b7eae04d0a80899"><td class="mdescLeft"> </td><td class="mdescRight">Return the golden ratio constant. <a href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">More...</a><br /></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="memdesc:ga0c36b41d462e45641faf7d7938948bac"><td class="mdescLeft"> </td><td class="mdescRight">Return pi / 2. <a href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">More...</a><br /></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="memdesc:gaca94292c839ed31a405ab7a81ae7e850"><td class="mdescLeft"> </td><td class="mdescRight">Return ln(ln(2)). <a href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">More...</a><br /></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="memdesc:gaf97ebc6c059ffd788e6c4946f71ef66c"><td class="mdescLeft"> </td><td class="mdescRight">Return ln(10). <a href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">More...</a><br /></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="memdesc:ga24f4d27765678116f41a2f336ab7975c"><td class="mdescLeft"> </td><td class="mdescRight">Return ln(2). <a href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">More...</a><br /></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="memdesc:ga39c2fb227631ca25894326529bdd1ee5"><td class="mdescLeft"> </td><td class="mdescRight">Return 1. <a href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">More...</a><br /></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="memdesc:ga555150da2b06d23c8738981d5013e0eb"><td class="mdescLeft"> </td><td class="mdescRight">Return 1 / pi. <a href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">More...</a><br /></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="memdesc:ga788fa23a0939bac4d1d0205fb4f35818"><td class="mdescLeft"> </td><td class="mdescRight">Return 1 / sqrt(2). <a href="a00162.html#ga788fa23a0939bac4d1d0205fb4f35818">More...</a><br /></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="memdesc:ga7c922b427986cbb2e4c6ac69874eefbc"><td class="mdescLeft"> </td><td class="mdescRight">Return 1 / (pi * 2). <a href="a00162.html#ga7c922b427986cbb2e4c6ac69874eefbc">More...</a><br /></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="memdesc:ga94bafeb2a0f23ab6450fed1f98ee4e45"><td class="mdescLeft"> </td><td class="mdescRight">Return the pi constant. <a href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">More...</a><br /></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="memdesc:ga3c9df42bd73c519a995c43f0f99e77e0"><td class="mdescLeft"> </td><td class="mdescRight">Return pi / 4. <a href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">More...</a><br /></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="memdesc:gae9ebbded75b53d4faeb1e4ef8b3347a2"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(5). <a href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">More...</a><br /></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="memdesc:ga4e276cb823cc5e612d4f89ed99c75039"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(pi / 2). <a href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">More...</a><br /></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="memdesc:ga4129412e96b33707a77c1a07652e23e2"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(ln(4)). <a href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">More...</a><br /></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="memdesc:ga261380796b2cd496f68d2cf1d08b8eb9"><td class="mdescLeft"> </td><td class="mdescRight">Return square root of pi. <a href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">More...</a><br /></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="memdesc:ga4f286be4abe88be1eed7d2a9f6cb193e"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(3). <a href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">More...</a><br /></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="memdesc:ga74e607d29020f100c0d0dc46ce2ca950"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(2). <a href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">More...</a><br /></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="memdesc:ga2bcedc575039fe0cd765742f8bbb0bd3"><td class="mdescLeft"> </td><td class="mdescRight">Return sqrt(2 * pi). <a href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">More...</a><br /></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="memdesc:ga3077c6311010a214b69ddc8214ec13b5"><td class="mdescLeft"> </td><td class="mdescRight">Return 1 / 3. <a href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">More...</a><br /></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="memdesc:gae94950df74b0ce382b1fc1d978ef7394"><td class="mdescLeft"> </td><td class="mdescRight">Return pi / 2 * 3. <a href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">More...</a><br /></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="memdesc:ga74eadc8a211253079683219a3ea0462a"><td class="mdescLeft"> </td><td class="mdescRight">Return 2 / pi. <a href="a00162.html#ga74eadc8a211253079683219a3ea0462a">More...</a><br /></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="memdesc:ga5827301817640843cf02026a8d493894"><td class="mdescLeft"> </td><td class="mdescRight">Return 2 / sqrt(pi). <a href="a00162.html#ga5827301817640843cf02026a8d493894">More...</a><br /></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="memdesc:gaa5276a4617566abcfe49286f40e3a256"><td class="mdescLeft"> </td><td class="mdescRight">Return pi * 2. <a href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">More...</a><br /></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="memdesc:ga9b4d2f4322edcf63a6737b92a29dd1f5"><td class="mdescLeft"> </td><td class="mdescRight">Return 2 / 3. <a href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">More...</a><br /></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="memdesc:ga788f5a421fc0f40a1296ebc094cbaa8a"><td class="mdescLeft"> </td><td class="mdescRight">Return 0. <a href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">More...</a><br /></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="a00155.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="a00019_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>
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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="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="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_constants 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="a00140.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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</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> genType></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga788f5a421fc0f40a1296ebc094cbaa8a">zero</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> genType></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga39c2fb227631ca25894326529bdd1ee5">one</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> genType></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga94bafeb2a0f23ab6450fed1f98ee4e45">pi</a>();</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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaa5276a4617566abcfe49286f40e3a256">two_pi</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">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga261380796b2cd496f68d2cf1d08b8eb9">root_pi</a>();</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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga0c36b41d462e45641faf7d7938948bac">half_pi</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"> 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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#gae94950df74b0ce382b1fc1d978ef7394">three_over_two_pi</a>();</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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga3c9df42bd73c519a995c43f0f99e77e0">quarter_pi</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> genType></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga555150da2b06d23c8738981d5013e0eb">one_over_pi</a>();</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> genType></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</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="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> genType></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga74eadc8a211253079683219a3ea0462a">two_over_pi</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"> 89</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga753950e5140e4ea6a88e4a18ba61dc09">four_over_pi</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">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</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="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> genType></div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</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="l00101"></a><span class="lineno"> 101</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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4e276cb823cc5e612d4f89ed99c75039">root_half_pi</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> genType></div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga2bcedc575039fe0cd765742f8bbb0bd3">root_two_pi</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> genType></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4129412e96b33707a77c1a07652e23e2">root_ln_four</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> genType></div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</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> genType></div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gad8fe2e6f90bce9d829e9723b649fbd42">euler</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"> 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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga74e607d29020f100c0d0dc46ce2ca950">root_two</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">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga4f286be4abe88be1eed7d2a9f6cb193e">root_three</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"> 139</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gae9ebbded75b53d4faeb1e4ef8b3347a2">root_five</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"> 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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga24f4d27765678116f41a2f336ab7975c">ln_two</a>();</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> genType></div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaf97ebc6c059ffd788e6c4946f71ef66c">ln_ten</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">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#gaca94292c839ed31a405ab7a81ae7e850">ln_ln_two</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"> 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 GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga3077c6311010a214b69ddc8214ec13b5">third</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"> 164</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga9b4d2f4322edcf63a6737b92a29dd1f5">two_thirds</a>();</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="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00162.html#ga748cf8642830657c5b7eae04d0a80899">golden_ratio</a>();</div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </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">#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="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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00189.html">GLM_GTX_dual_quaternion</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="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="memdesc:ga3d71f98d84ba59dfe4e369fde4714cd6"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of default double-precision floating-point numbers. <a href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">More...</a><br /></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="memdesc:gae93abee0c979902fbec6a7bee0f6fae1"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of floating-point numbers. <a href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">More...</a><br /></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="memdesc:ga237c2b9b42c9a930e49de5840ae0f930"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of single-precision floating-point numbers. <a href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">More...</a><br /></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="memdesc:ga8f67eafa7197d7a668dad5105a463d2a"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of high double-precision floating-point numbers. <a href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a">More...</a><br /></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="memdesc:ga9ef5bf1da52a9d4932335a517086ceaf"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of high single-precision floating-point numbers. <a href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf">More...</a><br /></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="memdesc:ga4c4e55e9c99dc57b299ed590968da564"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of high single-precision floating-point numbers. <a href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564">More...</a><br /></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="memdesc:gab4c5103338af3dac7e0fbc86895a3f1a"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of low double-precision floating-point numbers. <a href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a">More...</a><br /></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="memdesc:gade05d29ebd4deea0f883d0e1bb4169aa"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of low single-precision floating-point numbers. <a href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa">More...</a><br /></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="memdesc:gaa38f671be25a7f3b136a452a8bb42860"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of low single-precision floating-point numbers. <a href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860">More...</a><br /></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="memdesc:ga0fb11e48e2d16348ccb06a25213641b4"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of medium double-precision floating-point numbers. <a href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4">More...</a><br /></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="memdesc:gaa7aeb54c167712b38f2178a1be2360ad"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of medium single-precision floating-point numbers. <a href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad">More...</a><br /></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="memdesc:ga4a6b594ff7e81150d8143001367a9431"><td class="mdescLeft"> </td><td class="mdescRight">Dual-quaternion of medium single-precision floating-point numbers. <a href="a00189.html#ga4a6b594ff7e81150d8143001367a9431">More...</a><br /></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="memdesc:gada9799afe2b62394dc498534beb5bc78"><td class="mdescLeft"> </td><td class="mdescRight">Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. <a href="a00189.html#gada9799afe2b62394dc498534beb5bc78">More...</a><br /></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="memdesc:ga20eb5758beb73cc6dbc2d9104f03ec20"><td class="mdescLeft"> </td><td class="mdescRight">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. <a href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">More...</a><br /></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="memdesc:ga2149d3cb8af04d9530de0cd16aa1aab2"><td class="mdescLeft"> </td><td class="mdescRight">Returns the q inverse. <a href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">More...</a><br /></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="memdesc:ga8039b88397ca09275be924a26a806a59"><td class="mdescLeft"> </td><td class="mdescRight">Returns the linear interpolation of two dual quaternion. <a href="a00189.html#ga8039b88397ca09275be924a26a806a59">More...</a><br /></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="memdesc:ga2d124748183e12db8288eeaca350298e"><td class="mdescLeft"> </td><td class="mdescRight">Converts a quaternion to a 2 * 4 matrix. <a href="a00189.html#ga2d124748183e12db8288eeaca350298e">More...</a><br /></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="memdesc:ga576745d979e3c079a64152490c816954"><td class="mdescLeft"> </td><td class="mdescRight">Converts a quaternion to a 3 * 4 matrix. <a href="a00189.html#ga576745d979e3c079a64152490c816954">More...</a><br /></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="memdesc:ga495818aa48c23e9e730f87a3c337d1d5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the normalized quaternion. <a href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">More...</a><br /></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="a00155.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="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="a00020_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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/constants.hpp"</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> </div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"># error "GLM: GLM_GTX_dual_quaternion is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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_dual_quaternion extension included")</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 class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">namespace </span><a class="code" href="a00140.html">glm</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> </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 = defaultp></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">struct </span>tdualquat</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="comment">// -- Implementation detail --</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">typedef</span> T value_type;</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keyword">typedef</span> glm::tquat<T, P> part_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>  <span class="comment">// -- Data --</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>  glm::tquat<T, P> real, dual;</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">// -- Component accesses --</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">typedef</span> length_t length_type;</div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL <span class="keyword">static</span> length_type <a class="code" href="a00147.html#ga18d45e3d4c7705e67ccfabd99e521604">length</a>(){<span class="keywordflow">return</span> 2;}</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_FUNC_DECL part_type & operator[](length_type i);</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</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="l00056"></a><span class="lineno"> 56</span> </div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="comment">// -- Implicit basic constructors --</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>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT_CTOR;</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const & d) GLM_DEFAULT;</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  template <precision Q></div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const & d);</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="comment">// -- Explicit basic constructors --</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>  GLM_FUNC_DECL GLM_CONSTEXPR_CTOR explicit tdualquat(ctor);</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real);</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tquat<T, P> const & real, tquat<T, P> const & dual);</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">// -- Conversion constructors --</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>  template <typename U, precision Q></div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, Q> const & q);</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 GLM_EXPLICIT tdualquat(tmat2x4<T, P> const & holder_mat);</div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL GLM_EXPLICIT tdualquat(tmat3x4<T, P> const & aug_mat);</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">// -- Unary arithmetic operators --</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 tdualquat<T, P> & operator=(tdualquat<T, P> const & m) GLM_DEFAULT;</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>  template <typename U></div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  GLM_FUNC_DECL tdualquat<T, P> & operator=(tdualquat<U, P> const & m);</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 tdualquat<T, P> & operator*=(U s);</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 tdualquat<T, P> & operator/=(U s);</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">// -- Unary bit operators --</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>  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>  template <typename T, precision P></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL tdualquat<T, P> operator-(tdualquat<T, P> 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>  <span class="comment">// -- Binary 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>  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 tdualquat<T, P> operator*(tdualquat<T, P> const & q, tdualquat<T, P> 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>  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*(tdualquat<T, P> const & q, tvec3<T, P> const & v);</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 tvec3<T, P> operator*(tvec3<T, P> const & v, tdualquat<T, P> const & q);</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*(tdualquat<T, P> const & q, tvec4<T, P> const & v);</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 tvec4<T, P> operator*(tvec4<T, P> const & v, tdualquat<T, P> const & q);</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*(tdualquat<T, P> const & q, T const & s);</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*(T const & s, tdualquat<T, P> const & q);</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 tdualquat<T, P> operator/(tdualquat<T, P> const & q, T const & s);</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">// -- Boolean 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 <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="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 <span class="keywordtype">bool</span> operator!=(tdualquat<T, P> const & q1, tdualquat<T, P> const & q2);</div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</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 tdualquat<T, P> <a class="code" href="a00189.html#ga495818aa48c23e9e730f87a3c337d1d5">normalize</a>(tdualquat<T, P> const & q);</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</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 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="l00147"></a><span class="lineno"> 147</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 tdualquat<T, P> <a class="code" href="a00189.html#ga2149d3cb8af04d9530de0cd16aa1aab2">inverse</a>(tdualquat<T, P> const & q);</div>
|
||||
<div class="line"><a name="l00153"></a><span class="lineno"> 153</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 tmat2x4<T, P> <a class="code" href="a00189.html#ga2d124748183e12db8288eeaca350298e">mat2x4_cast</a>(tdualquat<T, P> const & x);</div>
|
||||
<div class="line"><a name="l00159"></a><span class="lineno"> 159</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> <a class="code" href="a00189.html#ga576745d979e3c079a64152490c816954">mat3x4_cast</a>(tdualquat<T, P> const & x);</div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</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 tdualquat<T, P> <a class="code" href="a00189.html#ga20eb5758beb73cc6dbc2d9104f03ec20">dualquat_cast</a>(tmat2x4<T, P> 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>  template <typename T, precision P></div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</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="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="l00182"></a><span class="lineno"><a class="line" href="a00189.html#gade05d29ebd4deea0f883d0e1bb4169aa"> 182</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="l00183"></a><span class="lineno"> 183</span> </div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="a00189.html#gaa7aeb54c167712b38f2178a1be2360ad"> 187</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="l00188"></a><span class="lineno"> 188</span> </div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00189.html#ga9ef5bf1da52a9d4932335a517086ceaf"> 192</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="l00193"></a><span class="lineno"> 193</span> </div>
|
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="a00189.html#gaa38f671be25a7f3b136a452a8bb42860"> 198</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="l00199"></a><span class="lineno"> 199</span> </div>
|
||||
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00189.html#ga4a6b594ff7e81150d8143001367a9431"> 203</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="l00204"></a><span class="lineno"> 204</span> </div>
|
||||
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="a00189.html#ga4c4e55e9c99dc57b299ed590968da564"> 208</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="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="l00214"></a><span class="lineno"><a class="line" href="a00189.html#gab4c5103338af3dac7e0fbc86895a3f1a"> 214</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="l00215"></a><span class="lineno"> 215</span> </div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="a00189.html#ga0fb11e48e2d16348ccb06a25213641b4"> 219</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="l00220"></a><span class="lineno"> 220</span> </div>
|
||||
<div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="a00189.html#ga8f67eafa7197d7a668dad5105a463d2a"> 224</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="l00225"></a><span class="lineno"> 225</span> </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="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
|
||||
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">typedef</span> highp_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
|
||||
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
|
||||
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930"> 236</a></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> highp_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> highp_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> mediump_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> mediump_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">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))</span></div>
|
||||
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keyword">typedef</span> lowp_fdualquat <a class="code" href="a00189.html#gae93abee0c979902fbec6a7bee0f6fae1">dualquat</a>;</div>
|
||||
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keyword">typedef</span> lowp_fdualquat <a class="code" href="a00189.html#ga237c2b9b42c9a930e49de5840ae0f930">fdualquat</a>;</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"># error "GLM error: multiple default precision requested for single-precision floating-point types"</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> </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="preprocessor">#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>
|
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keyword">typedef</span> highp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
|
||||
<div class="line"><a name="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</span>  <span class="keyword">typedef</span> highp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
|
||||
<div class="line"><a name="l00258"></a><span class="lineno"> 258</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="l00259"></a><span class="lineno"> 259</span>  <span class="keyword">typedef</span> mediump_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</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="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">typedef</span> lowp_ddualquat <a class="code" href="a00189.html#ga3d71f98d84ba59dfe4e369fde4714cd6">ddualquat</a>;</div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor">#else</span></div>
|
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"># error "GLM error: Multiple default precision requested for double-precision floating-point types"</span></div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
||||
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> } <span class="comment">//namespace glm</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> <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="a00020_source.html#l00198">dual_quaternion.hpp:198</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="a00020_source.html#l00236">dual_quaternion.hpp:236</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="a00020_source.html#l00219">dual_quaternion.hpp:219</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="a00020_source.html#l00203">dual_quaternion.hpp:203</a></div></div>
|
||||
<div class="ttc" id="a00147_html_ga18d45e3d4c7705e67ccfabd99e521604"><div class="ttname"><a href="a00147.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_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="a00020_source.html#l00214">dual_quaternion.hpp:214</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="a00020_source.html#l00255">dual_quaternion.hpp:255</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="a00020_source.html#l00231">dual_quaternion.hpp:231</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="a00020_source.html#l00208">dual_quaternion.hpp:208</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="a00020_source.html#l00187">dual_quaternion.hpp:187</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="a00140_html"><div class="ttname"><a href="a00140.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_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="a00020_source.html#l00192">dual_quaternion.hpp:192</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="a00020_source.html#l00182">dual_quaternion.hpp:182</a></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="a00020_source.html#l00224">dual_quaternion.hpp:224</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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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 class="el" href="a00163.html">GLM_GTC_epsilon</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gaca9443f217dc36587624247245522331"><td class="mdescLeft"> </td><td class="mdescRight">Returns the component-wise comparison of |x - y| < epsilon. <a href="a00163.html#gaca9443f217dc36587624247245522331">More...</a><br /></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="memdesc:gaa7f227999ca09e7ca994e8b35aba47bb"><td class="mdescLeft"> </td><td class="mdescRight">Returns the component-wise comparison of |x - y| < epsilon. <a href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">More...</a><br /></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="memdesc:ga14e2888a304654ade8a3996024e2739c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the component-wise comparison of |x - y| < epsilon. <a href="a00163.html#ga14e2888a304654ade8a3996024e2739c">More...</a><br /></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="memdesc:ga50a92103fb0cbd796908e1bf20c79aaf"><td class="mdescLeft"> </td><td class="mdescRight">Returns the component-wise comparison of |x - y| >= epsilon. <a href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">More...</a><br /></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="a00155.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="a00021_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_7997edb062bdde9a99cb6835d42b0d9d.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="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">// 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> </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_GTC_epsilon 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="a00140.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="l00033"></a><span class="lineno"> 33</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="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vecType<bool, P> <a class="code" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vecType<T, P> <span class="keyword">const</span> & x,</div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vecType<T, P> <span class="keyword">const</span> & y,</div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  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="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="keywordtype">bool</span> <a class="code" href="a00163.html#gaa7f227999ca09e7ca994e8b35aba47bb">epsilonEqual</a>(</div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  genType <span class="keyword">const</span> & x,</div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  genType <span class="keyword">const</span> & y,</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  genType <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="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</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="l00055"></a><span class="lineno"> 55</span>  genType <span class="keyword">const</span> & x,</div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  genType <span class="keyword">const</span> & y,</div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</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="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> genType></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_DECL <span class="keywordtype">bool</span> <a class="code" href="a00163.html#ga50a92103fb0cbd796908e1bf20c79aaf">epsilonNotEqual</a>(</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  genType <span class="keyword">const</span> & x,</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  genType <span class="keyword">const</span> & y,</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  genType <span class="keyword">const</span> & <a class="code" href="a00162.html#ga2a1e57fc5592b69cfae84174cbfc9429">epsilon</a>);</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 "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="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 class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -0,0 +1,183 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00190.html">GLM_GTX_euler_angles</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<p><a href="a00022_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="memdesc:ga82cd3b8a04943f1a0d1a562aff358dc8"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. <a href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">More...</a><br /></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="memdesc:ga8bf84f92ca976a7f50dbe4b30ceb72dd"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). <a href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">More...</a><br /></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="memdesc:gaaedda1657a1aebe0a904d864b33844e8"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). <a href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">More...</a><br /></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="memdesc:gab2d7dc94b9a7519d741aaa208c7a335b"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). <a href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">More...</a><br /></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="memdesc:gaeb193af1184bdf39c23636d756e1ff33"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. <a href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">More...</a><br /></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="memdesc:gafdd02f9a37511190962119adef5c1c25"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). <a href="a00190.html#gafdd02f9a37511190962119adef5c1c25">More...</a><br /></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="memdesc:ga0242b5ab68651db70c6025815549427f"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). <a href="a00190.html#ga0242b5ab68651db70c6025815549427f">More...</a><br /></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="memdesc:ga1033f84f51d61646145352ef0c1bb58c"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). <a href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">More...</a><br /></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="memdesc:gab59c4fe7f735568255cc19fddd3ddfcd"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. <a href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">More...</a><br /></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="memdesc:gaef83cf40bd9ae780011b29970f16f622"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). <a href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">More...</a><br /></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="memdesc:ga02f037926568bbd12dfece3b28b20343"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). <a href="a00190.html#ga02f037926568bbd12dfece3b28b20343">More...</a><br /></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="memdesc:gad5838a4c87ce2b8ee4c4e17bd162fd14"><td class="mdescLeft"> </td><td class="mdescRight">Extracts the (X * Y * Z) Euler angles from the rotation matrix M. <a href="a00190.html#gad5838a4c87ce2b8ee4c4e17bd162fd14">More...</a><br /></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="memdesc:ga6f465681cbbc575ad93a53ec918dacf3"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 2D 2 * 2 rotation matrix from an euler angle. <a href="a00190.html#ga6f465681cbbc575ad93a53ec918dacf3">More...</a><br /></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="memdesc:gab188e2526dea3c003e86e298f618085e"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. <a href="a00190.html#gab188e2526dea3c003e86e298f618085e">More...</a><br /></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="memdesc:ga33f0d790cecd8337ee83f8e3a8109b11"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). <a href="a00190.html#ga33f0d790cecd8337ee83f8e3a8109b11">More...</a><br /></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="memdesc:ga4e25c9468b6f002c76e9a2412bcfa503"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). <a href="a00190.html#ga4e25c9468b6f002c76e9a2412bcfa503">More...</a><br /></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="memdesc:gaf9c8d0f1df88c5344165600774489bc5"><td class="mdescLeft"> </td><td class="mdescRight">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). <a href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">More...</a><br /></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="a00155.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="a00022_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>
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_euler_angles is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_euler_angles 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="a00140.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="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga82cd3b8a04943f1a0d1a562aff358dc8">eulerAngleX</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  T <span class="keyword">const</span> & angleX);</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 tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaeb193af1184bdf39c23636d756e1ff33">eulerAngleY</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  T <span class="keyword">const</span> & angleY);</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></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gab59c4fe7f735568255cc19fddd3ddfcd">eulerAngleZ</a>(</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  T <span class="keyword">const</span> & angleZ);</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></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga8bf84f92ca976a7f50dbe4b30ceb72dd">eulerAngleXY</a>(</div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  T <span class="keyword">const</span> & angleX,</div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  T <span class="keyword">const</span> & angleY);</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">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gafdd02f9a37511190962119adef5c1c25">eulerAngleYX</a>(</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  T <span class="keyword">const</span> & angleY,</div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  T <span class="keyword">const</span> & angleX);</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></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gab2d7dc94b9a7519d741aaa208c7a335b">eulerAngleXZ</a>(</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  T <span class="keyword">const</span> & angleX,</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  T <span class="keyword">const</span> & angleZ);</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></div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaef83cf40bd9ae780011b29970f16f622">eulerAngleZX</a>(</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#gad4a4448baedb198b2b1e7880d2544dc9">angle</a>,</div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  T <span class="keyword">const</span> & angleX);</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></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga1033f84f51d61646145352ef0c1bb58c">eulerAngleYZ</a>(</div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  T <span class="keyword">const</span> & angleY,</div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  T <span class="keyword">const</span> & angleZ);</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">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#ga02f037926568bbd12dfece3b28b20343">eulerAngleZY</a>(</div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  T <span class="keyword">const</span> & angleZ,</div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  T <span class="keyword">const</span> & angleY);</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 tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaaedda1657a1aebe0a904d864b33844e8">eulerAngleXYZ</a>(</div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  T <span class="keyword">const</span> & t1,</div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  T <span class="keyword">const</span> & t2,</div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  T <span class="keyword">const</span> & t3);</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</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="a00190.html#ga0242b5ab68651db70c6025815549427f">eulerAngleYXZ</a>(</div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a>,</div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a>,</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#ga4fd705376c6c1fd667be0055a0ea58ec">roll</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></div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  GLM_FUNC_DECL tmat4x4<T, defaultp> <a class="code" href="a00190.html#gaf9c8d0f1df88c5344165600774489bc5">yawPitchRoll</a>(</div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga724a5df282b70cec0a6cb0d6dcddb6d6">yaw</a>,</div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga2c08b93a4261c10748fd4d2104346f17">pitch</a>,</div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  T <span class="keyword">const</span> & <a class="code" href="a00172.html#ga4fd705376c6c1fd667be0055a0ea58ec">roll</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"> 117</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</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="l00119"></a><span class="lineno"> 119</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></div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</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="l00124"></a><span class="lineno"> 124</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>  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="l00129"></a><span class="lineno"> 129</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></div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</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="l00134"></a><span class="lineno"> 134</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></div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>  T & t1,</div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  T & t2,</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  T & t3);</div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  </div>
|
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> }<span class="comment">//namespace glm</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> <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="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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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 class="el" href="a00155.html">GLM Core</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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="a00155.html">GLM Core</a> </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="a00023_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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="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="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_exponential.hpp</a>"</span></div>
|
||||
<div class="ttc" id="a00031_html"><div class="ttname"><a href="a00031.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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 class="el" href="a00155.html">GLM Core</a> (Dependence)
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<p><a href="a00024_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">GLM Core</a> (Dependence) </p>
|
||||
|
||||
<p>Definition in file <a class="el" href="a00024_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>
|
||||
|
|
@ -0,0 +1,264 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.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="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="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="a00041.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_encoding.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="a00012.html">./gtc/color_space.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="a00019.html">./gtc/constants.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="a00021.html">./gtc/epsilon.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="a00038.html">./gtc/functions.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="a00045.html">./gtc/integer.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="a00062.html">./gtc/matrix_access.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="a00065.html">./gtc/matrix_integer.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="a00067.html">./gtc/matrix_inverse.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="a00071.html">./gtc/matrix_transform.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="a00074.html">./gtc/noise.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="a00081.html">./gtc/packing.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="a00088.html">./gtc/quaternion.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="a00090.html">./gtc/random.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "<a class="code" href="a00093.html">./gtc/reciprocal.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "<a class="code" href="a00096.html">./gtc/round.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">//#include "./gtc/type_aligned.hpp"</span></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="a00122.html">./gtc/type_precision.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "<a class="code" href="a00123.html">./gtc/type_ptr.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "<a class="code" href="a00130.html">./gtc/ulp.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include "<a class="code" href="a00131.html">./gtc/vec1.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#if GLM_HAS_ALIGNED_TYPE</span></div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"># include "<a class="code" href="a00106.html">./gtc/type_aligned.hpp</a>"</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> </div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#ifdef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "<a class="code" href="a00007.html">./gtx/associated_min_max.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include "<a class="code" href="a00008.html">./gtx/bit.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#include "<a class="code" href="a00010.html">./gtx/closest_point.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#include "<a class="code" href="a00013.html">./gtx/color_space.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#include "<a class="code" href="a00014.html">./gtx/color_space_YCoCg.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#include "<a class="code" href="a00017.html">./gtx/compatibility.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#include "<a class="code" href="a00018.html">./gtx/component_wise.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#include "<a class="code" href="a00020.html">./gtx/dual_quaternion.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#include "<a class="code" href="a00022.html">./gtx/euler_angles.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#include "<a class="code" href="a00025.html">./gtx/extend.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#include "<a class="code" href="a00026.html">./gtx/extended_min_max.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include "<a class="code" href="a00027.html">./gtx/fast_exponential.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#include "<a class="code" href="a00028.html">./gtx/fast_square_root.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#include "<a class="code" href="a00029.html">./gtx/fast_trigonometry.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="preprocessor">#include "<a class="code" href="a00042.html">./gtx/gradient_paint.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#include "<a class="code" href="a00043.html">./gtx/handed_coordinate_space.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor">#include "<a class="code" href="a00046.html">./gtx/integer.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#include "<a class="code" href="a00048.html">./gtx/intersect.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor">#include "<a class="code" href="a00050.html">./gtx/log_base.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#include "<a class="code" href="a00063.html">./gtx/matrix_cross_product.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor">#include "<a class="code" href="a00066.html">./gtx/matrix_interpolation.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#include "<a class="code" href="a00068.html">./gtx/matrix_major_storage.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor">#include "<a class="code" href="a00069.html">./gtx/matrix_operation.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor">#include "<a class="code" href="a00070.html">./gtx/matrix_query.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor">#include "<a class="code" href="a00073.html">./gtx/mixed_product.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#include "<a class="code" href="a00075.html">./gtx/norm.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#include "<a class="code" href="a00076.html">./gtx/normal.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor">#include "<a class="code" href="a00077.html">./gtx/normalize_dot.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#include "<a class="code" href="a00078.html">./gtx/number_precision.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#include "<a class="code" href="a00079.html">./gtx/optimum_pow.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#include "<a class="code" href="a00080.html">./gtx/orthonormalize.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#include "<a class="code" href="a00084.html">./gtx/perpendicular.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#include "<a class="code" href="a00085.html">./gtx/polar_coordinates.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#include "<a class="code" href="a00087.html">./gtx/projection.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#include "<a class="code" href="a00089.html">./gtx/quaternion.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor">#include "<a class="code" href="a00092.html">./gtx/raw_data.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#include "<a class="code" href="a00095.html">./gtx/rotate_vector.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor">#include "<a class="code" href="a00100.html">./gtx/spline.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#include "<a class="code" href="a00101.html">./gtx/std_based_type.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#if !(GLM_COMPILER & GLM_COMPILER_CUDA)</span></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"># include "<a class="code" href="a00102.html">./gtx/string_cast.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#include "<a class="code" href="a00103.html">./gtx/transform.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor">#include "<a class="code" href="a00104.html">./gtx/transform2.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#include "<a class="code" href="a00135.html">./gtx/vec_swizzle.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor">#include "<a class="code" href="a00136.html">./gtx/vector_angle.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#include "<a class="code" href="a00137.html">./gtx/vector_query.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#include "<a class="code" href="a00139.html">./gtx/wrap.hpp</a>"</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">#if GLM_HAS_TEMPLATE_ALIASES</span></div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"># include "<a class="code" href="a00097.html">./gtx/scalar_multiplication.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor">#endif</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">#if GLM_HAS_RANGE_FOR</span></div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor"># include "<a class="code" href="a00091.html">./gtx/range.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor">#endif//GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="ttc" id="a00022_html"><div class="ttname"><a href="a00022.html">euler_angles.hpp</a></div><div class="ttdoc">GLM_GTX_euler_angles </div></div>
|
||||
<div class="ttc" id="a00122_html"><div class="ttname"><a href="a00122.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="a00093_html"><div class="ttname"><a href="a00093.html">reciprocal.hpp</a></div><div class="ttdoc">GLM_GTC_reciprocal </div></div>
|
||||
<div class="ttc" id="a00068_html"><div class="ttname"><a href="a00068.html">matrix_major_storage.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_major_storage </div></div>
|
||||
<div class="ttc" id="a00139_html"><div class="ttname"><a href="a00139.html">wrap.hpp</a></div><div class="ttdoc">GLM_GTX_wrap </div></div>
|
||||
<div class="ttc" id="a00091_html"><div class="ttname"><a href="a00091.html">range.hpp</a></div><div class="ttdoc">GLM_GTX_range </div></div>
|
||||
<div class="ttc" id="a00027_html"><div class="ttname"><a href="a00027.html">fast_exponential.hpp</a></div><div class="ttdoc">GLM_GTX_fast_exponential </div></div>
|
||||
<div class="ttc" id="a00042_html"><div class="ttname"><a href="a00042.html">gradient_paint.hpp</a></div><div class="ttdoc">GLM_GTX_gradient_paint </div></div>
|
||||
<div class="ttc" id="a00103_html"><div class="ttname"><a href="a00103.html">transform.hpp</a></div><div class="ttdoc">GLM_GTX_transform </div></div>
|
||||
<div class="ttc" id="a00130_html"><div class="ttname"><a href="a00130.html">ulp.hpp</a></div><div class="ttdoc">GLM_GTC_ulp </div></div>
|
||||
<div class="ttc" id="a00088_html"><div class="ttname"><a href="a00088.html">quaternion.hpp</a></div><div class="ttdoc">GLM_GTC_quaternion </div></div>
|
||||
<div class="ttc" id="a00101_html"><div class="ttname"><a href="a00101.html">std_based_type.hpp</a></div><div class="ttdoc">GLM_GTX_std_based_type </div></div>
|
||||
<div class="ttc" id="a00076_html"><div class="ttname"><a href="a00076.html">normal.hpp</a></div><div class="ttdoc">GLM_GTX_normal </div></div>
|
||||
<div class="ttc" id="a00135_html"><div class="ttname"><a href="a00135.html">vec_swizzle.hpp</a></div><div class="ttdoc">GLM_GTX_vec_swizzle </div></div>
|
||||
<div class="ttc" id="a00062_html"><div class="ttname"><a href="a00062.html">matrix_access.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_access </div></div>
|
||||
<div class="ttc" id="a00123_html"><div class="ttname"><a href="a00123.html">type_ptr.hpp</a></div><div class="ttdoc">GLM_GTC_type_ptr </div></div>
|
||||
<div class="ttc" id="a00050_html"><div class="ttname"><a href="a00050.html">log_base.hpp</a></div><div class="ttdoc">GLM_GTX_log_base </div></div>
|
||||
<div class="ttc" id="a00021_html"><div class="ttname"><a href="a00021.html">epsilon.hpp</a></div><div class="ttdoc">GLM_GTC_epsilon </div></div>
|
||||
<div class="ttc" id="a00079_html"><div class="ttname"><a href="a00079.html">optimum_pow.hpp</a></div><div class="ttdoc">GLM_GTX_optimum_pow </div></div>
|
||||
<div class="ttc" id="a00096_html"><div class="ttname"><a href="a00096.html">round.hpp</a></div><div class="ttdoc">GLM_GTC_round </div></div>
|
||||
<div class="ttc" id="a00067_html"><div class="ttname"><a href="a00067.html">matrix_inverse.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_inverse </div></div>
|
||||
<div class="ttc" id="a00084_html"><div class="ttname"><a href="a00084.html">perpendicular.hpp</a></div><div class="ttdoc">GLM_GTX_perpendicular </div></div>
|
||||
<div class="ttc" id="a00043_html"><div class="ttname"><a href="a00043.html">handed_coordinate_space.hpp</a></div><div class="ttdoc">GLM_GTX_handed_coordinate_space </div></div>
|
||||
<div class="ttc" id="a00018_html"><div class="ttname"><a href="a00018.html">component_wise.hpp</a></div><div class="ttdoc">GLM_GTX_component_wise </div></div>
|
||||
<div class="ttc" id="a00070_html"><div class="ttname"><a href="a00070.html">matrix_query.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_query </div></div>
|
||||
<div class="ttc" id="a00041_html"><div class="ttname"><a href="a00041.html">glm.hpp</a></div><div class="ttdoc">GLM Core </div></div>
|
||||
<div class="ttc" id="a00106_html"><div class="ttname"><a href="a00106.html">type_aligned.hpp</a></div><div class="ttdoc">GLM_GTC_type_aligned </div></div>
|
||||
<div class="ttc" id="a00087_html"><div class="ttname"><a href="a00087.html">projection.hpp</a></div><div class="ttdoc">GLM_GTX_projection </div></div>
|
||||
<div class="ttc" id="a00075_html"><div class="ttname"><a href="a00075.html">norm.hpp</a></div><div class="ttdoc">GLM_GTX_norm </div></div>
|
||||
<div class="ttc" id="a00063_html"><div class="ttname"><a href="a00063.html">matrix_cross_product.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_cross_product </div></div>
|
||||
<div class="ttc" id="a00038_html"><div class="ttname"><a href="a00038.html">functions.hpp</a></div><div class="ttdoc">GLM_GTC_functions </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="a00090_html"><div class="ttname"><a href="a00090.html">random.hpp</a></div><div class="ttdoc">GLM_GTC_random </div></div>
|
||||
<div class="ttc" id="a00026_html"><div class="ttname"><a href="a00026.html">extended_min_max.hpp</a></div><div class="ttdoc">gtx_extended_min_max </div></div>
|
||||
<div class="ttc" id="a00014_html"><div class="ttname"><a href="a00014.html">color_space_YCoCg.hpp</a></div><div class="ttdoc">GLM_GTX_color_space_YCoCg </div></div>
|
||||
<div class="ttc" id="a00012_html"><div class="ttname"><a href="a00012.html">color_space.hpp</a></div><div class="ttdoc">GLM_GTC_color_space </div></div>
|
||||
<div class="ttc" id="a00095_html"><div class="ttname"><a href="a00095.html">rotate_vector.hpp</a></div><div class="ttdoc">GLM_GTX_rotate_vector </div></div>
|
||||
<div class="ttc" id="a00100_html"><div class="ttname"><a href="a00100.html">spline.hpp</a></div><div class="ttdoc">GLM_GTX_spline </div></div>
|
||||
<div class="ttc" id="a00029_html"><div class="ttname"><a href="a00029.html">fast_trigonometry.hpp</a></div><div class="ttdoc">GLM_GTX_fast_trigonometry </div></div>
|
||||
<div class="ttc" id="a00081_html"><div class="ttname"><a href="a00081.html">packing.hpp</a></div><div class="ttdoc">GLM_GTC_packing </div></div>
|
||||
<div class="ttc" id="a00046_html"><div class="ttname"><a href="a00046.html">integer.hpp</a></div><div class="ttdoc">GLM_GTX_integer </div></div>
|
||||
<div class="ttc" id="a00017_html"><div class="ttname"><a href="a00017.html">compatibility.hpp</a></div><div class="ttdoc">GLM_GTX_compatibility </div></div>
|
||||
<div class="ttc" id="a00020_html"><div class="ttname"><a href="a00020.html">dual_quaternion.hpp</a></div><div class="ttdoc">GLM_GTX_dual_quaternion </div></div>
|
||||
<div class="ttc" id="a00078_html"><div class="ttname"><a href="a00078.html">number_precision.hpp</a></div><div class="ttdoc">GLM_GTX_number_precision </div></div>
|
||||
<div class="ttc" id="a00066_html"><div class="ttname"><a href="a00066.html">matrix_interpolation.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_interpolation </div></div>
|
||||
<div class="ttc" id="a00137_html"><div class="ttname"><a href="a00137.html">vector_query.hpp</a></div><div class="ttdoc">GLM_GTX_vector_query </div></div>
|
||||
<div class="ttc" id="a00025_html"><div class="ttname"><a href="a00025.html">extend.hpp</a></div><div class="ttdoc">GLM_GTX_extend </div></div>
|
||||
<div class="ttc" id="a00013_html"><div class="ttname"><a href="a00013.html">color_space.hpp</a></div><div class="ttdoc">GLM_GTX_color_space </div></div>
|
||||
<div class="ttc" id="a00011_html"><div class="ttname"><a href="a00011.html">color_encoding.hpp</a></div><div class="ttdoc">GLM_GTC_color_encoding </div></div>
|
||||
<div class="ttc" id="a00069_html"><div class="ttname"><a href="a00069.html">matrix_operation.hpp</a></div><div class="ttdoc">GLM_GTX_matrix_operation </div></div>
|
||||
<div class="ttc" id="a00074_html"><div class="ttname"><a href="a00074.html">noise.hpp</a></div><div class="ttdoc">GLM_GTC_noise </div></div>
|
||||
<div class="ttc" id="a00045_html"><div class="ttname"><a href="a00045.html">integer.hpp</a></div><div class="ttdoc">GLM_GTC_integer </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="a00131_html"><div class="ttname"><a href="a00131.html">vec1.hpp</a></div><div class="ttdoc">GLM_GTC_vec1 </div></div>
|
||||
<div class="ttc" id="a00089_html"><div class="ttname"><a href="a00089.html">quaternion.hpp</a></div><div class="ttdoc">GLM_GTX_quaternion </div></div>
|
||||
<div class="ttc" id="a00077_html"><div class="ttname"><a href="a00077.html">normalize_dot.hpp</a></div><div class="ttdoc">GLM_GTX_normalize_dot </div></div>
|
||||
<div class="ttc" id="a00065_html"><div class="ttname"><a href="a00065.html">matrix_integer.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_integer </div></div>
|
||||
<div class="ttc" id="a00092_html"><div class="ttname"><a href="a00092.html">raw_data.hpp</a></div><div class="ttdoc">GLM_GTX_raw_data </div></div>
|
||||
<div class="ttc" id="a00028_html"><div class="ttname"><a href="a00028.html">fast_square_root.hpp</a></div><div class="ttdoc">GLM_GTX_fast_square_root </div></div>
|
||||
<div class="ttc" id="a00080_html"><div class="ttname"><a href="a00080.html">orthonormalize.hpp</a></div><div class="ttdoc">GLM_GTX_orthonormalize </div></div>
|
||||
<div class="ttc" id="a00097_html"><div class="ttname"><a href="a00097.html">scalar_multiplication.hpp</a></div><div class="ttdoc">GTX Extensions (Experimental) </div></div>
|
||||
<div class="ttc" id="a00104_html"><div class="ttname"><a href="a00104.html">transform2.hpp</a></div><div class="ttdoc">GLM_GTX_transform2 </div></div>
|
||||
<div class="ttc" id="a00085_html"><div class="ttname"><a href="a00085.html">polar_coordinates.hpp</a></div><div class="ttdoc">GLM_GTX_polar_coordinates </div></div>
|
||||
<div class="ttc" id="a00102_html"><div class="ttname"><a href="a00102.html">string_cast.hpp</a></div><div class="ttdoc">GLM_GTX_string_cast </div></div>
|
||||
<div class="ttc" id="a00073_html"><div class="ttname"><a href="a00073.html">mixed_product.hpp</a></div><div class="ttdoc">GLM_GTX_mixed_producte </div></div>
|
||||
<div class="ttc" id="a00048_html"><div class="ttname"><a href="a00048.html">intersect.hpp</a></div><div class="ttdoc">GLM_GTX_intersect </div></div>
|
||||
<div class="ttc" id="a00019_html"><div class="ttname"><a href="a00019.html">constants.hpp</a></div><div class="ttdoc">GLM_GTC_constants </div></div>
|
||||
<div class="ttc" id="a00071_html"><div class="ttname"><a href="a00071.html">matrix_transform.hpp</a></div><div class="ttdoc">GLM_GTC_matrix_transform </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 class="ttc" id="a00136_html"><div class="ttname"><a href="a00136.html">vector_angle.hpp</a></div><div class="ttdoc">GLM_GTX_vector_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00191.html">GLM_GTX_extend</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:ga8140caae613b0f847ab0d7175dc03a37"><td class="mdescLeft"> </td><td class="mdescRight">Extends of Length the Origin position using the (Source - Origin) direction. <a href="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">More...</a><br /></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="a00155.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="a00025_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_extend is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_extend 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="a00140.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="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="a00191.html#ga8140caae613b0f847ab0d7175dc03a37">extend</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  genType <span class="keyword">const</span> & Origin, </div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  genType <span class="keyword">const</span> & Source, </div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">typename</span> genType::value_type <span class="keyword">const</span> Length);</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 "extend.inl"</span></div>
|
||||
<div class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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>gtx_extended_min_max
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:ga04991ccb9865c4c4e58488cfb209ce69"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 3 inputs. <a href="a00192.html#ga04991ccb9865c4c4e58488cfb209ce69">More...</a><br /></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="memdesc:gae1b7bbe5c91de4924835ea3e14530744"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 3 inputs. <a href="a00192.html#gae1b7bbe5c91de4924835ea3e14530744">More...</a><br /></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="memdesc:gaf832e9d4ab4826b2dda2fda25935a3a4"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 3 inputs. <a href="a00192.html#gaf832e9d4ab4826b2dda2fda25935a3a4">More...</a><br /></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="memdesc:ga78e04a0cef1c4863fcae1a2130500d87"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 4 inputs. <a href="a00192.html#ga78e04a0cef1c4863fcae1a2130500d87">More...</a><br /></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="memdesc:ga7cca8b53cfda402040494cdf40fbdf4a"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 4 inputs. <a href="a00192.html#ga7cca8b53cfda402040494cdf40fbdf4a">More...</a><br /></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="memdesc:gaacffbc466c2d08c140b181e7fd8a4858"><td class="mdescLeft"> </td><td class="mdescRight">Return the maximum component-wise values of 4 inputs. <a href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">More...</a><br /></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="memdesc:ga713d3f9b3e76312c0d314e0c8611a6a6"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 3 inputs. <a href="a00192.html#ga713d3f9b3e76312c0d314e0c8611a6a6">More...</a><br /></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="memdesc:ga74d1a96e7cdbac40f6d35142d3bcbbd4"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 3 inputs. <a href="a00192.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4">More...</a><br /></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="memdesc:ga42b5c3fc027fd3d9a50d2ccc9126d9f0"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 3 inputs. <a href="a00192.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0">More...</a><br /></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="memdesc:ga95466987024d03039607f09e69813d69"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 4 inputs. <a href="a00192.html#ga95466987024d03039607f09e69813d69">More...</a><br /></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="memdesc:ga4fe35dd31dd0c45693c9b60b830b8d47"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 4 inputs. <a href="a00192.html#ga4fe35dd31dd0c45693c9b60b830b8d47">More...</a><br /></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="memdesc:ga7471ea4159eed8dd9ea4ac5d46c2fead"><td class="mdescLeft"> </td><td class="mdescRight">Return the minimum component-wise values of 4 inputs. <a href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">More...</a><br /></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="a00155.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="a00026_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"># error "GLM: GLM_GTX_extented_min_max is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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">#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_extented_min_max 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="a00140.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="l00033"></a><span class="lineno"> 33</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  T <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  T <span class="keyword">const</span> & z);</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">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z);</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> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  C<T> <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  C<T> <span class="keyword">const</span> & z);</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></div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  T <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  T <span class="keyword">const</span> & z, </div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  T <span class="keyword">const</span> & w);</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, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z, </div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & w);</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, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#ga7471ea4159eed8dd9ea4ac5d46c2fead">min</a>(</div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  C<T> <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  C<T> <span class="keyword">const</span> & z,</div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  C<T> <span class="keyword">const</span> & w);</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></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL T <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  T <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  T <span class="keyword">const</span> & z);</div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</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, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z);</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> T, <span class="keyword">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  C<T> <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  C<T> <span class="keyword">const</span> & z);</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 T <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  T <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  T <span class="keyword">const</span> & z, </div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  T <span class="keyword">const</span> & w);</div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & z, </div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">typename</span> C<T>::T <span class="keyword">const</span> & w);</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">template</span> <<span class="keyword">typename</span>> <span class="keyword">class </span>C></div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL C<T> <a class="code" href="a00192.html#gaacffbc466c2d08c140b181e7fd8a4858">max</a>(</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  C<T> <span class="keyword">const</span> & x, </div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  C<T> <span class="keyword">const</span> & y, </div>
|
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  C<T> <span class="keyword">const</span> & z, </div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  C<T> <span class="keyword">const</span> & w);</div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> }<span class="comment">//namespace glm</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="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="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00193.html">GLM_GTX_fast_exponential</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gaa3180ac8f96ab37ab96e0cacaf608e10"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common exp function but less accurate. <a href="a00193.html#gaa3180ac8f96ab37ab96e0cacaf608e10">More...</a><br /></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="memdesc:ga4faf0b61115de36efcf47c4ecb55a5fa"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common exp function but less accurate. <a href="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">More...</a><br /></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="memdesc:ga0af50585955eb14c60bb286297fabab2"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common exp2 function but less accurate. <a href="a00193.html#ga0af50585955eb14c60bb286297fabab2">More...</a><br /></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="memdesc:ga9e6219327b7a33077dbec7620d981fff"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common exp2 function but less accurate. <a href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">More...</a><br /></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="memdesc:gae1bdc97b7f96a600e29c753f1cd4388a"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common log function but less accurate. <a href="a00193.html#gae1bdc97b7f96a600e29c753f1cd4388a">More...</a><br /></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="memdesc:ga789abcbc34d08008d2f5a4547dd6e5e3"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common exp2 function but less accurate. <a href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">More...</a><br /></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="memdesc:ga6e98118685f6dc9e05fbb13dd5e5234e"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common log2 function but less accurate. <a href="a00193.html#ga6e98118685f6dc9e05fbb13dd5e5234e">More...</a><br /></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="memdesc:gabc46086fe6636b8be87f09e6c5d2bb58"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common log2 function but less accurate. <a href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">More...</a><br /></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="memdesc:ga5340e98a11fcbbd936ba6e983a154d50"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common pow function but less accurate. <a href="a00193.html#ga5340e98a11fcbbd936ba6e983a154d50">More...</a><br /></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="memdesc:ga07b73976a9af4005945bc338b45d8466"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common pow function but less accurate. <a href="a00193.html#ga07b73976a9af4005945bc338b45d8466">More...</a><br /></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="memdesc:ga7f2562db9c3e02ae76169c36b086c3f6"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common pow function but less accurate. <a href="a00193.html#ga7f2562db9c3e02ae76169c36b086c3f6">More...</a><br /></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="memdesc:ga29924aea1aa11c5c504fb2d621221906"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common pow function but less accurate. <a href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">More...</a><br /></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="a00155.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="a00027_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>
|
||||
|
|
@ -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.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># error "GLM: GLM_GTX_fast_exponential is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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="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_fast_exponential 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="a00140.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> genType></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL genType <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(genType x, genType y);</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, <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="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="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> genTypeT, <span class="keyword">typename</span> genTypeU></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL genTypeT <a class="code" href="a00193.html#ga29924aea1aa11c5c504fb2d621221906">fastPow</a>(genTypeT x, genTypeU y);</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> 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="l00050"></a><span class="lineno"> 50</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="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="a00193.html#ga4faf0b61115de36efcf47c4ecb55a5fa">fastExp</a>(T x);</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, <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<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="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></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a>(T x);</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, 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="a00193.html#ga789abcbc34d08008d2f5a4547dd6e5e3">fastLog</a>(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="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#ga9e6219327b7a33077dbec7620d981fff">fastExp2</a>(T x);</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, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</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="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></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  GLM_FUNC_DECL T <a class="code" href="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a>(T x);</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, 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="a00193.html#gabc46086fe6636b8be87f09e6c5d2bb58">fastLog2</a>(vecType<T, P> <span class="keyword">const</span> & x);</div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }<span class="comment">//namespace glm</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> <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="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="a00140_html"><div class="ttname"><a href="a00140.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_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>
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00194.html">GLM_GTX_fast_square_root</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:gaac333418d0c4e0cc6d3d219ed606c238"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common distance function but less accurate. <a href="a00194.html#gaac333418d0c4e0cc6d3d219ed606c238">More...</a><br /></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="memdesc:ga6d1ac559cd77d69119e30c3aca0e14b5"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common distance function but less accurate. <a href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">More...</a><br /></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="memdesc:ga7f081b14d9c7035c8714eba5f7f75a8f"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common inversesqrt function but less accurate. <a href="a00194.html#ga7f081b14d9c7035c8714eba5f7f75a8f">More...</a><br /></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="memdesc:ga903878071f92e51e551791e584a171a1"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common inversesqrt function but less accurate. <a href="a00194.html#ga903878071f92e51e551791e584a171a1">More...</a><br /></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="memdesc:gafe697d6287719538346bbdf8b1367c59"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common length function but less accurate. <a href="a00194.html#gafe697d6287719538346bbdf8b1367c59">More...</a><br /></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="memdesc:gae28a3099cbd6404a4ea8ef22147ed7b0"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common length function but less accurate. <a href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">More...</a><br /></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="memdesc:ga3b02c1d6e0c754144e2f1e110bf9f16c"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common normalize function but less accurate. <a href="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">More...</a><br /></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="memdesc:ga6c460e9414a50b2fc455c8f64c86cdc9"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common sqrt function but less accurate. <a href="a00194.html#ga6c460e9414a50b2fc455c8f64c86cdc9">More...</a><br /></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="memdesc:gaad9f601bbc3faa04dda384e4c4e1592c"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common sqrt function but less accurate. <a href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">More...</a><br /></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="a00155.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_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>
|
||||
|
|
@ -0,0 +1,154 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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="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="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">#ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># error "GLM: GLM_GTX_fast_square_root is an experimetal extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."</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="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_fast_square_root 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="keyword">namespace </span><a class="code" href="a00140.html">glm</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> </div>
|
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType> </div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#gaad9f601bbc3faa04dda384e4c4e1592c">fastSqrt</a>(genType x);</div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</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, <span class="keyword">template</span> <<span class="keyword">typename</span>, precision> <span class="keyword">class </span>vecType></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</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="l00046"></a><span class="lineno"> 46</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="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a>(genType x);</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">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="a00194.html#ga903878071f92e51e551791e584a171a1">fastInverseSqrt</a>(vecType<T, P> <span class="keyword">const</span> & x);</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> genType></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#gae28a3099cbd6404a4ea8ef22147ed7b0">fastLength</a>(genType x);</div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</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 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="l00070"></a><span class="lineno"> 70</span> </div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_DECL genType <a class="code" href="a00194.html#ga6d1ac559cd77d69119e30c3aca0e14b5">fastDistance</a>(genType x, genType y);</div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</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 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="l00082"></a><span class="lineno"> 82</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="a00194.html#ga3b02c1d6e0c754144e2f1e110bf9f16c">fastNormalize</a>(genType <span class="keyword">const</span> & x);</div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }<span class="comment">// namespace glm</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="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="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 class="ttc" id="a00140_html"><div class="ttname"><a href="a00140.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>
|
||||
|
|
@ -0,0 +1,147 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<meta name="generator" content="Doxygen 1.8.10"/>
|
||||
<title>0.9.9 API documenation: 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="search/search.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||
<script type="text/javascript" src="search/search.js"></script>
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function() { init_search(); });
|
||||
</script>
|
||||
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
<div id="titlearea">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<tbody>
|
||||
<tr style="height: 56px;">
|
||||
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||
<td id="projectalign" style="padding-left: 0.5em;">
|
||||
<div id="projectname">0.9.9 API documenation
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- end header part -->
|
||||
<!-- Generated by Doxygen 1.8.10 -->
|
||||
<script type="text/javascript">
|
||||
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||
</script>
|
||||
<div id="navrow1" class="tabs">
|
||||
<ul class="tablist">
|
||||
<li><a href="index.html"><span>Main Page</span></a></li>
|
||||
<li><a href="modules.html"><span>Modules</span></a></li>
|
||||
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
||||
<li>
|
||||
<div id="MSearchBox" class="MSearchBoxInactive">
|
||||
<span class="left">
|
||||
<img id="MSearchSelect" src="search/mag_sel.png"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
alt=""/>
|
||||
<input type="text" id="MSearchField" value="Search" accesskey="S"
|
||||
onfocus="searchBox.OnSearchFieldFocus(true)"
|
||||
onblur="searchBox.OnSearchFieldFocus(false)"
|
||||
onkeyup="searchBox.OnSearchFieldChange(event)"/>
|
||||
</span><span class="right">
|
||||
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
|
||||
</span>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="navrow2" class="tabs2">
|
||||
<ul class="tablist">
|
||||
<li><a href="files.html"><span>File List</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- window showing the filter options -->
|
||||
<div id="MSearchSelectWindow"
|
||||
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||
</div>
|
||||
|
||||
<!-- iframe showing the search results (closed by default) -->
|
||||
<div id="MSearchResultsWindow">
|
||||
<iframe src="javascript:void(0)" frameborder="0"
|
||||
name="MSearchResults" id="MSearchResults">
|
||||
</iframe>
|
||||
</div>
|
||||
|
||||
<div id="nav-path" class="navpath">
|
||||
<ul>
|
||||
<li class="navelem"><a class="el" href="dir_934f46a345653ef2b3014a1b37a162c1.html">G:</a></li><li class="navelem"><a class="el" href="dir_98f7f9d41f9d3029bd68cf237526a774.html">Source</a></li><li class="navelem"><a class="el" href="dir_9344afb825aed5e2f5be1d2015dde43c.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_45973f864e07b2505003ae343b7c8af7.html">glm</a></li><li class="navelem"><a class="el" href="dir_304be5dfae1339a7705426c0b536faf2.html">glm</a></li><li class="navelem"><a class="el" href="dir_e8f3c1046ba4b357711397765359cd18.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 class="el" href="a00195.html">GLM_GTX_fast_trigonometry</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<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: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="memdesc:ga9721d63356e5d94fdc4b393a426ab26b"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common acos function but less accurate. <a href="a00195.html#ga9721d63356e5d94fdc4b393a426ab26b">More...</a><br /></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="memdesc:ga562cb62c51fbfe7fac7db0bce706b81f"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common asin function but less accurate. <a href="a00195.html#ga562cb62c51fbfe7fac7db0bce706b81f">More...</a><br /></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="memdesc:ga8d197c6ef564f5e5d59af3b3f8adcc2c"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common atan function but less accurate. <a href="a00195.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c">More...</a><br /></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="memdesc:gae25de86a968490ff56856fa425ec9d30"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common atan function but less accurate. <a href="a00195.html#gae25de86a968490ff56856fa425ec9d30">More...</a><br /></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="memdesc:gab34c8b45c23c0165a64dcecfcc3b302a"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common cos function but less accurate. <a href="a00195.html#gab34c8b45c23c0165a64dcecfcc3b302a">More...</a><br /></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="memdesc:ga0aab3257bb3b628d10a1e0483e2c6915"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common sin function but less accurate. <a href="a00195.html#ga0aab3257bb3b628d10a1e0483e2c6915">More...</a><br /></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="memdesc:gaf29b9c1101a10007b4f79ee89df27ba2"><td class="mdescLeft"> </td><td class="mdescRight">Faster than the common tan function but less accurate. <a href="a00195.html#gaf29b9c1101a10007b4f79ee89df27ba2">More...</a><br /></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="memdesc:ga069527c6dbd64f53435b8ebc4878b473"><td class="mdescLeft"> </td><td class="mdescRight">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. <a href="a00195.html#ga069527c6dbd64f53435b8ebc4878b473">More...</a><br /></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="a00155.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="a00029_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>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue