mirror of
https://github.com/flyinghead/flycast.git
synced 2026-11-08 08:06:48 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
382f2e5c19 | ||
|
|
6f8699a118 | ||
|
|
f97b085f92 |
No files matched your search
-14
@@ -1,14 +0,0 @@
|
||||
freebsd_instance:
|
||||
image_family: freebsd-13-0
|
||||
|
||||
env:
|
||||
CCACHE_DIR: /tmp/ccache
|
||||
CIRRUS_CLONE_SUBMODULES: true
|
||||
|
||||
task:
|
||||
install_script: pkg install -y alsa-lib ccache cmake evdev-proto git libao libevdev libudev-devd libzip mesa-libs miniupnpc ninja pkgconf png pulseaudio sdl2
|
||||
ccache_cache:
|
||||
folder: /tmp/ccache
|
||||
script:
|
||||
- cmake -B build -DCMAKE_BUILD_TYPE=Release -G Ninja
|
||||
- cmake --build build --config Release
|
||||
@@ -1,59 +0,0 @@
|
||||
name: Android CI
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Set up build environment
|
||||
run: sudo apt-get update && sudo apt-get -y install ninja-build
|
||||
|
||||
# Workaround for https://github.com/actions/virtual-environments/issues/3078
|
||||
- name: Downgrade CMake
|
||||
uses: jwlawson/[email protected]
|
||||
with:
|
||||
cmake-version: '3.19.x'
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Gradle
|
||||
working-directory: shell/android-studio
|
||||
run: ./gradlew assembleRelease --parallel
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: flycast-release.apk
|
||||
path: shell/android-studio/flycast/build/outputs/apk/release/flycast-release.apk
|
||||
|
||||
- name: Set up git vars
|
||||
run: |
|
||||
echo GIT_BUILD=`git describe --all --always | sed 's/remotes\/origin/heads/'`-$GITHUB_SHA >> $GITHUB_ENV
|
||||
|
||||
- name: Clean up
|
||||
run: rm -f shell/android-studio/flycast/build/outputs/apk/release/*.json
|
||||
|
||||
- uses: jakejarvis/s3-sync-action@master
|
||||
with:
|
||||
args: --acl public-read --follow-symlinks
|
||||
env:
|
||||
AWS_S3_BUCKET: flycast-builds
|
||||
AWS_ACCESS_KEY_ID: AKIAJOZQS4H2PHQWYFCA
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_KEY }}
|
||||
AWS_REGION: 'us-east-2'
|
||||
SOURCE_DIR: 'shell/android-studio/flycast/build/outputs/apk/release/'
|
||||
DEST_DIR: android/${{ env.GIT_BUILD }}
|
||||
if: ${{ github.repository == 'flyinghead/flycast' && github.event_name == 'push' }}
|
||||
@@ -1,127 +0,0 @@
|
||||
name: C/C++ CI
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ${{ matrix.config.name }}
|
||||
runs-on: ${{ matrix.config.os }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
config:
|
||||
- {name: i686-pc-windows-msvc, os: windows-latest, cmakeArgs: -DCMAKE_SYSTEM_VERSION="10.0.18362.0" -G "Visual Studio 16 2019" -A Win32}
|
||||
- {name: x86_64-apple-darwin, os: macos-latest, cmakeArgs: -G "Xcode", destDir: osx}
|
||||
- {name: x86_64-pc-linux-gnu, os: ubuntu-latest}
|
||||
- {name: x86_64-pc-windows-msvc, os: windows-latest, cmakeArgs: -DCMAKE_SYSTEM_VERSION="10.0.18362.0" -G "Visual Studio 16 2019" -A x64}
|
||||
- {name: x86_64-w64-mingw32, os: windows-latest, cmakeArgs: -G "MinGW Makefiles", destDir: win}
|
||||
|
||||
steps:
|
||||
- name: Set up build environment (macos-latest)
|
||||
run: |
|
||||
brew install ccache libao libomp pulseaudio zlib
|
||||
echo "/usr/local/opt/ccache/libexec" >> $GITHUB_PATH
|
||||
echo "CCACHE_DIR=/tmp/ccache" >> $GITHUB_ENV
|
||||
if: matrix.config.os == 'macos-latest'
|
||||
|
||||
- name: Set up build environment (ubuntu-latest)
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install ccache libao-dev libasound2-dev libevdev-dev libgl1-mesa-dev libpulse-dev libsdl2-dev libudev-dev libzip-dev libminiupnpc-dev
|
||||
echo "CCACHE_DIR=/tmp/ccache" >> $GITHUB_ENV
|
||||
if: matrix.config.os == 'ubuntu-latest'
|
||||
|
||||
- name: Set up build environment (windows-latest)
|
||||
run: echo "DXSDK_DIR=${Env:HOMEDRIVE}${Env:HOMEPATH}\ccache\" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf-8 -Append
|
||||
if: matrix.config.os == 'windows-latest' && matrix.config.name != 'x86_64-w64-mingw32'
|
||||
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/ccache
|
||||
key: ccache-${{ matrix.config.os }}-${{ github.sha }}
|
||||
restore-keys: ccache-${{ matrix.config.os }}-
|
||||
if: matrix.config.os != 'windows-latest'
|
||||
|
||||
- uses: actions/cache@v2
|
||||
id: cache
|
||||
with:
|
||||
path: $HOME/ccache
|
||||
key: ccache-${{ matrix.config.os }}-${{ github.sha }}
|
||||
restore-keys: ccache-${{ matrix.config.os }}-
|
||||
if: matrix.config.os == 'windows-latest'
|
||||
|
||||
- name: Download DX2010
|
||||
if: steps.cache.outputs.cache-hit != 'true' && matrix.config.os == 'windows-latest' && matrix.config.name != 'x86_64-w64-mingw32'
|
||||
run: |
|
||||
curl -L https://download.microsoft.com/download/a/e/7/ae743f1f-632b-4809-87a9-aa1bb3458e31/DXSDK_Jun10.exe -o _DX2010_.exe
|
||||
7z x _DX2010_.exe DXSDK/Include -o_DX2010_
|
||||
7z x _DX2010_.exe DXSDK/Lib/x86 -o_DX2010_
|
||||
7z x _DX2010_.exe DXSDK/Lib/x64 -o_DX2010_
|
||||
mv _DX2010_/DXSDK $HOME/ccache
|
||||
rm -fR _DX*_ _DX*_.exe
|
||||
shell: bash
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: recursive
|
||||
|
||||
- name: Create artifact directory
|
||||
run: mkdir -p build/artifact
|
||||
|
||||
- name: Build SDL (macos-latest)
|
||||
run: |
|
||||
cd shell/apple
|
||||
mkdir artifacts
|
||||
brew install --build-from-source ./sdl2.rb
|
||||
if: matrix.config.os == 'macos-latest'
|
||||
|
||||
- name: CMake
|
||||
run: |
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=artifact ${{ matrix.config.cmakeArgs }}
|
||||
cmake --build build --config Release --parallel 2
|
||||
|
||||
- name: Unit Tests
|
||||
run: |
|
||||
mkdir -p build/tests
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=tests -DENABLE_CTEST=ON ${{ matrix.config.cmakeArgs }}
|
||||
cmake --build build --config Release --parallel 2
|
||||
./build/tests/flycast
|
||||
if: matrix.config.name == 'x86_64-pc-linux-gnu'
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: flycast-${{ matrix.config.name }}
|
||||
path: build/artifact
|
||||
|
||||
- name: Package app (macos)
|
||||
run: |
|
||||
cd build/artifact
|
||||
rm -rf Flycast.swiftmodule
|
||||
zip -r flycast.app.zip Flycast.app
|
||||
rm -rf Flycast.app
|
||||
if: matrix.config.os == 'macos-latest'
|
||||
|
||||
- name: Package app (windows)
|
||||
run: |
|
||||
powershell Compress-Archive build/artifact/flycast.exe build/artifact/flycast.zip
|
||||
rm build/artifact/flycast.exe
|
||||
if: matrix.config.name == 'x86_64-w64-mingw32'
|
||||
|
||||
- name: Set up git vars
|
||||
run: |
|
||||
echo GIT_BUILD=`git describe --all --always | sed 's/remotes\/origin/heads/'`-$GITHUB_SHA >> $GITHUB_ENV
|
||||
shell: bash
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
id: aws-credentials
|
||||
uses: aws-actions/configure-aws-credentials@v1
|
||||
with:
|
||||
aws-access-key-id: AKIAJOZQS4H2PHQWYFCA
|
||||
aws-secret-access-key: ${{ secrets.S3_SECRET_KEY }}
|
||||
aws-region: us-east-2
|
||||
if: github.repository == 'flyinghead/flycast' && github.event_name == 'push' && matrix.config.destDir != ''
|
||||
|
||||
- name: Upload to S3
|
||||
run: aws s3 sync build/artifact s3://flycast-builds/${{ matrix.config.destDir }}/${{ env.GIT_BUILD }} --acl public-read --follow-symlinks
|
||||
if: ${{ steps.aws-credentials.outputs.aws-account-id != '' }}
|
||||
+5
-46
@@ -1,51 +1,10 @@
|
||||
.DS_Store
|
||||
*.class
|
||||
*.orig
|
||||
*build_obj
|
||||
Workdir/data
|
||||
Workdir/reicast*
|
||||
Workdir/vmu*
|
||||
Workdir/webui*
|
||||
Workdir/emu.cfg
|
||||
Workdir/lib*ant.properties
|
||||
|
||||
# iOS General
|
||||
*/build/*
|
||||
**/build/*
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
profile
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.hmap
|
||||
emulator.xccheckout
|
||||
reicast.xccheckout
|
||||
build/*
|
||||
*.so
|
||||
*Karen_angelXwind*
|
||||
local.properties
|
||||
ant.properties
|
||||
*.d
|
||||
reicast-ios.xccheckout
|
||||
bin/
|
||||
gen/
|
||||
obj/
|
||||
|
||||
# Linux General
|
||||
shell/linux/.map
|
||||
shell/linux/flycast.elf.map
|
||||
shell/linux/nosym-flycast.elf
|
||||
shell/linux/flycast.elf
|
||||
shell/linux/dispframe.elf
|
||||
|
||||
# Visual Studio
|
||||
generated
|
||||
.vs
|
||||
|
||||
# JetBrains IDES
|
||||
.idea/
|
||||
cmake-build-*/
|
||||
newdc/android/libnewdc/bin/libnewdc.jar
|
||||
newdc/android/libnewdc/bin/classes/com/example/newdc/JNIdc.class
|
||||
@@ -1,6 +0,0 @@
|
||||
[submodule "core/deps/SDL"]
|
||||
path = core/deps/SDL
|
||||
url = https://github.com/libsdl-org/SDL.git
|
||||
[submodule "core/deps/libchdr"]
|
||||
path = core/deps/libchdr
|
||||
url = https://github.com/rtissera/libchdr.git
|
||||
-998
@@ -1,998 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.10.2)
|
||||
|
||||
find_program(CCACHE_FOUND ccache)
|
||||
if(CCACHE_FOUND)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
|
||||
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
|
||||
endif()
|
||||
|
||||
option(ENABLE_CTEST "Enables unit tests" OFF)
|
||||
option(ENABLE_OPROFILE "Enable OProfile" OFF)
|
||||
option(TEST_AUTOMATION "Enable test automation" OFF)
|
||||
option(ENABLE_LOG "Enable full logging" OFF)
|
||||
option(ASAN "Enable address sanitizer" OFF)
|
||||
option(USE_GLES "Use GLES[3] API" OFF)
|
||||
option(USE_GLES2 "Use GLES2 API" OFF)
|
||||
option(USE_HOST_LIBZIP "Use host libzip" ON)
|
||||
option(USE_OPENMP "Use OpenMP if available" ON)
|
||||
option(USE_VULKAN "Build with Vulkan support" ON)
|
||||
|
||||
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/shell/cmake")
|
||||
|
||||
if(APPLE)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum macOS deployment version")
|
||||
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "")
|
||||
endif()
|
||||
|
||||
project(flycast)
|
||||
|
||||
if(ENABLE_CTEST)
|
||||
include(CTest)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
set(CMAKE_Swift_LANGUAGE_VERSION 5.0)
|
||||
enable_language(Swift)
|
||||
endif()
|
||||
|
||||
find_package(Git)
|
||||
if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} describe --tags --always
|
||||
OUTPUT_VARIABLE GIT_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
OUTPUT_VARIABLE GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
endif()
|
||||
|
||||
string(TIMESTAMP BUILD_TIMESTAMP UTC)
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/core/version.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/core/version.h" @ONLY)
|
||||
|
||||
if(ANDROID)
|
||||
add_library(${PROJECT_NAME} SHARED core/nullDC.cpp)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -fno-stack-protector)
|
||||
set(CMAKE_ANDROID_STL_TYPE "c++_static")
|
||||
elseif(MSVC)
|
||||
add_executable(${PROJECT_NAME} WIN32 core/nullDC.cpp)
|
||||
else()
|
||||
add_executable(${PROJECT_NAME} MACOSX_BUNDLE core/nullDC.cpp)
|
||||
endif()
|
||||
|
||||
target_compile_features(${PROJECT_NAME} PRIVATE c_std_11 cxx_std_11)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
CXX_EXTENSIONS OFF
|
||||
LINK_FLAGS_RELEASE -s)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
|
||||
-fno-strict-aliasing)
|
||||
elseif(MSVC)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE /GR- /GS-)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
$<$<BOOL:APPLE>:GL_SILENCE_DEPRECATION>
|
||||
$<$<BOOL:MSVC>:_CRT_NONSTDC_NO_WARNINGS>
|
||||
$<$<BOOL:MSVC>:_CRT_SECURE_NO_WARNINGS>
|
||||
$<$<BOOL:MSVC>:_USE_MATH_DEFINES>
|
||||
$<$<BOOL:MSVC>:NOMINMAX>
|
||||
$<$<BOOL:${TEST_AUTOMATION}>:TEST_AUTOMATION>
|
||||
$<$<BOOL:${ENABLE_LOG}>:DEBUGFAST>)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core core/deps core/deps/stb core/khronos)
|
||||
|
||||
find_package(OpenMP)
|
||||
if(OpenMP_CXX_FOUND AND NOT APPLE AND USE_OPENMP)
|
||||
if(MINGW)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "-static -lgomp -lpthread")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -fopenmp)
|
||||
elseif(ANDROID)
|
||||
# Reference: https://android.googlesource.com/platform/ndk/+/refs/heads/master/tests/device/openmp/CMakeLists.txt
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_OPTIONS -fopenmp)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE -fopenmp -static-openmp)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE OpenMP::OpenMP_CXX)
|
||||
endif()
|
||||
else()
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE TARGET_NO_OPENMP)
|
||||
endif()
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
||||
set(XXHASH_BUILD_XXHSUM OFF CACHE BOOL "Build the xxhsum binary")
|
||||
add_subdirectory(core/deps/xxHash/cmake_unofficial)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE xxHash::xxhash)
|
||||
|
||||
option(BUILD_SHARED_LIBS "Build shared library" OFF)
|
||||
add_subdirectory(core/deps/glm)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE glm::glm)
|
||||
|
||||
if(NOT APPLE)
|
||||
option(BUILD_EXTERNAL "Build external dependencies in /External" OFF)
|
||||
add_subdirectory(core/deps/glslang)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE SPIRV)
|
||||
endif()
|
||||
|
||||
find_package(ALSA)
|
||||
if(ALSA_FOUND AND NOT ANDROID)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_ALSA)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${ALSA_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${ALSA_LIBRARIES})
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
# Build SDL
|
||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL")
|
||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
set(SDL_CMAKE_ARCH_ARG -A ${CMAKE_GENERATOR_PLATFORM})
|
||||
endif()
|
||||
execute_process(COMMAND ${CMAKE_COMMAND}
|
||||
"-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL"
|
||||
-DLIBC=ON
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-G "${CMAKE_GENERATOR}"
|
||||
${SDL_CMAKE_ARCH_ARG}
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/core/deps/SDL"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL" --config Release --target install)
|
||||
endif()
|
||||
|
||||
if(MINGW)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "-static-libgcc -static-libstdc++")
|
||||
endif()
|
||||
|
||||
if(APPLE OR WIN32)
|
||||
find_package(SDL2 HINTS "${CMAKE_CURRENT_BINARY_DIR}/core/deps/SDL/cmake")
|
||||
elseif(NOT ANDROID)
|
||||
find_package(SDL2)
|
||||
endif()
|
||||
if(SDL2_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_SDL USE_SDL_AUDIO)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/sdl/sdl.cpp core/sdl/sdl.h core/sdl/sdl_gamepad.h core/sdl/sdl_keyboard.h)
|
||||
if(APPLE)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${SDL2_INCLUDE_DIRS}/..")
|
||||
else()
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${SDL2_INCLUDE_DIRS})
|
||||
endif()
|
||||
if((APPLE OR WIN32) AND TARGET SDL2::SDL2-static)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2-static)
|
||||
elseif(TARGET SDL2::SDL2)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE SDL2::SDL2)
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${SDL2_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
find_package(ZLIB)
|
||||
if(TARGET ZLIB::ZLIB AND NOT ANDROID AND NOT WIN32)
|
||||
set(WITH_SYSTEM_ZLIB ON CACHE BOOL "Use system provided zlib library")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB)
|
||||
endif()
|
||||
add_subdirectory(core/deps/libchdr)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE chdr-static)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/libchdr/include)
|
||||
|
||||
if(NOT WITH_SYSTEM_ZLIB)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/libchdr/deps/zlib-1.2.11")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE zlib)
|
||||
# help libzip find the package
|
||||
set(ZLIB_FOUND TRUE)
|
||||
set(ZLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/core/deps/libchdr/deps/zlib-1.2.11")
|
||||
cmake_policy(SET CMP0026 OLD)
|
||||
get_target_property(ZLIB_LIBRARY zlib LOCATION)
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig)
|
||||
if(PKG_CONFIG_FOUND AND NOT ANDROID AND NOT APPLE)
|
||||
pkg_check_modules(AO IMPORTED_TARGET ao)
|
||||
if(AO_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_LIBAO)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::AO)
|
||||
endif()
|
||||
|
||||
if(NOT SDL2_FOUND)
|
||||
pkg_check_modules(LIBEVDEV IMPORTED_TARGET libevdev)
|
||||
if(LIBEVDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_EVDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBEVDEV)
|
||||
|
||||
pkg_check_modules(LIBUDEV IMPORTED_TARGET libudev)
|
||||
if(LIBUDEV_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_UDEV)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBUDEV)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
pkg_check_modules(LIBPULSE IMPORTED_TARGET libpulse)
|
||||
if(LIBPULSE_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_PULSEAUDIO)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBPULSE)
|
||||
endif()
|
||||
|
||||
if(USE_HOST_LIBZIP)
|
||||
pkg_check_modules(LIBZIP IMPORTED_TARGET libzip)
|
||||
if(LIBZIP_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE PkgConfig::LIBZIP)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_OPROFILE)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE DYNA_OPROF)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE opagent)
|
||||
endif()
|
||||
|
||||
find_package(Miniupnpc)
|
||||
if (MINIUPNP_FOUND)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${MINIUPNP_INCLUDE_DIRS})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${MINIUPNP_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||
if(USE_GLES2)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES2)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE GLESv2)
|
||||
elseif(USE_GLES)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3)
|
||||
if(NOT SDL2_FOUND)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE EGL)
|
||||
endif()
|
||||
else()
|
||||
set(OpenGL_GL_PREFERENCE LEGACY)
|
||||
find_package(OpenGL REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE OpenGL::GL)
|
||||
endif()
|
||||
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE Threads::Threads)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE False)
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT SDL2_FOUND)
|
||||
find_package(X11 REQUIRED)
|
||||
if(X11_FOUND)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE SUPPORT_X11)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${X11_INCLUDE_DIR})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${X11_LIBRARIES})
|
||||
endif()
|
||||
else()
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE EGL_NO_X11)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS} rt)
|
||||
endif()
|
||||
|
||||
if(ASAN)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -fsanitize=address -static-libasan)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address -static-libasan")
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
find_package(oboe REQUIRED CONFIG)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_OBOE)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE oboe::oboe)
|
||||
endif()
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/deps/chdpsr/cdipsr.cpp
|
||||
core/deps/chdpsr/cdipsr.h)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/nowide/include)
|
||||
|
||||
if(NOT MINIUPNP_FOUND)
|
||||
option(UPNPC_BUILD_SHARED "Build shared library" OFF)
|
||||
option(UPNPC_BUILD_TESTS "Build test executables" OFF)
|
||||
option(UPNPC_BUILD_SAMPLE "Build sample executables" OFF)
|
||||
option(UPNPC_NO_INSTALL "Disable installation" ON)
|
||||
add_subdirectory(core/deps/miniupnpc)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/miniupnpc)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE miniupnpc::miniupnpc)
|
||||
endif()
|
||||
|
||||
if(NOT LIBZIP_FOUND)
|
||||
option(ENABLE_COMMONCRYPTO "Enable use of CommonCrypto" OFF)
|
||||
option(ENABLE_GNUTLS "Enable use of GnuTLS" OFF)
|
||||
option(ENABLE_MBEDTLS "Enable use of mbed TLS" OFF)
|
||||
option(ENABLE_OPENSSL "Enable use of OpenSSL" OFF)
|
||||
option(ENABLE_WINDOWS_CRYPTO "Enable use of Windows cryptography libraries" OFF)
|
||||
option(ENABLE_BZIP2 "Enable use of BZip2" OFF)
|
||||
option(ENABLE_LZMA "Enable use of LZMA" OFF)
|
||||
option(ENABLE_ZSTD "Enable use of Zstandard" OFF)
|
||||
option(BUILD_TOOLS "Build tools in the src directory (zipcmp, zipmerge, ziptool)" OFF)
|
||||
option(BUILD_REGRESS "Build regression tests" OFF)
|
||||
option(BUILD_EXAMPLES "Build examples" OFF)
|
||||
option(BUILD_DOC "Build documentation" OFF)
|
||||
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
||||
option(LIBZIP_DO_INSTALL "Install libzip and the related files" OFF)
|
||||
add_subdirectory(core/deps/libzip)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/libzip/lib)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE zip)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/dirent)
|
||||
endif()
|
||||
|
||||
if(NOT MSVC)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/picotcp/include core/deps/picotcp/modules)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/deps/picotcp/include/arch/pico_arm9.h
|
||||
core/deps/picotcp/include/arch/pico_atsamd21j18.h
|
||||
core/deps/picotcp/include/arch/pico_avr.h
|
||||
core/deps/picotcp/include/arch/pico_cortex_m.h
|
||||
core/deps/picotcp/include/arch/pico_dos.h
|
||||
core/deps/picotcp/include/arch/pico_esp8266.h
|
||||
core/deps/picotcp/include/arch/pico_generic_gcc.h
|
||||
core/deps/picotcp/include/arch/pico_linux.h
|
||||
core/deps/picotcp/include/arch/pico_mbed.h
|
||||
core/deps/picotcp/include/arch/pico_msp430.h
|
||||
core/deps/picotcp/include/arch/pico_msvc.h
|
||||
core/deps/picotcp/include/arch/pico_none.h
|
||||
core/deps/picotcp/include/arch/pico_pic24.h
|
||||
core/deps/picotcp/include/arch/pico_pic32.h
|
||||
core/deps/picotcp/include/arch/pico_posix.h
|
||||
core/deps/picotcp/include/heap.h
|
||||
core/deps/picotcp/include/pico_addressing.h
|
||||
core/deps/picotcp/include/pico_config.h
|
||||
core/deps/picotcp/include/pico_constants.h
|
||||
core/deps/picotcp/include/pico_defines.h
|
||||
core/deps/picotcp/include/pico_defines_msvc.h
|
||||
core/deps/picotcp/include/pico_device.h
|
||||
core/deps/picotcp/include/pico_eth.h
|
||||
core/deps/picotcp/include/pico_frame.h
|
||||
core/deps/picotcp/include/pico_md5.h
|
||||
core/deps/picotcp/include/pico_module_eth.h
|
||||
core/deps/picotcp/include/pico_protocol.h
|
||||
core/deps/picotcp/include/pico_queue.h
|
||||
core/deps/picotcp/include/pico_socket.h
|
||||
core/deps/picotcp/include/pico_socket_multicast.h
|
||||
core/deps/picotcp/include/pico_stack.h
|
||||
core/deps/picotcp/include/pico_tree.h
|
||||
core/deps/picotcp/modules/pico_arp.c
|
||||
core/deps/picotcp/modules/pico_dev_ppp.c
|
||||
core/deps/picotcp/modules/pico_dhcp_common.c
|
||||
core/deps/picotcp/modules/pico_dhcp_common.h
|
||||
core/deps/picotcp/modules/pico_dhcp_server.c
|
||||
core/deps/picotcp/modules/pico_dhcp_server.h
|
||||
core/deps/picotcp/modules/pico_dns_client.c
|
||||
core/deps/picotcp/modules/pico_dns_common.c
|
||||
core/deps/picotcp/modules/pico_ethernet.c
|
||||
core/deps/picotcp/modules/pico_fragments.c
|
||||
core/deps/picotcp/modules/pico_icmp4.c
|
||||
core/deps/picotcp/modules/pico_ipv4.c
|
||||
core/deps/picotcp/modules/pico_socket_tcp.c
|
||||
core/deps/picotcp/modules/pico_socket_udp.c
|
||||
core/deps/picotcp/modules/pico_strings.c
|
||||
core/deps/picotcp/modules/pico_tcp.c
|
||||
core/deps/picotcp/modules/pico_udp.c
|
||||
core/deps/picotcp/stack/pico_device.c
|
||||
core/deps/picotcp/stack/pico_frame.c
|
||||
core/deps/picotcp/stack/pico_md5.c
|
||||
core/deps/picotcp/stack/pico_protocol.c
|
||||
core/deps/picotcp/stack/pico_socket.c
|
||||
core/deps/picotcp/stack/pico_socket_multicast.c
|
||||
core/deps/picotcp/stack/pico_stack.c
|
||||
core/deps/picotcp/stack/pico_tree.c)
|
||||
endif()
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE _7ZIP_ST)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/deps/lzma/7zArcIn.c core/deps/lzma/7zBuf.c core/deps/lzma/7zCrc.c core/deps/lzma/7zCrcOpt.c core/deps/lzma/7zDec.c core/deps/lzma/7zFile.c core/deps/lzma/7zStream.c core/deps/lzma/Alloc.c core/deps/lzma/Bcj2.c core/deps/lzma/Bra86.c core/deps/lzma/Bra.c core/deps/lzma/BraIA64.c core/deps/lzma/CpuArch.c core/deps/lzma/Delta.c core/deps/lzma/LzFind.c core/deps/lzma/Lzma2Dec.c core/deps/lzma/Lzma86Dec.c core/deps/lzma/Lzma86Enc.c core/deps/lzma/LzmaDec.c core/deps/lzma/LzmaEnc.c core/deps/lzma/LzmaLib.c core/deps/lzma/Sort.c)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/deps/libelf/elf32.cpp core/deps/libelf/elf64.cpp core/deps/libelf/elf.cpp)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/deps/imgui/imgui.cpp core/deps/imgui/imgui_demo.cpp core/deps/imgui/imgui_draw.cpp core/deps/imgui/imgui_widgets.cpp)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/deps/xbrz/xbrz.cpp)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/archive/7zArchive.cpp
|
||||
core/archive/7zArchive.h
|
||||
core/archive/archive.cpp
|
||||
core/archive/archive.h
|
||||
core/archive/rzip.cpp
|
||||
core/archive/rzip.h
|
||||
core/archive/ZipArchive.cpp
|
||||
core/archive/ZipArchive.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/cfg/cfg.cpp
|
||||
core/cfg/cfg.h
|
||||
core/cfg/cl.cpp
|
||||
core/cfg/ini.cpp
|
||||
core/cfg/ini.h
|
||||
core/cfg/option.cpp
|
||||
core/cfg/option.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/hw/aica/aica.cpp
|
||||
core/hw/aica/aica.h
|
||||
core/hw/aica/aica_if.cpp
|
||||
core/hw/aica/aica_if.h
|
||||
core/hw/aica/aica_mem.cpp
|
||||
core/hw/aica/aica_mem.h
|
||||
core/hw/aica/dsp.cpp
|
||||
core/hw/aica/dsp.h
|
||||
core/hw/aica/dsp_arm64.cpp
|
||||
core/hw/aica/dsp_interp.cpp
|
||||
core/hw/aica/dsp_x64.cpp
|
||||
core/hw/aica/dsp_x86.cpp
|
||||
core/hw/aica/sgc_if.cpp
|
||||
core/hw/aica/sgc_if.h
|
||||
core/hw/arm7/arm7.cpp
|
||||
core/hw/arm7/arm7.h
|
||||
core/hw/arm7/arm_mem.cpp
|
||||
core/hw/arm7/arm_mem.h
|
||||
core/hw/arm7/arm7_rec_arm32.cpp
|
||||
core/hw/arm7/arm7_rec_arm64.cpp
|
||||
core/hw/arm7/arm7_rec_x64.cpp
|
||||
core/hw/arm7/arm7_rec.cpp
|
||||
core/hw/arm7/arm7_rec.h
|
||||
core/hw/arm7/arm-new.h
|
||||
core/hw/arm7/vbaARM.cpp
|
||||
core/hw/bba/bba.h
|
||||
core/hw/bba/bba.cpp
|
||||
core/hw/bba/rtl8139c.h
|
||||
core/hw/bba/rtl8139c.cpp
|
||||
core/hw/flashrom/flashrom.h
|
||||
core/hw/gdrom/gdrom_if.h
|
||||
core/hw/gdrom/gdrom_response.cpp
|
||||
core/hw/gdrom/gdromv3.cpp
|
||||
core/hw/gdrom/gdromv3.h
|
||||
core/hw/holly/holly_intc.cpp
|
||||
core/hw/holly/holly_intc.h
|
||||
core/hw/holly/sb.cpp
|
||||
core/hw/holly/sb.h
|
||||
core/hw/holly/sb_mem.cpp
|
||||
core/hw/holly/sb_mem.h
|
||||
core/hw/maple/maple_cfg.cpp
|
||||
core/hw/maple/maple_cfg.h
|
||||
core/hw/maple/maple_devs.cpp
|
||||
core/hw/maple/maple_devs.h
|
||||
core/hw/maple/maple_helper.cpp
|
||||
core/hw/maple/maple_helper.h
|
||||
core/hw/maple/maple_if.cpp
|
||||
core/hw/maple/maple_if.h
|
||||
core/hw/maple/maple_jvs.cpp
|
||||
core/hw/mem/_vmem.cpp
|
||||
core/hw/mem/_vmem.h
|
||||
core/hw/modem/modem.cpp
|
||||
core/hw/modem/modem.h
|
||||
core/hw/modem/modem_regs.h
|
||||
core/hw/naomi/awave_regs.h
|
||||
core/hw/naomi/awcartridge.cpp
|
||||
core/hw/naomi/awcartridge.h
|
||||
core/hw/naomi/decrypt.cpp
|
||||
core/hw/naomi/decrypt.h
|
||||
core/hw/naomi/gdcartridge.cpp
|
||||
core/hw/naomi/gdcartridge.h
|
||||
core/hw/naomi/m1cartridge.cpp
|
||||
core/hw/naomi/m1cartridge.h
|
||||
core/hw/naomi/m4cartridge.cpp
|
||||
core/hw/naomi/m4cartridge.h
|
||||
core/hw/naomi/naomi_cart.cpp
|
||||
core/hw/naomi/naomi_cart.h
|
||||
core/hw/naomi/naomi_flashrom.cpp
|
||||
core/hw/naomi/naomi_flashrom.h
|
||||
core/hw/naomi/naomi_m3comm.cpp
|
||||
core/hw/naomi/naomi_m3comm.h
|
||||
core/hw/naomi/naomi.cpp
|
||||
core/hw/naomi/naomi.h
|
||||
core/hw/naomi/naomi_regs.h
|
||||
core/hw/naomi/naomi_roms.cpp
|
||||
core/hw/naomi/naomi_roms.h
|
||||
core/hw/naomi/naomi_roms_input.h
|
||||
core/hw/pvr/drkPvr.cpp
|
||||
core/hw/pvr/helper_classes.h
|
||||
core/hw/pvr/pvr_mem.cpp
|
||||
core/hw/pvr/pvr_mem.h
|
||||
core/hw/pvr/pvr_regs.cpp
|
||||
core/hw/pvr/pvr_regs.h
|
||||
core/hw/pvr/pvr_sb_regs.cpp
|
||||
core/hw/pvr/pvr_sb_regs.h
|
||||
core/hw/pvr/Renderer_if.cpp
|
||||
core/hw/pvr/Renderer_if.h
|
||||
core/hw/pvr/spg.cpp
|
||||
core/hw/pvr/spg.h
|
||||
core/hw/pvr/ta_const_df.h
|
||||
core/hw/pvr/ta.cpp
|
||||
core/hw/pvr/ta_ctx.cpp
|
||||
core/hw/pvr/ta_ctx.h
|
||||
core/hw/pvr/ta.h
|
||||
core/hw/pvr/ta_structs.h
|
||||
core/hw/pvr/ta_vtx.cpp
|
||||
core/hw/sh4/dyna
|
||||
core/hw/sh4/dyna/blockmanager.cpp
|
||||
core/hw/sh4/dyna/blockmanager.h
|
||||
core/hw/sh4/dyna/decoder.cpp
|
||||
core/hw/sh4/dyna/decoder.h
|
||||
core/hw/sh4/dyna/decoder_opcodes.h
|
||||
core/hw/sh4/dyna/driver.cpp
|
||||
core/hw/sh4/dyna/ngen.h
|
||||
core/hw/sh4/dyna/regalloc.h
|
||||
core/hw/sh4/dyna/shil_canonical.h
|
||||
core/hw/sh4/dyna/shil.cpp
|
||||
core/hw/sh4/dyna/shil.h
|
||||
core/hw/sh4/dyna/ssa.cpp
|
||||
core/hw/sh4/dyna/ssa.h
|
||||
core/hw/sh4/dyna/ssa_regalloc.h
|
||||
core/hw/sh4/fsca-table.h
|
||||
core/hw/sh4/interpr
|
||||
core/hw/sh4/interpr/sh4_fpu.cpp
|
||||
core/hw/sh4/interpr/sh4_interpreter.cpp
|
||||
core/hw/sh4/interpr/sh4_opcodes.cpp
|
||||
core/hw/sh4/interpr/sh4_opcodes.h
|
||||
core/hw/sh4/modules
|
||||
core/hw/sh4/modules/bsc.cpp
|
||||
core/hw/sh4/modules/ccn.cpp
|
||||
core/hw/sh4/modules/ccn.h
|
||||
core/hw/sh4/modules/cpg.cpp
|
||||
core/hw/sh4/modules/dmac.cpp
|
||||
core/hw/sh4/modules/dmac.h
|
||||
core/hw/sh4/modules/fastmmu.cpp
|
||||
core/hw/sh4/modules/intc.cpp
|
||||
core/hw/sh4/modules/mmu.cpp
|
||||
core/hw/sh4/modules/mmu.h
|
||||
core/hw/sh4/modules/modules.h
|
||||
core/hw/sh4/modules/rtc.cpp
|
||||
core/hw/sh4/modules/serial.cpp
|
||||
core/hw/sh4/modules/tmu.cpp
|
||||
core/hw/sh4/modules/ubc.cpp
|
||||
core/hw/sh4/modules/wince.h
|
||||
core/hw/sh4/sh4_cache.h
|
||||
core/hw/sh4/sh4_core.h
|
||||
core/hw/sh4/sh4_core_regs.cpp
|
||||
core/hw/sh4/sh4_if.h
|
||||
core/hw/sh4/sh4_interpreter.h
|
||||
core/hw/sh4/sh4_interrupts.cpp
|
||||
core/hw/sh4/sh4_interrupts.h
|
||||
core/hw/sh4/sh4_mem.cpp
|
||||
core/hw/sh4/sh4_mem.h
|
||||
core/hw/sh4/sh4_mmr.cpp
|
||||
core/hw/sh4/sh4_mmr.h
|
||||
core/hw/sh4/sh4_opcode_list.cpp
|
||||
core/hw/sh4/sh4_opcode_list.h
|
||||
core/hw/sh4/sh4_rom.cpp
|
||||
core/hw/sh4/sh4_rom.h
|
||||
core/hw/sh4/sh4_sched.cpp
|
||||
core/hw/sh4/sh4_sched.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/imgread/cdi.cpp
|
||||
core/imgread/chd.cpp
|
||||
core/imgread/common.cpp
|
||||
core/imgread/common.h
|
||||
core/imgread/cue.cpp
|
||||
core/imgread/gdi.cpp
|
||||
core/imgread/ImgReader.cpp
|
||||
core/imgread/ioctl.cpp)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/input/gamepad.h
|
||||
core/input/gamepad_device.cpp
|
||||
core/input/gamepad_device.h
|
||||
core/input/keyboard_device.h
|
||||
core/input/mapping.cpp
|
||||
core/input/mapping.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/linux/common.cpp)
|
||||
|
||||
if(NOT WIN32)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/linux/context.cpp
|
||||
core/linux/posix_vmem.cpp)
|
||||
endif()
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/linux-dist/dispmanx.cpp
|
||||
core/linux-dist/dispmanx.h
|
||||
core/linux-dist/evdev.cpp
|
||||
core/linux-dist/evdev.h
|
||||
core/linux-dist/icon.h
|
||||
core/linux-dist/joystick.cpp
|
||||
core/linux-dist/joystick.h
|
||||
core/linux-dist/x11.cpp
|
||||
core/linux-dist/x11.h
|
||||
core/linux-dist/x11_keyboard.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/log/BitSet.h
|
||||
core/log/ConsoleListener.h
|
||||
core/log/ConsoleListenerDroid.cpp
|
||||
core/log/ConsoleListenerNix.cpp
|
||||
core/log/ConsoleListenerWin.cpp
|
||||
core/log/Log.h
|
||||
core/log/LogManager.cpp
|
||||
core/log/LogManager.h
|
||||
core/log/StringUtil.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/network/dns.cpp
|
||||
core/network/miniupnp.cpp
|
||||
core/network/miniupnp.h
|
||||
core/network/naomi_network.cpp
|
||||
core/network/naomi_network.h
|
||||
core/network/net_platform.h
|
||||
core/network/picoppp.cpp
|
||||
core/network/picoppp.h)
|
||||
|
||||
if(ANDROID)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/network/ifaddrs.c)
|
||||
endif()
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/oslib/audiobackend_alsa.cpp
|
||||
core/oslib/audiobackend_coreaudio.cpp
|
||||
core/oslib/audiobackend_directsound.cpp
|
||||
core/oslib/audiobackend_libao.cpp
|
||||
core/oslib/audiobackend_null.cpp
|
||||
core/oslib/audiobackend_oboe.cpp
|
||||
core/oslib/audiobackend_omx.cpp
|
||||
core/oslib/audiobackend_oss.cpp
|
||||
core/oslib/audiobackend_pulseaudio.cpp
|
||||
core/oslib/audiobackend_sdl2.cpp
|
||||
core/oslib/audiostream.cpp
|
||||
core/oslib/audiostream.h
|
||||
core/oslib/directory.h
|
||||
core/oslib/host_context.h
|
||||
core/oslib/oslib.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/profiler/profiler.cpp
|
||||
core/profiler/profiler.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rec-cpp/rec_cpp.cpp)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/reios/descrambl.cpp
|
||||
core/reios/descrambl.h
|
||||
core/reios/font.h
|
||||
core/reios/gdrom_hle.cpp
|
||||
core/reios/gdrom_hle.h
|
||||
core/reios/iso9660.h
|
||||
core/reios/reios.cpp
|
||||
core/reios/reios.h
|
||||
core/reios/reios_elf.cpp
|
||||
core/reios/reios_elf.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/wsi/context.h
|
||||
core/wsi/egl.cpp
|
||||
core/wsi/egl.h
|
||||
core/wsi/gl4funcs.cpp
|
||||
core/wsi/gl_context.cpp
|
||||
core/wsi/gl_context.h
|
||||
core/wsi/osx.cpp
|
||||
core/wsi/osx.h
|
||||
core/wsi/sdl.cpp
|
||||
core/wsi/sdl.h
|
||||
core/wsi/switcher.cpp
|
||||
core/wsi/wgl.cpp
|
||||
core/wsi/wgl.h
|
||||
core/wsi/xgl.cpp
|
||||
core/wsi/xgl.h)
|
||||
|
||||
if(NOT APPLE)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/wsi/gl32funcs.c
|
||||
core/wsi/gl32funcs.h)
|
||||
endif()
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/build.h
|
||||
core/cheats.cpp
|
||||
core/cheats.h
|
||||
core/dispframe.cpp
|
||||
core/emulator.h
|
||||
core/serialize.cpp
|
||||
core/stdclass.cpp
|
||||
core/stdclass.h
|
||||
core/types.h
|
||||
core/debug/gdb_server.h)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/gles/glcache.h
|
||||
core/rend/gles/gldraw.cpp
|
||||
core/rend/gles/gles.cpp
|
||||
core/rend/gles/gles.h
|
||||
core/rend/gles/gltex.cpp
|
||||
core/rend/gles/imgui_impl_opengl3.cpp
|
||||
core/rend/gles/imgui_impl_opengl3.h
|
||||
core/rend/gles/quad.cpp
|
||||
core/rend/CustomTexture.cpp
|
||||
core/rend/CustomTexture.h
|
||||
core/rend/game_scanner.h
|
||||
core/rend/gui.cpp
|
||||
core/rend/gui.h
|
||||
core/rend/gui_android.cpp
|
||||
core/rend/gui_android.h
|
||||
core/rend/gui_cheats.cpp
|
||||
core/rend/gui_util.cpp
|
||||
core/rend/gui_util.h
|
||||
core/rend/mainui.cpp
|
||||
core/rend/osd.cpp
|
||||
core/rend/osd.h
|
||||
core/rend/sorter.cpp
|
||||
core/rend/sorter.h
|
||||
core/rend/tileclip.h
|
||||
core/rend/TexCache.cpp
|
||||
core/rend/TexCache.h)
|
||||
|
||||
if(NOT (APPLE OR ANDROID OR USE_GLES OR USE_GLES2))
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/gl4/abuffer.cpp
|
||||
core/rend/gl4/gl4.h
|
||||
core/rend/gl4/gldraw.cpp
|
||||
core/rend/gl4/gles.cpp)
|
||||
endif()
|
||||
|
||||
if(USE_VULKAN AND NOT APPLE)
|
||||
if(ANDROID)
|
||||
set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_ANDROID_KHR)
|
||||
elseif(X11_FOUND)
|
||||
set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_XLIB_KHR)
|
||||
elseif(WIN32)
|
||||
set(VOLK_STATIC_DEFINES VK_USE_PLATFORM_WIN32_KHR)
|
||||
endif()
|
||||
|
||||
set(VOLK_PULL_IN_VULKAN OFF)
|
||||
add_subdirectory(core/deps/volk)
|
||||
target_include_directories(volk PRIVATE core/khronos)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE volk)
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_VULKAN)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/vulkan/oit/oit_buffer.h
|
||||
core/rend/vulkan/oit/oit_drawer.cpp
|
||||
core/rend/vulkan/oit/oit_drawer.h
|
||||
core/rend/vulkan/oit/oit_pipeline.cpp
|
||||
core/rend/vulkan/oit/oit_pipeline.h
|
||||
core/rend/vulkan/oit/oit_renderer.cpp
|
||||
core/rend/vulkan/oit/oit_renderpass.cpp
|
||||
core/rend/vulkan/oit/oit_renderpass.h
|
||||
core/rend/vulkan/oit/oit_shaders.cpp
|
||||
core/rend/vulkan/oit/oit_shaders.h
|
||||
core/rend/vulkan/buffer.cpp
|
||||
core/rend/vulkan/buffer.h
|
||||
core/rend/vulkan/commandpool.h
|
||||
core/rend/vulkan/compiler.cpp
|
||||
core/rend/vulkan/compiler.h
|
||||
core/rend/vulkan/drawer.cpp
|
||||
core/rend/vulkan/drawer.h
|
||||
core/rend/vulkan/imgui_impl_vulkan.cpp
|
||||
core/rend/vulkan/imgui_impl_vulkan.h
|
||||
core/rend/vulkan/pipeline.cpp
|
||||
core/rend/vulkan/pipeline.h
|
||||
core/rend/vulkan/quad.cpp
|
||||
core/rend/vulkan/quad.h
|
||||
core/rend/vulkan/shaders.cpp
|
||||
core/rend/vulkan/shaders.h
|
||||
core/rend/vulkan/texture.cpp
|
||||
core/rend/vulkan/texture.h
|
||||
core/rend/vulkan/utils.h
|
||||
core/rend/vulkan/vk_mem_alloc.h
|
||||
core/rend/vulkan/vmallocator.cpp
|
||||
core/rend/vulkan/vmallocator.h
|
||||
core/rend/vulkan/overlay.cpp
|
||||
core/rend/vulkan/overlay.h
|
||||
core/rend/vulkan/vulkan_context.cpp
|
||||
core/rend/vulkan/vulkan_context.h
|
||||
core/rend/vulkan/vulkan.h
|
||||
core/rend/vulkan/vulkan_renderer.cpp)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rend/dx9/comptr.h
|
||||
core/rend/dx9/d3d_overlay.h
|
||||
core/rend/dx9/d3d_overlay.cpp
|
||||
core/rend/dx9/d3d_renderer.h
|
||||
core/rend/dx9/d3d_renderer.cpp
|
||||
core/rend/dx9/d3d_shaders.h
|
||||
core/rend/dx9/d3d_shaders.cpp
|
||||
core/rend/dx9/d3d_texture.h
|
||||
core/rend/dx9/d3d_texture.cpp
|
||||
core/rend/dx9/dxcontext.h
|
||||
core/rend/dx9/dxcontext.cpp
|
||||
core/rend/dx9/imgui_impl_dx9.h
|
||||
core/rend/dx9/imgui_impl_dx9.cpp)
|
||||
if(NOT MINGW)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE "$ENV{DXSDK_DIR}/Include")
|
||||
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
target_link_directories(${PROJECT_NAME} PRIVATE "$ENV{DXSDK_DIR}/Lib/x64")
|
||||
else()
|
||||
target_link_directories(${PROJECT_NAME} PRIVATE "$ENV{DXSDK_DIR}/Lib/x86")
|
||||
endif()
|
||||
endif()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE d3d9 d3dx9)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)" AND NOT APPLE)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/vixl)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rec-ARM/rec_arm.cpp
|
||||
core/deps/vixl/aarch32/location-aarch32.cc
|
||||
core/deps/vixl/aarch32/location-aarch32.h
|
||||
core/deps/vixl/aarch32/assembler-aarch32.cc
|
||||
core/deps/vixl/aarch32/assembler-aarch32.h
|
||||
core/deps/vixl/aarch32/instructions-aarch32.cc
|
||||
core/deps/vixl/aarch32/instructions-aarch32.h
|
||||
core/deps/vixl/aarch32/constants-aarch32.cc
|
||||
core/deps/vixl/aarch32/constants-aarch32.h
|
||||
core/deps/vixl/aarch32/macro-assembler-aarch32.cc
|
||||
core/deps/vixl/aarch32/macro-assembler-aarch32.h
|
||||
core/deps/vixl/aarch32/operands-aarch32.cc
|
||||
core/deps/vixl/aarch32/operands-aarch32.h
|
||||
core/deps/vixl/aarch32/disasm-aarch32.cc
|
||||
core/deps/vixl/aarch32/disasm-aarch32.h
|
||||
core/deps/vixl/assembler-base-vixl.h
|
||||
core/deps/vixl/code-buffer-vixl.cc
|
||||
core/deps/vixl/code-buffer-vixl.h
|
||||
core/deps/vixl/code-generation-scopes-vixl.h
|
||||
core/deps/vixl/compiler-intrinsics-vixl.cc
|
||||
core/deps/vixl/compiler-intrinsics-vixl.h
|
||||
core/deps/vixl/cpu-features.cc
|
||||
core/deps/vixl/cpu-features.h
|
||||
core/deps/vixl/globals-vixl.h
|
||||
core/deps/vixl/invalset-vixl.h
|
||||
core/deps/vixl/macro-assembler-interface.h
|
||||
core/deps/vixl/platform-vixl.h
|
||||
core/deps/vixl/pool-manager.h
|
||||
core/deps/vixl/pool-manager-impl.h
|
||||
core/deps/vixl/utils-vixl.cc
|
||||
core/deps/vixl/utils-vixl.h)
|
||||
set(KNOWN_ARCHITECTURE_DETECTED ON)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*)" OR CMAKE_OSX_ARCHITECTURES MATCHES "arm64")
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE core/deps/vixl)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/deps/vixl/aarch64/abi-aarch64.h
|
||||
core/deps/vixl/aarch64/assembler-aarch64.cc
|
||||
core/deps/vixl/aarch64/assembler-aarch64.h
|
||||
core/deps/vixl/aarch64/constants-aarch64.h
|
||||
core/deps/vixl/aarch64/cpu-aarch64.cc
|
||||
core/deps/vixl/aarch64/cpu-aarch64.h
|
||||
core/deps/vixl/aarch64/cpu-features-auditor-aarch64.cc
|
||||
core/deps/vixl/aarch64/cpu-features-auditor-aarch64.h
|
||||
core/deps/vixl/aarch64/decoder-aarch64.cc
|
||||
core/deps/vixl/aarch64/decoder-aarch64.h
|
||||
core/deps/vixl/aarch64/disasm-aarch64.cc
|
||||
core/deps/vixl/aarch64/disasm-aarch64.h
|
||||
core/deps/vixl/aarch64/instructions-aarch64.cc
|
||||
core/deps/vixl/aarch64/instructions-aarch64.h
|
||||
core/deps/vixl/aarch64/instrument-aarch64.cc
|
||||
core/deps/vixl/aarch64/instrument-aarch64.h
|
||||
core/deps/vixl/aarch64/logic-aarch64.cc
|
||||
core/deps/vixl/aarch64/macro-assembler-aarch64.cc
|
||||
core/deps/vixl/aarch64/macro-assembler-aarch64.h
|
||||
core/deps/vixl/aarch64/operands-aarch64.cc
|
||||
core/deps/vixl/aarch64/operands-aarch64.h
|
||||
core/deps/vixl/aarch64/pointer-auth-aarch64.cc
|
||||
core/deps/vixl/aarch64/simulator-aarch64.cc
|
||||
core/deps/vixl/aarch64/simulator-aarch64.h
|
||||
core/deps/vixl/aarch64/simulator-constants-aarch64.h
|
||||
core/deps/vixl/assembler-base-vixl.h
|
||||
core/deps/vixl/code-buffer-vixl.cc
|
||||
core/deps/vixl/code-buffer-vixl.h
|
||||
core/deps/vixl/code-generation-scopes-vixl.h
|
||||
core/deps/vixl/compiler-intrinsics-vixl.cc
|
||||
core/deps/vixl/compiler-intrinsics-vixl.h
|
||||
core/deps/vixl/cpu-features.cc
|
||||
core/deps/vixl/cpu-features.h
|
||||
core/deps/vixl/globals-vixl.h
|
||||
core/deps/vixl/invalset-vixl.h
|
||||
core/deps/vixl/macro-assembler-interface.h
|
||||
core/deps/vixl/platform-vixl.h
|
||||
core/deps/vixl/pool-manager.h
|
||||
core/deps/vixl/pool-manager-impl.h
|
||||
core/deps/vixl/utils-vixl.cc
|
||||
core/deps/vixl/utils-vixl.h)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/rec-ARM64/rec_arm64.cpp core/rec-ARM64/arm64_regalloc.h)
|
||||
set(KNOWN_ARCHITECTURE_DETECTED ON)
|
||||
endif()
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|x86_64.*|AMD64.*" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
|
||||
add_subdirectory(core/deps/xbyak)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE xbyak::xbyak)
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 4)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rec-x64/xbyak_base.h
|
||||
core/rec-x86/rec_x86.h
|
||||
core/rec-x86/x86_regalloc.h
|
||||
core/rec-x86/rec_x86.cpp
|
||||
core/rec-x86/x86_ops.cpp)
|
||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/rec-x64/xbyak_base.h
|
||||
core/rec-x64/rec_x64.cpp
|
||||
core/rec-x64/x64_regalloc.h)
|
||||
endif()
|
||||
set(KNOWN_ARCHITECTURE_DETECTED ON)
|
||||
endif()
|
||||
if(NOT KNOWN_ARCHITECTURE_DETECTED)
|
||||
message(FATAL_ERROR "Unknown target processor: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE GLES GLES3)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE shell/android-studio/flycast/src/main/jni/src/Android.cpp)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE android EGL GLESv2 log)
|
||||
elseif(APPLE)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
shell/apple/emulator-osx/emulator-osx/AppDelegate.swift
|
||||
shell/apple/emulator-osx/emulator-osx/EmuGLView.swift
|
||||
shell/apple/emulator-osx/emulator-osx/osx-main.mm
|
||||
shell/apple/emulator-osx/emulator-osx/osx_gamepad.h
|
||||
shell/apple/emulator-osx/emulator-osx/osx_keyboard.h)
|
||||
|
||||
set(XIB shell/apple/emulator-osx/emulator-osx/Base.lproj/MainMenu.xib)
|
||||
set(ASSETS shell/apple/emulator-osx/emulator-osx/Images.xcassets)
|
||||
target_sources(${PROJECT_NAME} PRIVATE ${XIB} ${ASSETS})
|
||||
source_group("Resources" FILES ${XIB} ${ASSETS})
|
||||
set_source_files_properties(${ASSETS} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
|
||||
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
OUTPUT_NAME "Flycast"
|
||||
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/shell/cmake/MacOSXBundleInfo.plist.in
|
||||
MACOSX_BUNDLE_EXECUTABLE_NAME "Flycast"
|
||||
MACOSX_BUNDLE_INFO_STRING ""
|
||||
MACOSX_BUNDLE_ICON_FILE "AppIcon"
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "com.flyinghead.Flycast"
|
||||
MACOSX_BUNDLE_LONG_VERSION_STRING ""
|
||||
MACOSX_BUNDLE_BUNDLE_NAME "Flycast"
|
||||
MACOSX_BUNDLE_SHORT_VERSION_STRING "1.0"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION "1"
|
||||
MACOSX_BUNDLE_COPYRIGHT "Copyright © 2019 Flycast contributors. All rights reserved."
|
||||
XCODE_ATTRIBUTE_SWIFT_OBJC_BRIDGING_HEADER "shell/apple/emulator-osx/emulator-osx/emulator-osx-Bridging-Header.h"
|
||||
RESOURCE "${XIB}"
|
||||
XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
|
||||
BUILD_WITH_INSTALL_RPATH TRUE
|
||||
INSTALL_RPATH "@loader_path/../Frameworks"
|
||||
)
|
||||
|
||||
find_library(AUDIO_UNIT_LIBRARY AudioUnit)
|
||||
find_library(FOUNDATION_LIBRARY Foundation)
|
||||
find_library(AUDIO_TOOLBOX_LIBRARY AudioToolbox)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${AUDIO_UNIT_LIBRARY} ${FOUNDATION_LIBRARY} ${AUDIO_TOOLBOX_LIBRARY})
|
||||
elseif(UNIX)
|
||||
if(NOT BUILD_TESTING)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/linux-dist/main.cpp)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
if(NOT BUILD_TESTING)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/windows/rawinput.cpp
|
||||
core/windows/rawinput.h
|
||||
core/windows/win_keyboard.h
|
||||
core/windows/winmain.cpp
|
||||
core/windows/xinput_gamepad.h)
|
||||
endif()
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/windows/win_vmem.cpp
|
||||
shell/windows/flycast.rc)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE dsound opengl32 winmm ws2_32 wsock32 xinput9_1_0)
|
||||
endif()
|
||||
|
||||
if(BUILD_TESTING)
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
core/deps/gtest/src/gtest-all.cc
|
||||
core/deps/gtest/src/gtest_main.cc)
|
||||
|
||||
target_sources(${PROJECT_NAME} PRIVATE
|
||||
tests/src/div32_test.cpp
|
||||
tests/src/test_stubs.cpp
|
||||
tests/src/serialize_test.cpp
|
||||
tests/src/AicaArmTest.cpp
|
||||
tests/src/Sh4InterpreterTest.cpp)
|
||||
endif()
|
||||
@@ -1,36 +1,84 @@
|
||||
# Flycast
|
||||
reicast
|
||||
===========
|
||||
reicast is a sega dreamcast emulator
|
||||
|
||||
[](https://github.com/flyinghead/flycast/actions/workflows/c-cpp.yml)
|
||||
[](https://github.com/flyinghead/flycast/actions/workflows/android.yml)
|
||||
This is developer oriented resource, if you just want bins head over to http://reicast.com
|
||||
|
||||

|
||||
Caution
|
||||
-------
|
||||
The source is a mess, and I need sleep.
|
||||
We had to discover some interesting arm bugs on the cleaned/refactored branch right after the release.
|
||||
Expect a much improved changed folder/make structure soon.
|
||||
|
||||
**Flycast** is a multi-platform Sega Dreamcast, Naomi and Atomiswave emulator derived from [**reicast**](https://reicast.com/).
|
||||
Rebranding/forks
|
||||
----------------
|
||||
If you are interested into further porting/adapting/whatever, *please* don't fork off. I hate that. Really.
|
||||
|
||||
Information about configuration and supported features can be found on [**TheArcadeStriker's flycast wiki**](https://github.com/TheArcadeStriker/flycast-wiki/wiki).
|
||||
Let's try to keep everything under a single project :)
|
||||
|
||||
Join us on our [**Discord server**](https://discord.gg/X8YWP8w) for a chat.
|
||||
To build for android
|
||||
--------------------
|
||||
Tools required:
|
||||
* Latest Android SDK and NDK (duh)
|
||||
* Ant
|
||||
|
||||
## Install
|
||||
From project root directory:
|
||||
```
|
||||
cd shell\android
|
||||
android update project -p .
|
||||
|
||||
### Flatpak
|
||||
ndk-build -j 4
|
||||
|
||||
1. [Set up Flatpak](https://www.flatpak.org/setup/)
|
||||
ant debug
|
||||
```
|
||||
|
||||
2. Install Flycast from [Flathub](https://flathub.org/apps/details/org.flycast.Flycast)
|
||||
Beta versions
|
||||
-------------------
|
||||
Compiled test versions are available at recast.loungekatt.com
|
||||
|
||||
`flatpak install -y org.flycast.Flycast`
|
||||
Donations and stuff
|
||||
-------------------
|
||||
Well, glad you liked the project so far!
|
||||
|
||||
3. Run Flycast
|
||||
We're currently short on hardware
|
||||
|
||||
`flatpak run org.flycast.Flycast`
|
||||
If you would like to donate some devices, get in touch at team@reicast.com. GLES3 capable stuff, some mainstream hardware and rarities would be extremely appreciated.
|
||||
Keep in mind we're located in Greece for the most part
|
||||
|
||||
### Binaries
|
||||
This has been tested/developed on
|
||||
* Galaxy tab 7.0 Plus
|
||||
* LG P990
|
||||
* Archos 10G9
|
||||
* Some Chinese tablet
|
||||
* OUYA
|
||||
* Various development boards
|
||||
* gcw zero
|
||||
|
||||
Get fresh builds for your system [on the builds page](https://flyinghead.github.io/flycast-builds/).
|
||||
We had to buy all of these, except the gcw zero and a beaglebone which were donated (thanks! You rock!)
|
||||
|
||||
**New:** Now automated test results are available as well.
|
||||
Apart from that, we don't accept monetary donations right now.
|
||||
We also don't plan to be releasing a premium version at any store.
|
||||
Most of the project has been developed by drk||Raziel (aka, skmp, drk, Raz, etc) but it has been based on the
|
||||
works of multiple people. It would be extremely unfair to charge for it and get all the credit :)
|
||||
|
||||
## Disclaimer
|
||||
|
||||
All code contributed to this fork is *not* bound by the Individual Contributor License Agreement of the upstream repository (https://github.com/reicast/reicast-emulator) and shall *not* be considered as a contribution to the upstream repository.
|
||||
We're planning for an indiegogo campaign later on to help with sustained development and running costs, so follow @reicastdc on twitter for updates
|
||||
|
||||
|
||||
Team
|
||||
----
|
||||
|
||||
You can check the currently active committers on [the pretty graphs page](https://github.com/reicast/reicast-emulator/graphs/contributors)
|
||||
|
||||
Chat on freenode #reicast.
|
||||
|
||||
The original reicast team consisted of drk||Raziel (mostly just writing code), PsyMan (debugging/testing and everything else) and a little bit of gb_away
|
||||
|
||||
|
||||
Special thanks
|
||||
--------------
|
||||
In previous iterations a lot of people have worked on this, notably David Miller (aka, ZeZu), the nullDC team, friends from #pcsx2 and all over the world :)
|
||||
|
||||
|
||||
[](https://bitdeli.com/free "Bitdeli Badge")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
|
||||
/version.h
|
||||
+2
-15
@@ -1,17 +1,4 @@
|
||||
# core
|
||||
newdc
|
||||
===========
|
||||
|
||||
Here lies the core of our codebase. Everything that's OS inspecific rests here.
|
||||
** Please check per directory README for more info **
|
||||
|
||||
### Some rudimentary categories are:
|
||||
- hw -- DC Hardware Components Implementation
|
||||
- nullDC.cpp -- Main entry points
|
||||
- khronos -- OpenGL and Vulkan headers
|
||||
- oslib -- Audio drivers
|
||||
- cfg -- Configuration backend structure
|
||||
- reios -- (Our) Implementation of the DreamCast BIOS
|
||||
- deps -- External dependencies
|
||||
- imgread -- Content drivers
|
||||
- rec-* -- Recompilers
|
||||
- rend -- OpenGL and Vulkan renderers
|
||||
The core of the emulator
|
||||
@@ -1,134 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 22, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "7zArchive.h"
|
||||
#include "deps/lzma/7z.h"
|
||||
#include "deps/lzma/7zCrc.h"
|
||||
#include "deps/lzma/Alloc.h"
|
||||
|
||||
#define kInputBufSize ((size_t)1 << 18)
|
||||
|
||||
static bool crc_tables_generated;
|
||||
|
||||
bool SzArchive::Open(const char* path)
|
||||
{
|
||||
SzArEx_Init(&szarchive);
|
||||
|
||||
File_Close(&archiveStream.file);
|
||||
File_Construct(&archiveStream.file);
|
||||
#ifdef USE_WINDOWS_FILE
|
||||
nowide::wstackstring wpath;
|
||||
if (!wpath.convert(path))
|
||||
return false;
|
||||
archiveStream.file.handle = CreateFileW(wpath.c_str(),
|
||||
GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (archiveStream.file.handle == INVALID_HANDLE_VALUE)
|
||||
return false;
|
||||
#else
|
||||
archiveStream.file.file = nowide::fopen(path, "rb");
|
||||
if (archiveStream.file.file == nullptr)
|
||||
return false;
|
||||
#endif
|
||||
FileInStream_CreateVTable(&archiveStream);
|
||||
LookToRead2_CreateVTable(&lookStream, 0);
|
||||
lookStream.buf = (Byte *)ISzAlloc_Alloc(&g_Alloc, kInputBufSize);
|
||||
if (lookStream.buf == NULL)
|
||||
{
|
||||
File_Close(&archiveStream.file);
|
||||
return false;
|
||||
}
|
||||
lookStream.bufSize = kInputBufSize;
|
||||
lookStream.realStream = &archiveStream.vt;
|
||||
LookToRead2_Init(&lookStream);
|
||||
|
||||
if (!crc_tables_generated)
|
||||
{
|
||||
CrcGenerateTable();
|
||||
crc_tables_generated = true;
|
||||
}
|
||||
SRes res = SzArEx_Open(&szarchive, &lookStream.vt, &g_Alloc, &g_Alloc);
|
||||
|
||||
return (res == SZ_OK);
|
||||
}
|
||||
|
||||
ArchiveFile* SzArchive::OpenFile(const char* name)
|
||||
{
|
||||
u16 fname[512];
|
||||
for (UInt32 i = 0; i < szarchive.NumFiles; i++)
|
||||
{
|
||||
if (SzArEx_IsDir(&szarchive, i))
|
||||
continue;
|
||||
|
||||
size_t len = SzArEx_GetFileNameUtf16(&szarchive, i, fname);
|
||||
char szname[512];
|
||||
size_t j = 0;
|
||||
for (; j < len && j < sizeof(szname) - 1; j++)
|
||||
szname[j] = fname[j];
|
||||
szname[j] = 0;
|
||||
if (strcmp(name, szname))
|
||||
continue;
|
||||
|
||||
size_t offset = 0;
|
||||
size_t out_size_processed = 0;
|
||||
SRes res = SzArEx_Extract(&szarchive, &lookStream.vt, i, &block_idx, &out_buffer, &out_buffer_size, &offset, &out_size_processed, &g_Alloc, &g_Alloc);
|
||||
if (res != SZ_OK)
|
||||
return NULL;
|
||||
|
||||
return new SzArchiveFile(out_buffer, offset, (u32)out_size_processed);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ArchiveFile* SzArchive::OpenFileByCrc(u32 crc)
|
||||
{
|
||||
if (crc == 0)
|
||||
return NULL;
|
||||
for (UInt32 i = 0; i < szarchive.NumFiles; i++)
|
||||
{
|
||||
unsigned isDir = SzArEx_IsDir(&szarchive, i);
|
||||
if (isDir)
|
||||
continue;
|
||||
|
||||
if (crc != szarchive.CRCs.Vals[i])
|
||||
continue;
|
||||
|
||||
size_t offset = 0;
|
||||
size_t out_size_processed = 0;
|
||||
SRes res = SzArEx_Extract(&szarchive, &lookStream.vt, i, &block_idx, &out_buffer, &out_buffer_size, &offset, &out_size_processed, &g_Alloc, &g_Alloc);
|
||||
if (res != SZ_OK)
|
||||
return NULL;
|
||||
|
||||
return new SzArchiveFile(out_buffer, offset, (u32)out_size_processed);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SzArchive::~SzArchive()
|
||||
{
|
||||
if (lookStream.buf != NULL)
|
||||
{
|
||||
File_Close(&archiveStream.file);
|
||||
ISzAlloc_Free(&g_Alloc, lookStream.buf);
|
||||
if (out_buffer != NULL)
|
||||
ISzAlloc_Free(&g_Alloc, out_buffer);
|
||||
SzArEx_Free(&szarchive, &g_Alloc);
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 23, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "archive.h"
|
||||
#include "deps/lzma/7z.h"
|
||||
#include "deps/lzma/7zFile.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
class SzArchive : public Archive
|
||||
{
|
||||
public:
|
||||
SzArchive() : out_buffer(NULL) {
|
||||
memset(&archiveStream, 0, sizeof(archiveStream));
|
||||
memset(&lookStream, 0, sizeof(lookStream));
|
||||
}
|
||||
~SzArchive() override;
|
||||
|
||||
ArchiveFile* OpenFile(const char* name) override;
|
||||
ArchiveFile *OpenFileByCrc(u32 crc) override;
|
||||
|
||||
private:
|
||||
bool Open(const char* path) override;
|
||||
|
||||
CSzArEx szarchive;
|
||||
UInt32 block_idx; /* it can have any value before first call (if outBuffer = 0) */
|
||||
Byte *out_buffer; /* it must be 0 before first call for each new archive. */
|
||||
size_t out_buffer_size; /* it can have any value before first call (if outBuffer = 0) */
|
||||
CFileInStream archiveStream;
|
||||
CLookToRead2 lookStream;
|
||||
|
||||
};
|
||||
|
||||
class SzArchiveFile : public ArchiveFile
|
||||
{
|
||||
public:
|
||||
SzArchiveFile(u8 *data, u32 offset, u32 length) : data(data), offset(offset), length(length) {}
|
||||
u32 Read(void *buffer, u32 length) override
|
||||
{
|
||||
length = std::min(length, this->length);
|
||||
memcpy(buffer, data + offset, length);
|
||||
return length;
|
||||
}
|
||||
|
||||
private:
|
||||
u8 *data;
|
||||
u32 offset;
|
||||
u32 length;
|
||||
};
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 23, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "ZipArchive.h"
|
||||
|
||||
ZipArchive::~ZipArchive()
|
||||
{
|
||||
zip_close(zip);
|
||||
}
|
||||
|
||||
bool ZipArchive::Open(const char* path)
|
||||
{
|
||||
FILE *file = nowide::fopen(path, "rb");
|
||||
if (file == nullptr)
|
||||
return false;
|
||||
zip_error_t error;
|
||||
zip_source_t *source = zip_source_filep_create(file, 0, -1, &error);
|
||||
if (source == nullptr)
|
||||
{
|
||||
std::fclose(file);
|
||||
return false;
|
||||
}
|
||||
zip = zip_open_from_source(source, 0, NULL);
|
||||
if (zip == nullptr)
|
||||
zip_source_free(source);
|
||||
return zip != nullptr;
|
||||
}
|
||||
|
||||
ArchiveFile* ZipArchive::OpenFile(const char* name)
|
||||
{
|
||||
zip_file *zip_file = zip_fopen(zip, name, 0);
|
||||
if (zip_file == NULL)
|
||||
return NULL;
|
||||
|
||||
return new ZipArchiveFile(zip_file);
|
||||
}
|
||||
|
||||
struct zip_file *zip_fopen_by_crc(struct zip *za, u32 crc, int flags)
|
||||
{
|
||||
int i, n;
|
||||
struct zip_stat stat;
|
||||
|
||||
if (crc == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
n = zip_get_num_files(za);
|
||||
for (i = 0; i < n; i++) {
|
||||
if (zip_stat_index(za, i, flags, &stat) < -1) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (stat.crc == crc) {
|
||||
return zip_fopen_index(za, i, flags);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ArchiveFile* ZipArchive::OpenFileByCrc(u32 crc)
|
||||
{
|
||||
zip_file *zip_file = zip_fopen_by_crc(zip, crc, 0);
|
||||
if (zip_file == NULL)
|
||||
return NULL;
|
||||
|
||||
return new ZipArchiveFile(zip_file);
|
||||
}
|
||||
|
||||
u32 ZipArchiveFile::Read(void* buffer, u32 length)
|
||||
{
|
||||
return zip_fread(zip_file, buffer, length);
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 23, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "archive.h"
|
||||
#include <zip.h>
|
||||
|
||||
class ZipArchive : public Archive
|
||||
{
|
||||
public:
|
||||
ZipArchive() : zip(NULL) {}
|
||||
~ZipArchive() override;
|
||||
|
||||
ArchiveFile* OpenFile(const char* name) override;
|
||||
ArchiveFile* OpenFileByCrc(u32 crc) override;
|
||||
|
||||
private:
|
||||
bool Open(const char* path) override;
|
||||
|
||||
struct zip *zip;
|
||||
};
|
||||
|
||||
class ZipArchiveFile : public ArchiveFile
|
||||
{
|
||||
public:
|
||||
ZipArchiveFile(struct zip_file *zip_file) : zip_file(zip_file) {}
|
||||
~ZipArchiveFile() override { zip_fclose(zip_file); }
|
||||
u32 Read(void* buffer, u32 length) override;
|
||||
|
||||
private:
|
||||
struct zip_file *zip_file;
|
||||
};
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 23, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "archive.h"
|
||||
#include "7zArchive.h"
|
||||
#include "ZipArchive.h"
|
||||
|
||||
Archive *OpenArchive(const char *path)
|
||||
{
|
||||
std::string base_path(path);
|
||||
|
||||
Archive *sz_archive = new SzArchive();
|
||||
if (sz_archive->Open(base_path.c_str()) || sz_archive->Open((base_path + ".7z").c_str()) || sz_archive->Open((base_path + ".7Z").c_str()))
|
||||
return sz_archive;
|
||||
delete sz_archive;
|
||||
|
||||
Archive *zip_archive = new ZipArchive();
|
||||
if (zip_archive->Open(base_path.c_str()) || zip_archive->Open((base_path + ".zip").c_str()) || zip_archive->Open((base_path + ".ZIP").c_str()))
|
||||
return zip_archive;
|
||||
delete zip_archive;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
Created on: Nov 23, 2018
|
||||
|
||||
Copyright 2018 flyinghead
|
||||
|
||||
This file is part of reicast.
|
||||
|
||||
reicast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
reicast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with reicast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
class ArchiveFile
|
||||
{
|
||||
public:
|
||||
virtual ~ArchiveFile() = default;
|
||||
virtual u32 Read(void *buffer, u32 length) = 0;
|
||||
};
|
||||
|
||||
class Archive
|
||||
{
|
||||
public:
|
||||
virtual ~Archive() = default;
|
||||
virtual ArchiveFile *OpenFile(const char *name) = 0;
|
||||
virtual ArchiveFile *OpenFileByCrc(u32 crc) = 0;
|
||||
|
||||
friend Archive *OpenArchive(const char *path);
|
||||
|
||||
private:
|
||||
virtual bool Open(const char *name) = 0;
|
||||
};
|
||||
|
||||
Archive *OpenArchive(const char *path);
|
||||
@@ -1,151 +0,0 @@
|
||||
/*
|
||||
Copyright 2020 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "rzip.h"
|
||||
#include <zlib.h>
|
||||
|
||||
const u8 RZipHeader[8] = { '#', 'R', 'Z', 'I', 'P', 'v', 1, '#' };
|
||||
|
||||
bool RZipFile::Open(const std::string& path, bool write)
|
||||
{
|
||||
verify(file == nullptr);
|
||||
|
||||
file = nowide::fopen(path.c_str(), write ? "wb" : "rb");
|
||||
if (file == nullptr)
|
||||
return false;
|
||||
if (!write)
|
||||
{
|
||||
u8 header[sizeof(RZipHeader)];
|
||||
if (std::fread(header, sizeof(header), 1, file) != 1
|
||||
|| memcmp(header, RZipHeader, sizeof(header))
|
||||
|| std::fread(&maxChunkSize, sizeof(maxChunkSize), 1, file) != 1
|
||||
|| std::fread(&size, sizeof(size), 1, file) != 1)
|
||||
{
|
||||
Close();
|
||||
return false;
|
||||
}
|
||||
// savestates created on 32-bit platforms used to have a 32-bit size
|
||||
if (size >> 32 != 0)
|
||||
{
|
||||
size &= 0xffffffff;
|
||||
std::fseek(file, -4, SEEK_CUR);
|
||||
}
|
||||
chunk = new u8[maxChunkSize];
|
||||
chunkIndex = 0;
|
||||
chunkSize = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void RZipFile::Close()
|
||||
{
|
||||
if (file != nullptr)
|
||||
{
|
||||
std::fclose(file);
|
||||
file = nullptr;
|
||||
if (chunk != nullptr)
|
||||
{
|
||||
delete [] chunk;
|
||||
chunk = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
size_t RZipFile::Read(void *data, size_t length)
|
||||
{
|
||||
verify(file != nullptr);
|
||||
|
||||
u8 *p = (u8 *)data;
|
||||
size_t rv = 0;
|
||||
while (rv < length)
|
||||
{
|
||||
if (chunkIndex == chunkSize)
|
||||
{
|
||||
chunkSize = 0;
|
||||
chunkIndex = 0;
|
||||
u32 zippedSize;
|
||||
if (std::fread(&zippedSize, sizeof(zippedSize), 1, file) != 1)
|
||||
break;
|
||||
if (zippedSize == 0)
|
||||
continue;
|
||||
u8 *zipped = new u8[zippedSize];
|
||||
if (std::fread(zipped, zippedSize, 1, file) != 1)
|
||||
{
|
||||
delete [] zipped;
|
||||
break;
|
||||
}
|
||||
uLongf tl = maxChunkSize;
|
||||
if (uncompress(chunk, &tl, zipped, zippedSize) != Z_OK)
|
||||
{
|
||||
delete [] zipped;
|
||||
break;
|
||||
}
|
||||
delete [] zipped;
|
||||
chunkSize = (u32)tl;
|
||||
}
|
||||
u32 l = std::min(chunkSize - chunkIndex, (u32)length);
|
||||
memcpy(p, chunk + chunkIndex, l);
|
||||
p += l;
|
||||
chunkIndex += l;
|
||||
rv += l;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
size_t RZipFile::Write(const void *data, size_t length)
|
||||
{
|
||||
verify(file != nullptr);
|
||||
verify(std::ftell(file) == 0);
|
||||
|
||||
maxChunkSize = 1024 * 1024;
|
||||
size = length;
|
||||
if (std::fwrite(RZipHeader, sizeof(RZipHeader), 1, file) != 1
|
||||
|| std::fwrite(&maxChunkSize, sizeof(maxChunkSize), 1, file) != 1
|
||||
|| std::fwrite(&size, sizeof(size), 1, file) != 1)
|
||||
return 0;
|
||||
const u8 *p = (const u8 *)data;
|
||||
// compression output buffer must be 0.1% larger + 12 bytes
|
||||
uLongf maxZippedSize = maxChunkSize + maxChunkSize / 1000 + 12;
|
||||
u8 *zipped = new u8[maxZippedSize];
|
||||
size_t rv = 0;
|
||||
while (rv < length)
|
||||
{
|
||||
uLongf zippedSize = maxZippedSize;
|
||||
uLongf uncompressedSize = std::min(maxChunkSize, (u32)(length - rv));
|
||||
u32 rc = compress(zipped, &zippedSize, p, uncompressedSize);
|
||||
if (rc != Z_OK)
|
||||
{
|
||||
WARN_LOG(SAVESTATE, "Compression error: %d", rc);
|
||||
break;
|
||||
}
|
||||
u32 sz = (u32)zippedSize;
|
||||
if (std::fwrite(&sz, sizeof(sz), 1, file) != 1
|
||||
|| std::fwrite(zipped, zippedSize, 1, file) != 1)
|
||||
{
|
||||
rv = 0;
|
||||
break;
|
||||
}
|
||||
p += uncompressedSize;
|
||||
rv += uncompressedSize;
|
||||
}
|
||||
delete [] zipped;
|
||||
|
||||
return rv;
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
Copyright 2020 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
// Implementation of the RZIP stream format as defined by libretro
|
||||
// https://github.com/libretro/libretro-common/blob/master/include/streams/rzip_stream.h
|
||||
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
|
||||
class RZipFile
|
||||
{
|
||||
public:
|
||||
~RZipFile() { Close(); }
|
||||
|
||||
bool Open(const std::string& path, bool write);
|
||||
void Close();
|
||||
size_t Size() const { return size; }
|
||||
size_t Read(void *data, size_t length);
|
||||
size_t Write(const void *data, size_t length);
|
||||
|
||||
private:
|
||||
FILE *file = nullptr;
|
||||
u64 size = 0;
|
||||
u32 maxChunkSize = 0;
|
||||
u8 *chunk = nullptr;
|
||||
u32 chunkSize = 0;
|
||||
u32 chunkIndex = 0;
|
||||
};
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* E_Branches.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
EAPI B(u32 sImm24, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0A000000);
|
||||
|
||||
SET_CC;
|
||||
I |= ((sImm24>>2)&0xFFFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI BL(u32 sImm24, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0B000000);
|
||||
|
||||
SET_CC;
|
||||
I |= ((sImm24>>2)&0xFFFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
// Note: Either X variant will switch to THUMB* if bit0 of addr is 1
|
||||
//
|
||||
|
||||
EAPI BX(eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x012FFF10);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI BLX(eReg Rm, ConditionCode CC=AL) // Form II
|
||||
{
|
||||
DECL_Id(0x012FFF30);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI BXJ(eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x012FFF20);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// This encoding looks correct, but segfaults, the pc val is align(pc,4) but this should be right in ARM
|
||||
//
|
||||
#if defined(_DEVEL)
|
||||
EAPI BLX(u32 sImm24) // Form I * H is derived so not needed, fixup sImm24 so one can just pass a real addr
|
||||
{
|
||||
DECL_Id(0xFA000000);
|
||||
|
||||
//if(sImm24&1)
|
||||
// I |= 1<<24; // SET_H
|
||||
|
||||
I |= ((sImm24>>2)&0xFFFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
Executable
+844
@@ -0,0 +1,844 @@
|
||||
/*
|
||||
* <E_DataOp.h Title="ARMv7 ISA Emitter Middle-ware: Data-Processing Instructions" />
|
||||
*
|
||||
* <?CTYPE
|
||||
*
|
||||
* <opcode1>{<cond>}{S} <Rd>, <shifter_operand>
|
||||
* <opcode1> := MOV | MVN
|
||||
*
|
||||
* <opcode2>{<cond>} <Rn>, <shifter_operand>
|
||||
* <opcode2> := CMP | CMN | TST | TEQ
|
||||
*
|
||||
* <opcode3>{<cond>}{S} <Rd>, <Rn>, <shifter_operand>
|
||||
* <opcode3> := ADD | SUB | RSB | ADC | SBC | RSC | AND | BIC | EOR | ORR
|
||||
*
|
||||
* ?/>
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* imm Rd,[Rn,] imm
|
||||
* reg Rd,Rn,Rm shift
|
||||
* rsr Rd,Rn,Rm type Rs
|
||||
*
|
||||
* sp.imm Rd {SP} imm
|
||||
* sp.reg Rd {SP} Rm shift
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
#if 0
|
||||
#define dpInstr(iName, iId) \
|
||||
EAPI iName (eReg Rd, eReg Rn, u32 Imm) ; \
|
||||
EAPI iName (eReg Rd, eReg Rn, eReg Rm, eShiftOp type=S_LSL, u32 Imm=0) ; \
|
||||
EAPI iName (eReg Rd, eReg Rn, eReg Rm, eShiftOp type, eReg Rs) ;
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
||||
ADC IMM 0x02A00000
|
||||
ADC REG 0x00A00000
|
||||
ADC RSR 0x00A00010
|
||||
|
||||
ADD IMM 0x02800000
|
||||
ADD REG 0x00800000
|
||||
ADD RSR 0x00800010
|
||||
ADD.SP.IMM 0x028D0000
|
||||
ADD.SP.REG 0x008D0000
|
||||
|
||||
AND IMM 0x02000000
|
||||
AND REG 0x00000000
|
||||
AND RSR 0x00000010
|
||||
|
||||
|
||||
// ASR's do not fit this pattern moved elsewhere //
|
||||
|
||||
|
||||
|
||||
BIC IMM 0x03C00000
|
||||
BIC REG 0x01C00000
|
||||
BIC RSR 0x01C00010
|
||||
|
||||
CMN IMM 0x03700000 // N imm
|
||||
CMN REG 0x01700000 // NMshift
|
||||
CMN RSR 0x01700010 // NMtypeS
|
||||
|
||||
CMP IMM 0x03500000 // N imm
|
||||
CMP REG 0x01500000
|
||||
CMP RSR 0x01500010
|
||||
|
||||
|
||||
EOR IMM 0x02200000
|
||||
EOR REG 0x00200000
|
||||
EOR REG 0x00200010
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#define DP_PARAMS (eReg Rd, eReg Rn, ShiftOp Shift, ConditionCode CC=AL)
|
||||
#define DP_RPARAMS (eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
|
||||
#define DP_COMMON \
|
||||
DECL_I; \
|
||||
\
|
||||
SET_CC; \
|
||||
I |= (Rn&15)<<16; \
|
||||
I |= (Rd&15)<<12; \
|
||||
I |= (Shift&0xFFF)
|
||||
|
||||
#define DP_RCOMMON \
|
||||
DECL_I; \
|
||||
\
|
||||
SET_CC; \
|
||||
I |= (Rn&15)<<16; \
|
||||
I |= (Rd&15)<<12; \
|
||||
I |= (Rm&15)
|
||||
|
||||
#define DP_OPCODE(opcode) \
|
||||
I |= (opcode)<<21
|
||||
|
||||
|
||||
|
||||
EAPI AND DP_PARAMS { DP_COMMON; DP_OPCODE(DP_AND); EMIT_I; }
|
||||
EAPI EOR DP_PARAMS { DP_COMMON; DP_OPCODE(DP_EOR); EMIT_I; }
|
||||
EAPI SUB DP_PARAMS { DP_COMMON; DP_OPCODE(DP_SUB); EMIT_I; }
|
||||
EAPI RSB DP_PARAMS { DP_COMMON; DP_OPCODE(DP_RSB); EMIT_I; }
|
||||
EAPI ADD DP_PARAMS { DP_COMMON; DP_OPCODE(DP_ADD); EMIT_I; }
|
||||
EAPI ADC DP_PARAMS { DP_COMMON; DP_OPCODE(DP_ADC); EMIT_I; }
|
||||
EAPI SBC DP_PARAMS { DP_COMMON; DP_OPCODE(DP_SBC); EMIT_I; }
|
||||
EAPI RSC DP_PARAMS { DP_COMMON; DP_OPCODE(DP_RSC); EMIT_I; }
|
||||
EAPI TST DP_PARAMS { DP_COMMON; DP_OPCODE(DP_TST); EMIT_I; }
|
||||
EAPI TEQ DP_PARAMS { DP_COMMON; DP_OPCODE(DP_TEQ); EMIT_I; }
|
||||
// EAPI CMP DP_PARAMS { DP_COMMON; DP_OPCODE(DP_CMP); EMIT_I; }
|
||||
EAPI CMN DP_PARAMS { DP_COMMON; DP_OPCODE(DP_CMN); EMIT_I; }
|
||||
EAPI ORR DP_PARAMS { DP_COMMON; DP_OPCODE(DP_ORR); EMIT_I; }
|
||||
EAPI MOV DP_PARAMS { DP_COMMON; DP_OPCODE(DP_MOV); EMIT_I; }
|
||||
EAPI BIC DP_PARAMS { DP_COMMON; DP_OPCODE(DP_BIC); EMIT_I; }
|
||||
EAPI MVN DP_PARAMS { DP_COMMON; DP_OPCODE(DP_MVN); EMIT_I; }
|
||||
|
||||
#if defined(_DEVEL) && defined(_NODEF_) // These require testing -> CMP/MOV Shifter(Reg)? fmt broken? // Simple third reg type w/ no shifter
|
||||
EAPI AND DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_AND); EMIT_I; }
|
||||
EAPI EOR DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_EOR); EMIT_I; }
|
||||
EAPI SUB DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_SUB); EMIT_I; }
|
||||
EAPI RSB DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_RSB); EMIT_I; }
|
||||
EAPI ADD DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_ADD); EMIT_I; }
|
||||
EAPI ADC DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_ADC); EMIT_I; }
|
||||
EAPI SBC DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_SBC); EMIT_I; }
|
||||
EAPI RSC DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_RSC); EMIT_I; }
|
||||
EAPI TST DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_TST); EMIT_I; }
|
||||
EAPI TEQ DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_TEQ); EMIT_I; }
|
||||
EAPI CMP DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_CMP); EMIT_I; }
|
||||
EAPI CMN DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_CMN); EMIT_I; }
|
||||
EAPI ORR DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_ORR); EMIT_I; }
|
||||
EAPI MOV DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_MOV); EMIT_I; }
|
||||
EAPI BIC DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_BIC); EMIT_I; }
|
||||
EAPI MVN DP_PARAMS { DP_RCOMMON; DP_OPCODE(DP_MVN); EMIT_I; }
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
static u32 ARMImmid8r4_enc(u32 imm32)
|
||||
{
|
||||
for (int i=0;i<=30;i+=2)
|
||||
{
|
||||
u32 immv=(imm32<<i) | (imm32>>(32-i));
|
||||
if (immv<256)
|
||||
{
|
||||
return ((i/2)<<8) | immv;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static u32 ARMImmid8r4(u32 imm8r4)
|
||||
{
|
||||
u32 rv = ARMImmid8r4_enc(imm8r4);
|
||||
verify(rv!=-1);
|
||||
return rv;
|
||||
}
|
||||
|
||||
static bool is_i8r4(u32 i32) { return ARMImmid8r4_enc(i32) != -1; }
|
||||
|
||||
|
||||
|
||||
EAPI ADD(eReg Rd, eReg Rn, eReg Rm, u32 RmLSL, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00800000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
I |= (RmLSL&31)<<7;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADD(eReg Rd, eReg Rn, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
ADD(Rd,Rn,Rm,0,S,CC);
|
||||
}
|
||||
|
||||
EAPI ADD(eReg Rd, eReg Rn, eReg Rm, ShiftOp Shift, u32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00800000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Imm8&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADD(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
ADD(Rd,Rn,Rm,false,CC);
|
||||
}
|
||||
|
||||
|
||||
EAPI ADD(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02800000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADC(eReg Rd, eReg Rn, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00A00000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADC(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
ADC(Rd,Rn,Rm,false,CC);
|
||||
}
|
||||
|
||||
EAPI ADC(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADC(eReg Rd, eReg Rn, eReg Rm, bool S, ShiftOp Shift, u32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00A00000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Imm8&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EAPI ADR(eReg Rd, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x028F0000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ADR_Zero(eReg Rd, s32 Imm8, ConditionCode CC=AL) // Special case for subtraction of 0
|
||||
{
|
||||
DECL_Id(0x024F0000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI ORR(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01800000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ORR(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03800000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ORR(eReg Rd, eReg Rn, eReg Rm, ShiftOp Shift, eReg Rs, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01800000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= 1<<4;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ORR(eReg Rd, eReg Rn, eReg Rm, bool S, ShiftOp Shift, u32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01800000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Imm8&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI AND(eReg Rd, eReg Rn, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00000000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI AND(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00000000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI AND(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02000000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI AND(eReg Rd, eReg Rn, s32 Imm8, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02000000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI EOR(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00200000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI EOR(eReg Rd, eReg Rn, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00200000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI EOR(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02200000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
EAPI SUB(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00400000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SUB(eReg Rd, eReg Rn, s32 Imm8, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02400000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI SUB(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL) { SUB(Rd,Rn,Imm8,false,CC); }
|
||||
|
||||
EAPI SBC(eReg Rd, eReg Rn, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00C00000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SBC(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
SBC(Rd,Rn,Rm,false,CC);
|
||||
}
|
||||
|
||||
EAPI RSB(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x00600000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI RSB(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02600000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI RSB(eReg Rd, eReg Rn, s32 Imm8, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x02600000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI MVN(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01E00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI MVN(eReg Rd, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03E00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI TST(eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01100000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI TST(eReg Rn, u32 Imm12, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03100000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= ARMImmid8r4(Imm12);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI BIC(eReg Rd, eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03C00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
EAPI UBFX(eReg Rd, eReg Rm, u8 lsb, u8 width, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x07E00050);
|
||||
verify(lsb+width<=32);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= (lsb&31)<<7;
|
||||
I |= ((width-1)&31)<<16;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOV(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOV(eReg Rd, eReg Rm, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00000);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOV(eReg Rd, eReg Rm, ShiftOp Shift, u32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Imm8&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOV(eReg Rd, eReg Rm, ShiftOp Shift, eReg Rs, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= 1<<4;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOVW(eReg Rd, u32 Imm16, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03000000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Imm16&0xF000)<<4;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Imm16&0x0FFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOVT(eReg Rd, u32 Imm16, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03400000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Imm16&0xF000)<<4;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Imm16&0x0FFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MOV(eReg Rd, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= ARMImmid8r4(Imm8); // * 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EAPI CMP(eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01500000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI CMP(eReg Rn, s32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03500000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= ARMImmid8r4(Imm8); // *FIXME* 12b imm is 8b imm 4b rot. spec, add rot support!
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI CMP(eReg Rd, eReg Rm, ShiftOp Shift, eReg Rs, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01500000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= 1<<4;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI CMP(eReg Rd, eReg Rm, ShiftOp Shift, u32 Imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01500000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
I |= Shift<<5;
|
||||
I |= (Imm8&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI LSL(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00010);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<8;
|
||||
I |= (Rn&15)<<0;
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI LSL(eReg Rd, eReg Rm, s32 imm5, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00000);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<0;
|
||||
I |= (imm5&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI LSR(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00030);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<8;
|
||||
I |= (Rn&15)<<0;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI RRX(eReg Rd, eReg Rm,bool S=false, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00060);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<0;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI LSR(eReg Rd, eReg Rm, s32 imm5, bool S, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00020);
|
||||
|
||||
if (S)
|
||||
I |= 1<<20;
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<0;
|
||||
I |= (imm5&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI LSR(eReg Rd, eReg Rm, s32 imm5, ConditionCode CC=AL)
|
||||
{
|
||||
LSR(Rd,Rm,imm5,false,CC);
|
||||
}
|
||||
|
||||
|
||||
EAPI ASR(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00050);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<8;
|
||||
I |= (Rn&15)<<0;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ASR(eReg Rd, eReg Rm, s32 imm5, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00040);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<0;
|
||||
I |= (imm5&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ROR(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<8;
|
||||
I |= (Rn&15)<<0;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ROR(eReg Rd, eReg Rm, s32 imm5, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01A00060);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15)<<0;
|
||||
I |= (imm5&31)<<7;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#undef DP_PARAMS
|
||||
#undef DP_RPARAMS
|
||||
|
||||
#undef DP_COMMON
|
||||
#undef DP_RCOMMON
|
||||
|
||||
#undef DP_OPCODE
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* E_Extend.h
|
||||
*
|
||||
|
||||
There are six basic instructions:
|
||||
XTAB16 Extend bits[23:16] and bits[7:0] of one register to 16 bits, and add corresponding halfwordsto the values in another register.
|
||||
XTAB Extend bits[ 7: 0] of one register to 32 bits, and add to the value in another register.
|
||||
XTAH Extend bits[15: 0] of one register to 32 bits, and add to the value in another register.
|
||||
XTB16 Extend bits[23:16] and bits[7:0] to 16 bits each.
|
||||
XTB Extend bits[ 7: 0] to 32 bits.
|
||||
XTH Extend bits[15: 0] to 32 bits.
|
||||
|
||||
Each of the six instructions is available in the following variations, indicated by the prefixes shown:
|
||||
S Sign extension, with or without addition modulo 216 or 232.
|
||||
U Zero (unsigned) extension, with or without addition modulo 216 or 232.
|
||||
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
EAPI SXTAB16(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06800070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SXTAB(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06A00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SXTAH(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06B00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SXTB16(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x068F0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SXTB(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06AF0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SXTH(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06BF0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTAB16(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06C00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTAB(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06E00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTAH(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06F00070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTB16(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06CF0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTB(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06EF0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UXTH(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06FF0070);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
};
|
||||
@@ -0,0 +1,310 @@
|
||||
/*
|
||||
* E_LoadStore.h
|
||||
*
|
||||
* LDR|STR{<cond>}{B}{T} Rd, <addressing_mode>
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
enum AddrMode {
|
||||
|
||||
Offset, // [Rn, offset] - Base:Offset used for access, no writeback
|
||||
PostIndexed, // [Rn, offset] ! - Base:Offset used for access, written back to Base reg.
|
||||
PreIndexed // [Rn],offset - Base used then Base:Offset written back to Base reg.
|
||||
|
||||
// offset: imm{8,12}, Rm, Rm <Shifter> #Shift
|
||||
};
|
||||
|
||||
|
||||
#define SET_Rn I |= (Rn&15)<<16
|
||||
#define SET_Rt I |= (Rt&15)<<12
|
||||
#define SET_Rm I |= (Rm&15)
|
||||
|
||||
|
||||
#define SET_Rtn SET_Rt; SET_Rn
|
||||
#define SET_Rtnm SET_Rt; SET_Rn; SET_Rm
|
||||
|
||||
|
||||
|
||||
#define SET_I I |= (1<<25) // Sets Register (Rather than Immediate) Addressing
|
||||
#define SET_P I |= (1<<24) // If NOT Set: post-indexed, else offset||pre-indexed (W. determines which)
|
||||
#define SET_U I |= (1<<23) // If SET: Offset is added to base, else its subtracted (Sign of sImm12)
|
||||
#define SET_B I |= (1<<22) // If SET: Access is a byte access, else its a word access.
|
||||
#define SET_W I |= (1<<21) // (P==0) [ W==0: reg. post indexed, W==1: Unprivileged T variant ] (P==1) [ W==0: Offset , W==1: Pre-indexed ]
|
||||
#define SET_L I |= (1<<20) // (L==1) Load / Store
|
||||
|
||||
|
||||
#define SET_AddrMode \
|
||||
if(mode==Offset) { SET_P; } \
|
||||
else if(mode==PreIndexed) { SET_P; SET_W; }
|
||||
|
||||
/*
|
||||
#define SET_AddrMode \
|
||||
\
|
||||
switch(mode) { \
|
||||
case PostIndexed: break; \
|
||||
case Offset: SET_P; break; \
|
||||
case PreIndexed: SET_P; SET_W; break; \
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
#define SET_sImm12 \
|
||||
\
|
||||
if (0 != sImm12) { \
|
||||
if (sImm12 > 0) { SET_U; } \
|
||||
I |= (abs(sImm12) &0xFFF); \
|
||||
}
|
||||
|
||||
#define SET_sImm8 \
|
||||
\
|
||||
if(0 != sImm8) { \
|
||||
verify(is_s8(sImm8)); \
|
||||
if(sImm8 > 0) { SET_U; } \
|
||||
sImm8 = abs(sImm8); \
|
||||
I |= ((u32)sImm8 &0x0F); \
|
||||
I |= ((u32)sImm8 &0xF0)<<4; \
|
||||
}
|
||||
|
||||
|
||||
#define SET_Imm5 I |= ((Imm5&0x1F)<<7)
|
||||
#define SET_type I |= ((type&3)<<5)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* - Load/Store Encoding
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
cond 01-IPUBWL Rn Rt addr_mode -- Load/Store Word || Unsigned Byte
|
||||
|
||||
I,P,U,W - Specify type of addressing mode
|
||||
L - Specify Load (L==1), else Store
|
||||
B - Specify Byte (B==1), else Word
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
cond 000-PUIWL Rn Rt addr_mode 1SH1 addr_mode -- Load/Store Halfword || Signed byte
|
||||
|
||||
I,P,U,W - Specify type of addressing mode
|
||||
L - Specify Load (L==1), else Store
|
||||
S - Specify signed (S==1), else unsigned access
|
||||
H - Specify Halfword access, else signed byte
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
cond 010-PUBWL Rn Rt sImm12-iiii-iiii Imm Offset
|
||||
cond 011-PUBWL Rn Rt #sft sft_op 0 Rm Reg Offset
|
||||
|
||||
cond 000 PU1WL Rn Rt imHI 1011 imLO Imm Offset - halfword
|
||||
cond 000 PU0WL Rn Rt SBZ 1011 Rm Reg Offset - halfword
|
||||
cond 000 PU1W1 Rn Rt imHI 11H1 imLO Imm Offset - signed halfword/byte
|
||||
cond 000 PU0W1 Rn Rt SBZ 11H1 Rm Reg Offset - signed halfword/byte
|
||||
cond 000 PU1W0 Rn Rt imHI 11S1 imLO Imm Offset - two words
|
||||
cond 000 PU0W0 Rn Rt SBZ 11S1 Rm Reg Offset - two words
|
||||
|
||||
cond 100-PUSWL Rn Register-list Multiple
|
||||
cond 110-PUNWL Rn CRd cp_num offs8 COP & double reg xfer
|
||||
|
||||
cond 0001 0B00 Rn Rt SBZ 1001 Rm Swap [byte]
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
LDR L 010 1U001 11 Rt imm12 - *no literal stores*
|
||||
LDR I 010 PU0W1 Rn Rt imm12 - STR I 010 PU0W0 Rn Rt imm12
|
||||
LDR R 011 PU0W1 Rn Rt imm5 type 0 Rm - STR R 011 PU0W0 Rn Rt imm5 type 0 Rm
|
||||
|
||||
LDRT I 010 0U011 Rn Rt imm12 - STRT I 010 0U010 Rn Rt imm12
|
||||
LDRT R 011 0U011 Rn Rt imm5 type 0 Rm - STRT R 011 0U010 Rn Rt imm5 type 0 Rm
|
||||
|
||||
LDRB L 010 1U101 11 Rt imm12 - *^^
|
||||
LDRB I 010 PU1W1 Rn Rt imm12 - STRB I 010 PU1W0 Rn Rt imm12
|
||||
LDRB R 011 PU1W1 Rn Rt imm5 type 0 Rm - STRB R 011 PU1W0 Rn Rt imm5 type 0 Rm
|
||||
|
||||
LDRBT I
|
||||
LDRBT R
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
LDRH L 000 1U101 11 Rt imm4H 1011 imm4L - *^^
|
||||
LDRH I 000 PU1W1 Rn Rt imm4H 1011 imm4L - STRH I 000 PU1W0 Rn Rt imm4H 1011 imm4L
|
||||
LDRH R 000 PU0W1 Rn Rt 0000 1011 Rm - STRH R 000 PU0W0 Rn Rt 0000 1011 Rm
|
||||
|
||||
LDRD L 000 1U100 11 Rt imm4H 1101 imm4L - *^^
|
||||
LDRD I 000 PU1W0 Rn Rt imm4H 1101 imm4L - STRD I 000 PU1W0 Rn Rt imm4H 1111 imm4L
|
||||
LDRD R 000 PU0W0 Rn Rt 0000 1101 Rm - STRD R 000 PU0W0 Rn Rt 0000 1111 Rm
|
||||
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
LDRHT/STRHT
|
||||
|
||||
LDREX/STREX
|
||||
LDREXB/STREXB
|
||||
LDREXH/STREXH
|
||||
LDREXD/STREXD
|
||||
--------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
EAPI LDR 0x04100000 // These were all the A1 Versions for Imm IIRC
|
||||
EAPI LDRB 0x04500000
|
||||
EAPI LDRBT 0x06700000
|
||||
EAPI LDRD 0x00000000
|
||||
EAPI LDREX 0x01900090
|
||||
EAPI LDRH 0x00100090
|
||||
EAPI LDRSB 0x00100000
|
||||
EAPI LDRSH 0x00100000
|
||||
EAPI LDRT 0x04300000
|
||||
|
||||
EAPI STR 0x04000000
|
||||
EAPI STRB 0x04400000
|
||||
EAPI STRBT 0x06600000
|
||||
EAPI STRD 0x00000000
|
||||
EAPI STREX 0x01800090
|
||||
EAPI STRH 0x00000090
|
||||
EAPI STRT 0x04200000
|
||||
|
||||
*/
|
||||
|
||||
|
||||
extern u8* emit_opt;
|
||||
extern eReg reg_addr;
|
||||
extern eReg reg_dst;
|
||||
extern s32 imma;
|
||||
|
||||
EAPI LDR (eReg Rt, eReg Rn, s32 sImm12=0, AddrMode mode=Offset, ConditionCode CC=AL)
|
||||
{
|
||||
if (emit_opt+4==(u8*)EMIT_GET_PTR() && reg_addr==Rn && imma==sImm12)
|
||||
{
|
||||
if (reg_dst!=Rt)
|
||||
MOV(Rt,reg_dst);
|
||||
}
|
||||
else
|
||||
{
|
||||
DECL_Id(0x04100000); SET_CC; SET_Rtn; SET_AddrMode; SET_sImm12; EMIT_I;
|
||||
}
|
||||
}
|
||||
EAPI STR (eReg Rt, eReg Rn, s32 sImm12=0, AddrMode mode=Offset, ConditionCode CC=AL)
|
||||
{
|
||||
emit_opt=0;//(u8*)EMIT_GET_PTR();
|
||||
reg_addr=Rn;
|
||||
reg_dst=Rt;
|
||||
imma=sImm12;
|
||||
DECL_Id(0x04000000); SET_CC; SET_Rtn; SET_AddrMode; SET_sImm12; EMIT_I;
|
||||
}
|
||||
EAPI LDRB(eReg Rt, eReg Rn, s32 sImm12=0, AddrMode mode=Offset, ConditionCode CC=AL) { DECL_Id(0x04500000); SET_CC; SET_Rtn; SET_AddrMode; SET_sImm12; SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
EAPI STRB(eReg Rt, eReg Rn, s32 sImm12=0, AddrMode mode=Offset, ConditionCode CC=AL) { DECL_Id(0x04400000); SET_CC; SET_Rtn; SET_AddrMode; SET_sImm12; SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
|
||||
EAPI LDRT (eReg Rt, eReg Rn, s32 sImm12=0, ConditionCode CC=AL) { DECL_Id(0x04300000); SET_CC; SET_Rtn; SET_sImm12; EMIT_I; }
|
||||
EAPI STRT (eReg Rt, eReg Rn, s32 sImm12=0, ConditionCode CC=AL) { DECL_Id(0x04200000); SET_CC; SET_Rtn; SET_sImm12; EMIT_I; }
|
||||
EAPI LDRBT(eReg Rt, eReg Rn, s32 sImm12=0, ConditionCode CC=AL) { DECL_Id(0x04700000); SET_CC; SET_Rtn; SET_sImm12; SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
EAPI STRBT(eReg Rt, eReg Rn, s32 sImm12=0, ConditionCode CC=AL) { DECL_Id(0x04600000); SET_CC; SET_Rtn; SET_sImm12; SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
|
||||
// LDR(r1,r2,r3, Offset, true, L_LSL, 5, EQ); ... LDR r1, r2, +r3 LSL #5
|
||||
EAPI LDR (eReg Rt, eReg Rn, eReg Rm, AddrMode mode=Offset, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06100000); SET_CC; SET_Rtnm; SET_AddrMode; SET_Imm5; SET_type; if(Add){ SET_U; } EMIT_I; }
|
||||
EAPI STR (eReg Rt, eReg Rn, eReg Rm, AddrMode mode=Offset, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06000000); SET_CC; SET_Rtnm; SET_AddrMode; SET_Imm5; SET_type; if(Add){ SET_U; } EMIT_I; }
|
||||
EAPI LDRB(eReg Rt, eReg Rn, eReg Rm, AddrMode mode=Offset, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06500000); SET_CC; SET_Rtnm; SET_AddrMode; SET_Imm5; SET_type; if(Add){ SET_U; } SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
EAPI STRB(eReg Rt, eReg Rn, eReg Rm, AddrMode mode=Offset, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06400000); SET_CC; SET_Rtnm; SET_AddrMode; SET_Imm5; SET_type; if(Add){ SET_U; } SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
|
||||
EAPI LDRT (eReg Rt, eReg Rn, eReg Rm, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06300000); SET_CC; SET_Rtnm; SET_Imm5; SET_type; if(Add){ SET_U; } EMIT_I; }
|
||||
EAPI STRT (eReg Rt, eReg Rn, eReg Rm, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06200000); SET_CC; SET_Rtnm; SET_Imm5; SET_type; if(Add){ SET_U; } EMIT_I; }
|
||||
EAPI LDRBT(eReg Rt, eReg Rn, eReg Rm, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06700000); SET_CC; SET_Rtnm; SET_Imm5; SET_type; if(Add){ SET_U; } SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
EAPI STRBT(eReg Rt, eReg Rn, eReg Rm, bool Add=false, ShiftOp type=S_LSL, u32 Imm5=0, ConditionCode CC=AL) { DECL_Id(0x06600000); SET_CC; SET_Rtnm; SET_Imm5; SET_type; if(Add){ SET_U; } SET_B; EMIT_I; } // Prob don't need SET_B, in iID
|
||||
|
||||
|
||||
|
||||
// LDR Rt,[PC, #(s:+/-)Imm12] *Special Case - Literal / PC Relative
|
||||
EAPI LDR(eReg Rt, s32 sImm12, ConditionCode CC=AL) {
|
||||
DECL_Id(0x051F0000); SET_CC; SET_Rt; SET_sImm12; EMIT_I;
|
||||
}
|
||||
|
||||
// LDRB Rt,[PC, #(s:+/-)Imm12] *Special Case - Literal / PC Relative
|
||||
EAPI LDRB(eReg Rt, s32 sImm12, ConditionCode CC=AL) {
|
||||
DECL_Id(0x055F0000); SET_CC; SET_Rt; SET_sImm12; EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Note: Following support Post-Indexed addressing only //
|
||||
|
||||
|
||||
EAPI LDRH(eReg Rt, eReg Rn, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x005000B0); SET_CC; SET_Rtn; SET_P; SET_sImm8; EMIT_I; }
|
||||
EAPI STRH(eReg Rt, eReg Rn, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x004000B0); SET_CC; SET_Rtn; SET_P; SET_sImm8; EMIT_I; }
|
||||
EAPI LDRD(eReg Rt, eReg Rn, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x004000D0); SET_CC; SET_Rtn; SET_P; SET_sImm8; EMIT_I; }
|
||||
EAPI STRD(eReg Rt, eReg Rn, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x004000F0); SET_CC; SET_Rtn; SET_P; SET_sImm8; EMIT_I; }
|
||||
|
||||
EAPI LDRH(eReg Rt, eReg Rn, eReg Rm, bool Add=true,ConditionCode CC=AL) { DECL_Id(0x001000B0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
EAPI STRH(eReg Rt, eReg Rn, eReg Rm, bool Add=true,ConditionCode CC=AL) { DECL_Id(0x000000B0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
EAPI LDRD(eReg Rt, eReg Rn, eReg Rm, bool Add=true, ConditionCode CC=AL) { DECL_Id(0x000000D0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
EAPI STRD(eReg Rt, eReg Rn, eReg Rm, bool Add=true, ConditionCode CC=AL) { DECL_Id(0x000000F0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
|
||||
EAPI LDRSB(eReg Rt, eReg Rn, eReg Rm, bool Add=true,ConditionCode CC=AL) { DECL_Id(0x001000D0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
EAPI LDRSH(eReg Rt, eReg Rn, eReg Rm, bool Add=true,ConditionCode CC=AL) { DECL_Id(0x001000F0); SET_CC; SET_Rtnm; SET_P; if (Add) {SET_U;} EMIT_I; }
|
||||
|
||||
|
||||
EAPI LDRH(eReg Rt, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x015F00B0); SET_CC; SET_Rt; SET_sImm8; EMIT_I; } // *Special Case - Literal / PC Relative
|
||||
EAPI STRH(eReg Rt, s32 sImm8, ConditionCode CC=AL) { DECL_Id(0x014F00D0); SET_CC; SET_Rt; SET_sImm8; EMIT_I; } // *Special Case - Literal / PC Relative
|
||||
|
||||
|
||||
|
||||
// TODO: {LD,ST}R{SB,EX*} && friends (If required).
|
||||
|
||||
|
||||
// Must use _Reg format
|
||||
EAPI PUSH(u32 RegList, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x092D0000);
|
||||
|
||||
SET_CC;
|
||||
I |= (RegList&0xFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI POP(u32 RegList, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x08BD0000);
|
||||
|
||||
SET_CC;
|
||||
I |= (RegList&0xFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
#undef SET_Rtn
|
||||
#undef SET_Rtnm
|
||||
|
||||
#undef SET_Rn
|
||||
#undef SET_Rt
|
||||
#undef SET_Rm
|
||||
|
||||
#undef SET_I
|
||||
#undef SET_P
|
||||
#undef SET_U
|
||||
#undef SET_B
|
||||
#undef SET_W
|
||||
#undef SET_L
|
||||
|
||||
#undef SET_AddrMode
|
||||
|
||||
#undef SET_sImm12
|
||||
#undef SET_sImm8
|
||||
#undef SET_Imm5
|
||||
#undef SET_type
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
* E_Misc.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
/*
|
||||
* Misc. Arithmetic Instructions
|
||||
*/
|
||||
|
||||
// Count Leading Zero's
|
||||
//
|
||||
EAPI CLZ(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x016F0F10);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
// Unsigned sum of absolute differences
|
||||
//
|
||||
EAPI USAD8(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0780F010);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<16;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI USADA8(eReg Rd, eReg Rm, eReg Rs, eReg Rn, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x07800010);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<16;
|
||||
I |= (Rn&15)<<12;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Packing Instructions
|
||||
*/
|
||||
|
||||
|
||||
EAPI PKHBT(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL) // * shift_imm
|
||||
{
|
||||
DECL_Id(0x06800010);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI PKHTB(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL) // * shift_imm
|
||||
{
|
||||
DECL_Id(0x06800050);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Swapping Instructions
|
||||
*/
|
||||
|
||||
EAPI REV(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06BF0F30);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI REV16(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06BF0FB0);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI REVSH(eReg Rd, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06FF0F30);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI SEL(eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06800FB0);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rn&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Saturate Instructions
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// SSAT{<cond>} <Rd>, #<immed>, <Rm>{, <shift>}
|
||||
//
|
||||
EAPI SSAT(eReg Rd, u32 sat_imm, eReg Rm, u32 sft_imm, ConditionCode CC=AL) // sh&1 << 6
|
||||
{
|
||||
DECL_Id(0x06A00010);
|
||||
|
||||
SET_CC;
|
||||
I |= (sat_imm&31)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (sft_imm&31)<<7;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
// SSAT16{<cond>} <Rd>, #<immed>, <Rm>
|
||||
//
|
||||
EAPI SSAT16(eReg Rd, u32 sat_imm, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06A00030);
|
||||
|
||||
SET_CC;
|
||||
I |= (sat_imm&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= 15<<8; // * SBO
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
// USAT{<cond>} <Rd>, #<immed>, <Rm>{, <shift>}
|
||||
//
|
||||
EAPI USAT(eReg Rd, u32 sat_imm, eReg Rm, u32 sft_imm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06E00010);
|
||||
|
||||
SET_CC;
|
||||
I |= (sat_imm&31)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= (sft_imm&31)<<7;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
// USAT16{<cond>} <Rd>, #<immed>, <Rm>
|
||||
//
|
||||
EAPI USAT16(eReg Rd, u32 sat_imm, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x06E00030);
|
||||
|
||||
SET_CC;
|
||||
I |= (sat_imm&15)<<16;
|
||||
I |= (Rd&15)<<12;
|
||||
I |= 15<<8; // * SBO
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
Executable
+99
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* E_Multiply.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
EAPI MLA(eReg Rd, eReg Rn, eReg Rs, eReg Rm, ConditionCode CC=AL) // *FIXME* S
|
||||
{
|
||||
DECL_Id(0x00200090);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<16;
|
||||
I |= (Rn&15)<<12;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI MUL(eReg Rd, eReg Rs, eReg Rm, ConditionCode CC=AL) // *FIXME* S
|
||||
{
|
||||
DECL_Id(0x00000090);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rd&15)<<16;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI UMULL(eReg Rdhi, eReg Rdlo, eReg Rs, eReg Rm, ConditionCode CC=AL) // *FIXME* S
|
||||
{
|
||||
DECL_Id(0x00800090);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rdhi&15)<<16;
|
||||
I |= (Rdlo&15)<<12;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SMULL(eReg Rdhi, eReg Rdlo, eReg Rs, eReg Rm, ConditionCode CC=AL) // *FIXME* S
|
||||
{
|
||||
DECL_Id(0x00C00090);
|
||||
|
||||
SET_CC;
|
||||
I |= (Rdhi&15)<<16;
|
||||
I |= (Rdlo&15)<<12;
|
||||
I |= (Rs&15)<<8;
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
SMLA<x><y> Signed halfword Multiply Accumulate.
|
||||
SMLAD Signed halfword Multiply Accumulate, Dual.
|
||||
SMLAL Signed Multiply Accumulate Long.
|
||||
SMLAL<x><y> Signed halfword Multiply Accumulate Long.
|
||||
SMLALD Signed halfword Multiply Accumulate Long, Dual.
|
||||
SMLAW<y> Signed halfword by word Multiply Accumulate.
|
||||
SMLSD Signed halfword Multiply Subtract, Dual.
|
||||
SMLSLD Signed halfword Multiply Subtract Long Dual.
|
||||
SMMLA Signed Most significant word Multiply Accumulate.
|
||||
SMMLS Signed Most significant word Multiply Subtract.
|
||||
SMMUL Signed Most significant word Multiply.
|
||||
SMUAD Signed halfword Multiply, Add, Dual.
|
||||
SMUL<x><y> Signed halfword Multiply.
|
||||
SMULL Signed Multiply Long.
|
||||
SMULW<y> Signed halfword by word Multiply.
|
||||
SMUSD Signed halfword Multiply, Subtract, Dual.
|
||||
UMAAL Unsigned Multiply Accumulate significant Long.
|
||||
UMLAL Unsigned Multiply Accumulate Long.
|
||||
UMULL Unsigned Multiply Long.
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* E_Parallel.h
|
||||
*
|
||||
|
||||
ADD8 Adds each byte of the second operand register to the corresponding byte of the first operand
|
||||
register to form the corresponding byte of the result.
|
||||
|
||||
ADD16 Adds the top halfwords of two registers to form the top halfword of the result.
|
||||
Adds the bottom halfwords of the same two registers to form the bottom halfword of the result.
|
||||
|
||||
SUB8 Subtracts each byte of the second operand register from the corresponding byte of the first
|
||||
operand register to form the corresponding byte of the result.
|
||||
|
||||
SUB16 Subtracts the top halfword of the first operand register from the top halfword of the second operand register to form the top halfword of the result.
|
||||
Subtracts the bottom halfword of the second operand registers from the bottom halfword of
|
||||
the first operand register to form the bottom halfword of the result.
|
||||
|
||||
ADDSUBX Does the following:
|
||||
1. Exchanges halfwords of the second operand register.
|
||||
2. Adds top halfwords and subtracts bottom halfwords.
|
||||
|
||||
SUBADDX Does the following:
|
||||
1. Exchanges halfwords of the second operand register.
|
||||
2. Subtracts top halfwords and adds bottom halfwords.
|
||||
|
||||
|
||||
Each of the six instructions is available in the following variations, indicated by the prefixes shown:
|
||||
|
||||
S Signed arithmetic modulo 28 or 216. Sets the CPSR GE bits (see The GE[3:0] bits on page A2-13).
|
||||
Q Signed saturating arithmetic.
|
||||
SH Signed arithmetic, halving the results to avoid overflow.
|
||||
U Unsigned arithmetic modulo 28 or 216. Sets the CPSR GE bits (see The GE[3:0] bits on page A2-13).
|
||||
UQ Unsigned saturating arithmetic.
|
||||
UH Unsigned arithmetic, halving the results to avoid overflow.
|
||||
|
||||
|
||||
Status:
|
||||
These routines require implementation if needed.
|
||||
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
#if defined(_DEVEL) && 0
|
||||
|
||||
// S
|
||||
//
|
||||
EAPI SADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SSUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SSUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SSUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
|
||||
// Q
|
||||
//
|
||||
EAPI QADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI QADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI QSUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI QSUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI QADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI QSUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
|
||||
// SH
|
||||
//
|
||||
EAPI SHADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SHADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SHSUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SHSUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SHADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI SHSUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
|
||||
// U
|
||||
//
|
||||
EAPI UADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI USUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI USUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI USUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
|
||||
// UQ
|
||||
//
|
||||
EAPI UQADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UQADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UQSUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UQSUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UQADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UQSUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
|
||||
// UH
|
||||
//
|
||||
EAPI UHADD8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UHADD16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UHSUB8 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UHSUB16 (eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UHADDSUBX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
EAPI UHSUBADDX(eReg Rd, eReg Rm, eReg Rs, ConditionCode CC=AL) ;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* E_Special.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EAPI ARMERROR()
|
||||
{
|
||||
DECL_Id(0xFFFFFFFF);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI NOP()
|
||||
{
|
||||
DECL_Id(0xE320F000);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI SVC(u32 code)
|
||||
{
|
||||
DECL_Id(0x0F000000);
|
||||
I |= code&0xFFFFFF;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI BKPT()
|
||||
{
|
||||
DECL_Id(0x01200070);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
#define SWI SVC
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Synchronization & Barrier Instructions.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
EAPI DSB()
|
||||
{
|
||||
DECL_Id(0xF57FF04F);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI DMB()
|
||||
{
|
||||
DECL_Id(0xF57FF05F);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI ISB()
|
||||
{
|
||||
DECL_Id(0xF57FF06F);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* E_Status.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
#if defined(_DEVEL)
|
||||
|
||||
// MRS Move PSR to General-purpose Register.
|
||||
//
|
||||
EAPI MRS(eReg Rd, u32 R, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01000000);
|
||||
|
||||
SET_CC;
|
||||
I |= (R&1) << 22;
|
||||
I |= 15<<16; // * SBO
|
||||
I |= (Rd &15)<<12;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
/* MSR Move General-purpose Register to PSR.
|
||||
|
||||
MSR{<cond>} CPSR_<fields>, #<immediate>
|
||||
MSR{<cond>} CPSR_<fields>, <Rm>
|
||||
MSR{<cond>} SPSR_<fields>, #<immediate>
|
||||
MSR{<cond>} SPSR_<fields>, <Rm>
|
||||
*/
|
||||
|
||||
|
||||
// MSR: Immediate operand
|
||||
//
|
||||
EAPI MSR(u32 R, u32 fmask, u32 rot_imm, u32 imm8, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x03200000);
|
||||
|
||||
SET_CC;
|
||||
I |= (R&1) << 22;
|
||||
I |= (fmask &15)<<16;
|
||||
I |= 15<<12; // * SBO
|
||||
I |= (rot_imm &15)<<8;
|
||||
I |= (imm8 &255);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
// MSR: Register operand
|
||||
//
|
||||
EAPI MSR(u32 R, u32 fmask, eReg Rm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x01200000);
|
||||
|
||||
SET_CC;
|
||||
I |= (R&1) << 22;
|
||||
I |= (fmask &15)<<16;
|
||||
I |= 15<<12; // * SBO
|
||||
I |= (Rm&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// CPS Change Processor State.
|
||||
//
|
||||
EAPI CPS(u32 imod, u32 mmod, u32 mode) // ** [A|I|F]
|
||||
{
|
||||
DECL_Id(0xF1000000);
|
||||
|
||||
// Note: UNconditional instruction!
|
||||
I |= (imod&3)<<18;
|
||||
I |= (mmod&1)<<17;
|
||||
I |= (mode&15);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// SETEND Modifies the CPSR endianness, E, bit, without changing any other bits in the CPSR.
|
||||
//
|
||||
EAPI SETEND(u32 E)
|
||||
{
|
||||
DECL_Id(0xF1010000);
|
||||
|
||||
// Note: UNconditional instruction!
|
||||
I |= (E &1) << 9;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
};
|
||||
Executable
+667
@@ -0,0 +1,667 @@
|
||||
/*
|
||||
* E_VDataOp.h * VFP/A.SIMD Data Processing Instruction Set Encoding
|
||||
*
|
||||
* V{<modifier>}<operation>{<shape>}<c><q>{.<dt>} {<dest>,} <src1>, <src2>
|
||||
*
|
||||
* <modifier> Meaning
|
||||
* Q The operation uses saturating arithmetic.
|
||||
* R The operation performs rounding.
|
||||
* D The operation doubles the result (before accumulation, if any).
|
||||
* H The operation halves the result.
|
||||
*
|
||||
* <shape> Meaning Typical register shape
|
||||
* (none) The operands and result are all the same width. Dd, Dn, Dm - Qd, Qn, Qm
|
||||
* L Long operation - result is 2 x width of both operands Qd, Dn, Dm
|
||||
* N Narrow operation - result is width/2 both operands Dd, Qn, Qm
|
||||
* W Wide operation - result and oper[1] are 2x width oper[2] Qd, Qn, Dm
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
#define SET_Qd \
|
||||
I |= (((Qd<<1)&0x0E)<<12); \
|
||||
I |= (((Qd<<1)&0x10)<<18)
|
||||
|
||||
#define SET_Qn \
|
||||
I |= (((Qn<<1)&0x0E)<<16); \
|
||||
I |= (((Qn<<1)&0x10)<<3)
|
||||
|
||||
#define SET_Qm \
|
||||
I |= (((Qm<<1)&0x0E)); \
|
||||
I |= (((Qm<<1)&0x10)<<1)
|
||||
|
||||
|
||||
|
||||
#define SET_Dd \
|
||||
I |= ((Dd&0x0F)<<12); \
|
||||
I |= ((Dd&0x10)<<18)
|
||||
|
||||
#define SET_Dn \
|
||||
I |= ((Dn&0x0F)<<16); \
|
||||
I |= ((Dn&0x10)<<3)
|
||||
|
||||
#define SET_Dm \
|
||||
I |= ((Dm&0x0F)); \
|
||||
I |= ((Dm&0x10)<<1)
|
||||
|
||||
|
||||
|
||||
|
||||
#define SET_Q I |= 0x40
|
||||
#define SET_U I |= ((U&1)<<24);
|
||||
#define SET_Size I |= (((Size>>4)&3)<<20) // 8,16,32 -> 0,1,2
|
||||
|
||||
|
||||
#define SET_Qdnm \
|
||||
SET_Qd; SET_Qn; SET_Qm; SET_Q
|
||||
|
||||
#define SET_Ddnm \
|
||||
SET_Dd; SET_Dn; SET_Dm
|
||||
|
||||
#define DECL_Qdnm
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#define VdpInstrF(viName, viId) \
|
||||
EAPI V##viName##_F32 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { DECL_Id(viId); SET_Qdnm; EMIT_I; } \
|
||||
EAPI V##viName##_F32 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { DECL_Id(viId); SET_Ddnm; EMIT_I; }
|
||||
|
||||
|
||||
#define VdpInstrI_EOR(viName, viId) \
|
||||
EAPI V##viName (eFQReg Qd, eFQReg Qn, eFQReg Qm) { DECL_Id(viId); SET_Qdnm; EMIT_I; } \
|
||||
EAPI V##viName (eFDReg Dd, eFDReg Dn, eFDReg Dm) { DECL_Id(viId); SET_Ddnm; EMIT_I; } \
|
||||
|
||||
#define VdpInstrI(viName, viId) \
|
||||
EAPI V##viName (eFQReg Qd, eFQReg Qn, eFQReg Qm, u32 Size=32) { DECL_Id(viId); SET_Qdnm; SET_Size; EMIT_I; } \
|
||||
EAPI V##viName (eFDReg Dd, eFDReg Dn, eFDReg Dm, u32 Size=32) { DECL_Id(viId); SET_Ddnm; SET_Size; EMIT_I; } \
|
||||
\
|
||||
EAPI V##viName##_I8 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 8); } \
|
||||
EAPI V##viName##_I8 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 8); } \
|
||||
EAPI V##viName##_I16 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 16); } \
|
||||
EAPI V##viName##_I16 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 16); } \
|
||||
EAPI V##viName##_I32 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 32); } \
|
||||
EAPI V##viName##_I32 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 32); }
|
||||
|
||||
#define VdpInstrU(viName, viId) \
|
||||
EAPI V##viName (eFQReg Qd, eFQReg Qn, eFQReg Qm, u32 Size=32, u32 U=0) { DECL_Id(viId); SET_Qdnm; SET_U; SET_Size; EMIT_I; } \
|
||||
EAPI V##viName (eFDReg Dd, eFDReg Dn, eFDReg Dm, u32 Size=32, u32 U=0) { DECL_Id(viId); SET_Ddnm; SET_U; SET_Size; EMIT_I; } \
|
||||
\
|
||||
EAPI V##viName##_U8 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 8, 1); } \
|
||||
EAPI V##viName##_U8 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 8, 1); } \
|
||||
EAPI V##viName##_S8 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 8, 0); } \
|
||||
EAPI V##viName##_S8 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 8, 0); } \
|
||||
EAPI V##viName##_U16 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 16, 1); } \
|
||||
EAPI V##viName##_U16 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 16, 1); } \
|
||||
EAPI V##viName##_S16 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 16, 0); } \
|
||||
EAPI V##viName##_S16 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 16, 0); } \
|
||||
EAPI V##viName##_U32 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 32, 1); } \
|
||||
EAPI V##viName##_U32 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 32, 1); } \
|
||||
EAPI V##viName##_S32 (eFQReg Qd, eFQReg Qn, eFQReg Qm) { V##viName (Qd, Qn, Qm, 32, 0); } \
|
||||
EAPI V##viName##_S32 (eFDReg Dd, eFDReg Dn, eFDReg Dm) { V##viName (Dd, Dn, Dm, 32, 0); }
|
||||
|
||||
//# define VdpInstrImm (viName, viId)
|
||||
|
||||
|
||||
// Another three or four like the above .. immN, above w/ size, F32 w/ sz
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD Parallel Add/Sub
|
||||
*
|
||||
Vector Add VADD (integer), VADD (floating-point)
|
||||
Vector Add and Narrow, returning High Half VADDHN
|
||||
Vector Add Long, Vector Add Wide VADDL, VADDW
|
||||
Vector Halving Add, Vector Halving Subtract VHADD, VHSUB
|
||||
Vector Pairwise Add and Accumulate Long VPADAL
|
||||
Vector Pairwise Add VPADD (integer) , VPADD (floating-point)
|
||||
Vector Pairwise Add Long VPADDL
|
||||
Vector Rounding Add & Narrow, returning High Half VRADDHN
|
||||
Vector Rounding Halving Add VRHADD
|
||||
Vector Rounding Subtract & Narrow, ret. High Half VRSUBHN
|
||||
Vector Saturating Add VQADD
|
||||
Vector Saturating Subtract VQSUB
|
||||
Vector Subtract VSUB (integer), VSUB (floating-point)
|
||||
Vector Subtract and Narrow, returning High Half VSUBHN
|
||||
Vector Subtract Long, Vector Subtract Wide VSUBL, VSUBW
|
||||
*/
|
||||
|
||||
VdpInstrI(ADD, 0xF2000800)
|
||||
VdpInstrF(ADD, 0xF2000D00)
|
||||
|
||||
|
||||
VdpInstrI(HADD, 0xF2000800)
|
||||
VdpInstrI(HSUB, 0xF2000A00)
|
||||
|
||||
VdpInstrI(PADD, 0xF2000B10)
|
||||
VdpInstrF(PADD, 0xF3000D00)
|
||||
|
||||
|
||||
VdpInstrU(RHADD, 0xF3000100)
|
||||
VdpInstrU(QADD, 0xF2000010)
|
||||
VdpInstrU(QSUB, 0xF3000210)
|
||||
|
||||
VdpInstrI(SUB, 0xF3000800)
|
||||
VdpInstrF(SUB, 0xF2200D00)
|
||||
|
||||
|
||||
// VADD I { DECL_Id(0xF2000800); SET_Qdnm; EMIT_I; }
|
||||
// VADD F { DECL_Id(0xF2000D00); SET_Qdnm; EMIT_I; }
|
||||
// VADDHN { DECL_Id(0xF2800400); SET_Qdnm; EMIT_I; } // DQQ
|
||||
// VADD{L,W} { DECL_Id(0xF2800000); SET_Qdnm; EMIT_I; } // QDD || QQD
|
||||
// VH{ADD,SUB} { DECL_Id(0xF2000000); SET_Qdnm; EMIT_I; }
|
||||
// VPADAL { DECL_Id(0xF3B00600); SET_Qdnm; EMIT_I; } // QdQm || DdDm
|
||||
// VPADD I { DECL_Id(0xF2000B10); SET_Qdnm; EMIT_I; } // DDD only
|
||||
// VPADD F { DECL_Id(0xF3000D00); SET_Qdnm; EMIT_I; } // DDD only
|
||||
// VPADDL { DECL_Id(0xF3B00200); SET_Qdnm; EMIT_I; } // QdQm || DdDm
|
||||
// VRADDHN { DECL_Id(0xF3800400); SET_Qdnm; EMIT_I; } // DQQ
|
||||
// VRHADD { DECL_Id(0xF3000100); SET_Qdnm; EMIT_I; }
|
||||
// VRSUBHN { DECL_Id(0xF3800600); SET_Qdnm; EMIT_I; } // DQQ
|
||||
// VQADD { DECL_Id(0xF2000010); SET_Qdnm; EMIT_I; }
|
||||
// VQSUB { DECL_Id(0xF3000210); SET_Qdnm; EMIT_I; }
|
||||
// VSUB I { DECL_Id(0xF3000800); SET_Qdnm; EMIT_I; }
|
||||
// VSUB F { DECL_Id(0xF2200D00); SET_Qdnm; EMIT_I; }
|
||||
// VSUBHN { DECL_Id(0xF2800600); SET_Qdnm; EMIT_I; } // DQQ
|
||||
// VSUB{L,W} { DECL_Id(0xF2800200); SET_Qdnm; EMIT_I; } // QDD || QQD
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD Bitwise
|
||||
*
|
||||
Vector Bitwise AND VAND (register)
|
||||
Vector Bitwise Bit Clear (AND complement) VBIC (immediate), VBIC (register)
|
||||
Vector Bitwise Exclusive OR VEOR
|
||||
Vector Bitwise Move VMOV (immediate), VMOV (register)
|
||||
Vector Bitwise NOT VMVN (immediate), VMVN (register)
|
||||
Vector Bitwise OR VORR (immediate), VORR (register)
|
||||
Vector Bitwise OR NOT VORN (register)
|
||||
Vector Bitwise Insert if False VBIF
|
||||
Vector Bitwise Insert if True VBIT
|
||||
Vector Bitwise Select VBSL
|
||||
*/
|
||||
|
||||
VdpInstrI(AND, 0xF2000110)
|
||||
VdpInstrI(BIC, 0xF2100110)
|
||||
VdpInstrI_EOR(EOR, 0xF3000110)
|
||||
VdpInstrI_EOR(BSL, 0xF3100110)
|
||||
VdpInstrI_EOR(BIT, 0xF3200110)
|
||||
VdpInstrI_EOR(BIF, 0xF3300110)
|
||||
VdpInstrI(ORN, 0xF2300110)
|
||||
// VAND R { DECL_Id(0xF2000110); SET_Qdnm; EMIT_I; }
|
||||
// VBIC R { DECL_Id(0xF2100110); SET_Qdnm; EMIT_I; }
|
||||
// VEOR { DECL_Id(0xF3000110); SET_Qdnm; EMIT_I; }
|
||||
// VBSL { DECL_Id(0xF3100110); SET_Qdnm; EMIT_I; }
|
||||
// VBIT { DECL_Id(0xF3200110); SET_Qdnm; EMIT_I; }
|
||||
// VBIF { DECL_Id(0xF3300110); SET_Qdnm; EMIT_I; }
|
||||
// VORN R { DECL_Id(0xF2300110); SET_Qdnm; EMIT_I; }
|
||||
|
||||
// VBIC I { DECL_Id(0xF2800030); SET_Qd; SET_IMM??; EMIT_I; }
|
||||
// VMOV I { DECL_Id(0xF2800010); SET_Qd; SET_IMM??; EMIT_I; }
|
||||
// VMVN I { DECL_Id(0xF2800030); SET_Qd; SET_IMM??; EMIT_I; }
|
||||
// VORR I { DECL_Id(0xF2800010); SET_Qd; SET_IMM??; EMIT_I; }
|
||||
// VAND I VBIC I
|
||||
// VORN I VORR I
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD comparison
|
||||
*
|
||||
Vector Absolute Compare VACGE, VACGT, VACLE,VACLT
|
||||
Vector Compare Equal VCEQ (register)
|
||||
Vector Compare Equal to Zer VCEQ (immediate #0)
|
||||
Vector Compare Greater Than or Equal VCGE (register)
|
||||
Vector Compare Greater Than or Equal to Zero VCGE (immediate #0)
|
||||
Vector Compare Greater Than VCGT (register)
|
||||
Vector Compare Greater Than Zero VCGT (immediate #0)
|
||||
Vector Compare Less Than or Equal to Zero VCLE (immediate #0)
|
||||
Vector Compare Less Than Zero VCLT (immediate #0)
|
||||
Vector Test Bits VTST
|
||||
*/
|
||||
// VAC{COND} { DECL_Id(0xF3000E10); SET_Vdnm; EMIT_I; }
|
||||
|
||||
// VCEQ { DECL_Id(0xF3000810); SET_Vdnm; EMIT_I; } .F32 { DECL_Id(0xF2000E00); SET_Vdnm; EMIT_I; }
|
||||
VdpInstrI(CEQ, 0xF3200810)
|
||||
// VdpInstrF(CEQ, 0xF2000e00)
|
||||
// VCGE { DECL_Id(0xF2000310); SET_Vdnm; EMIT_I; } .F32 { DECL_Id(0xF3000E00); SET_Vdnm; EMIT_I; }
|
||||
VdpInstrI(CGE, 0xF2200310)
|
||||
// VdpInstrF(CGE, 0xF3000e00)
|
||||
// VCGT { DECL_Id(0xF2000300); SET_Vdnm; EMIT_I; } .F32 { DECL_Id(0xF3200E00); SET_Vdnm; EMIT_I; }
|
||||
//*SEB* 0xF220030 for S32, 0xF3200300 for U32, 0xF2000300 is for S8.
|
||||
VdpInstrI(CGT, 0xF2200300)
|
||||
//VdpInstrF(CGT, 0xF3200e00)
|
||||
// VCLE { DECL_Id(0xF3B10180); SET_Vdnm; EMIT_I; } // R is VCGE w/ operands reversed
|
||||
// VCLT { DECL_Id(0xF3B10200); SET_Vdnm; EMIT_I; } // R is VCGT w/ operands reversed
|
||||
// VTST { DECL_Id(0xF2000810); SET_Vdnm; EMIT_I; }
|
||||
|
||||
// VCEQZ { DECL_Id(0xF3B10100); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCGEZ { DECL_Id(0xF3B10080); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCGTZ { DECL_Id(0xF3B10000); SET_Vd; SET_Vm; EMIT_I; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD shift ** SET_imm6; needed for non Vdnm
|
||||
*
|
||||
Vector Saturating Rounding Shift Left VQRSHL
|
||||
Vector Saturating Rounding Shift Right and Narrow VQRSHRN, VQRSHRUN
|
||||
Vector Saturating Shift Left VQSHL (register), VQSHL, VQSHLU (immediate)
|
||||
Vector Saturating Shift Right and Narrow VQSHRN, VQSHRUN
|
||||
Vector Rounding Shift Left VRSHL
|
||||
Vector Rounding Shift Right VRSHR
|
||||
Vector Rounding Shift Right and Accumulate VRSRA
|
||||
Vector Rounding Shift Right and Narrow VRSHRN
|
||||
Vector Shift Left VSHL (immediate) on page A8-750 VSHL (register)
|
||||
Vector Shift Left Long VSHLL
|
||||
Vector Shift Right VSHR
|
||||
Vector Shift Right and Narrow VSHRN
|
||||
Vector Shift Left and Insert VSLI
|
||||
Vector Shift Right and Accumulate VSRA
|
||||
Vector Shift Right and Insert VSRI
|
||||
*/
|
||||
// VQRSHL { DECL_Id(0xF SET_Vdnm; EMIT_I; } // * TODO
|
||||
// VQRSHRN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VQRSHRUN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VQSHL R { DECL_Id(0xF SET_Vdnm; EMIT_I; }
|
||||
// VQSHL I { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VQSHLU { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VQSHRN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VQSHRUN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VRSHL { DECL_Id(0xF SET_Vdnm; EMIT_I; }
|
||||
// VRSHR { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VRSRA { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VRSHRN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSHL I { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSHL R { DECL_Id(0xF SET_Vdnm; EMIT_I; }
|
||||
// VSHLL { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSHR { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSHRN { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSLI { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSRA { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VSRI { DECL_Id(0xF SET_Vd; SET_Vm; EMIT_I; }
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD multiply
|
||||
*
|
||||
Vector Multiply Accumulate VMLA, VMLAL, VMLS, VMLSL (integer) , VMLA, VMLS (floating-point), VMLA, VMLAL, VMLS, VMLSL (by scalar)
|
||||
Vector Multiply Accumulate Long
|
||||
Vector Multiply Subtract
|
||||
Vector Multiply Subtract Long
|
||||
Vector Multiply VMUL, VMULL (integer and polynomial)
|
||||
Vector Multiply Long VMUL (floating-point) on page A8-664 VMUL, VMULL (by scalar)
|
||||
Vector Saturating Doubling Multiply Accumulate Long VQDMLAL, VQDMLSL
|
||||
Vector Saturating Doubling Multiply Subtract Long
|
||||
Vector Saturating Doubling Multiply Returning High Half VQDMULH
|
||||
Vector Saturating Rounding Doubling Multiply Ret. High Half VQRDMULH
|
||||
Vector Saturating Doubling Multiply Long VQDMULL
|
||||
*/
|
||||
|
||||
VdpInstrI(MLA, 0xF2000900)
|
||||
VdpInstrI(MLS, 0xF3000900)
|
||||
|
||||
VdpInstrF(MLA, 0xF2000D10)
|
||||
VdpInstrF(MLS, 0xF2200D10)
|
||||
|
||||
//by scalar
|
||||
//this should be really qd,dn,sm not dm
|
||||
EAPI VMUL_F32(eFQReg Qd,eFQReg Qn, eFDReg Dm, int idx)
|
||||
{
|
||||
DECL_Id(0xF2800840);
|
||||
|
||||
SET_Qd;
|
||||
SET_Qn;
|
||||
I |= 1<<8; //SET_F
|
||||
|
||||
SET_Dm;
|
||||
I |= 0x1<<24; //SET_Q not compatible
|
||||
|
||||
I |= 2<<20; //size to 32
|
||||
|
||||
I |= Dm&15; //only lower 15 regs are avail
|
||||
|
||||
|
||||
//set register sub index
|
||||
if (idx)
|
||||
I |= 1<<5;
|
||||
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VMLA_F32(eFQReg Qd,eFQReg Qn, eFDReg Dm, int idx)
|
||||
{
|
||||
DECL_Id(0xF2800040);
|
||||
|
||||
SET_Qd;
|
||||
SET_Qn;
|
||||
I |= 1<<8; //SET_F
|
||||
|
||||
SET_Dm;
|
||||
I |= 0x1<<24; //SET_Q not compatible
|
||||
|
||||
I |= 2<<20; //size to 32
|
||||
|
||||
I |= Dm&15; //only lower 15 regs are avail
|
||||
|
||||
|
||||
//set register sub index
|
||||
if (idx)
|
||||
I |= 1<<5;
|
||||
|
||||
EMIT_I;
|
||||
}
|
||||
// VdpInstrU(MLAL, 0xF2000D10) *QDD
|
||||
// VdpInstrU(MLSL, 0xF2200D10) *QDD
|
||||
|
||||
|
||||
VdpInstrI(MUL, 0xF2000910)
|
||||
|
||||
VdpInstrF(MUL, 0xF3000D10)
|
||||
|
||||
// VdpInstrU(MULL, 0xF3000D10) *QDD
|
||||
|
||||
// VMLA I { DECL_Id(0xF2000900); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VMLS I { DECL_Id(0xF3000900); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VMLAL I { DECL_Id(0xF2800800); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= ((U&1)<<24)
|
||||
// VMLSL I { DECL_Id(0xF2800A00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= ((U&1)<<24)
|
||||
|
||||
// VMLA F { DECL_Id(0xF2000D10); SET_Vdnm; EMIT_I; } // * I |= ((sz&1)<<20)
|
||||
// VMLS F { DECL_Id(0xF2200D10); SET_Vdnm; EMIT_I; } // * I |= ((sz&1)<<20)
|
||||
|
||||
// VMLA S { DECL_Id(0xF2800040); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VMLS S { DECL_Id(0xF2800440); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// CMLAL S { DECL_Id(0xF2800240); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= ((U&1)<<24)
|
||||
// VMLSL S { DECL_Id(0xF2800640); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= ((U&1)<<24)
|
||||
|
||||
// VMUL IP { DECL_Id(0xF2000910); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= 1<<24 for polynomial
|
||||
// VMULL IP { DECL_Id(0xF2800C00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= 1<<9 for polynomial * I |= ((U&1)<<24)
|
||||
|
||||
// VMUL F { DECL_Id(0xF3000D10); SET_Vdnm; EMIT_I; } // * I |= ((sz&1)<<20)
|
||||
|
||||
// VMUL S { DECL_Id(0xF2800840); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VMULL S { DECL_Id(0xF2800A40); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20) * I |= ((U&1)<<24)
|
||||
// VQDMLAL { DECL_Id(0xF2800900); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VQDMLSL { DECL_Id(0xF2800B00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VQDMULH { DECL_Id(0xF2000B00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VQRDMULH { DECL_Id(0xF3000B00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
// VQDMULL { DECL_Id(0xF2800D00); SET_Vdnm; EMIT_I; } // * I |= ((size&3)<<20)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* A.SIMD misc
|
||||
*
|
||||
Vector Absolute Difference and Accumulate VABA, VABAL
|
||||
Vector Absolute Difference VABD, VABDL (integer) , VABD (floating-point)
|
||||
Vector Absolute VABS
|
||||
Vector Convert between floating-point and fixed point VCVT (between floating-point and fixed-point, Advanced SIMD)
|
||||
Vector Convert between floating-point and integer VCVT (between floating-point and integer, Advanced SIMD)
|
||||
Vector Convert between half-precision and single-precision VCVT (between half-precision and single-precision, Advanced SIMD)
|
||||
Vector Count Leading Sign Bits VCLS
|
||||
Vector Count Leading Zeros VCLZ
|
||||
Vector Count Set Bits VCNT
|
||||
Vector Duplicate scalar VDUP (scalar)
|
||||
Vector Extract VEXT
|
||||
Vector Move and Narrow VMOVN
|
||||
Vector Move Long VMOVL
|
||||
Vector Maximum, Minimum VMAX, VMIN (integer) , VMAX, VMIN (floating-point)
|
||||
Vector Negate VNEG
|
||||
Vector Pairwise Maximum, Minimum VPMAX, VPMIN (integer) , VPMAX, VPMIN (floating-point)
|
||||
Vector Reciprocal Estimate VRECPE
|
||||
Vector Reciprocal Step VRECPS
|
||||
Vector Reciprocal Square Root Estimate VRSQRTE
|
||||
Vector Reciprocal Square Root Step VRSQRTS
|
||||
Vector Reverse VREV16, VREV32, VREV64
|
||||
Vector Saturating Absolute VQABS
|
||||
Vector Saturating Move and Narrow VQMOVN, VQMOVUN
|
||||
Vector Saturating Negate VQNEG
|
||||
Vector Swap VSWP
|
||||
Vector Table Lookup VTBL, VTBX
|
||||
Vector Transpose VTRN
|
||||
Vector Unzip VUZP
|
||||
Vector Zip VZIP
|
||||
*/
|
||||
// VABA { DECL_Id(0xF2000710); // WIP
|
||||
// VABAL { DECL_Id(0xF2800500);
|
||||
|
||||
// VABD I { DECL_Id(0xF);
|
||||
// VABDL I { DECL_Id(0xF);
|
||||
|
||||
// VABD F { DECL_Id(0xF);
|
||||
|
||||
// VABS { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
|
||||
EAPI VSQRT_F32(eFSReg Sd, eFSReg Sm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB10AC0); SET_CC;
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
I |= ((Sm&0x1E)>>1) | ((Sm&1)<<5);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VABS_F32(eFSReg Sd, eFSReg Sm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB00AC0); SET_CC;
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
I |= ((Sm&0x1E)>>1) | ((Sm&1)<<5);
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI VNEG_F32(eFSReg Sd, eFSReg Sm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB10A40); SET_CC;
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
I |= ((Sm&0x1E)>>1) | ((Sm&1)<<5);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
//imm move, fpu
|
||||
EAPI VMOV(eFSReg Sd, u32 imm8_fpu, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB10A00); SET_CC;
|
||||
|
||||
I |= (imm8_fpu&0x0F); //bits 3:0
|
||||
I |= (imm8_fpu&0xF0)<<12; //bits 19:16
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
const u32 fpu_imm_1=0x70;//01110000
|
||||
|
||||
EAPI VCMP_F32(eFSReg Sd, eFSReg Sm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB40A40); SET_CC;
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
I |= ((Sm&0x1E)>>1) | ((Sm&1)<<5);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
VdpInstrF(CEQ, 0xF2000E00)
|
||||
VdpInstrF(CGE, 0xF3000E00)
|
||||
VdpInstrF(CGT, 0xF3200E00)
|
||||
|
||||
// VCVT FFP { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCVT FI { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCVT HS { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
|
||||
// VCLS { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCLZ { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
// VCNT { DECL_Id(0xF); SET_Vd; SET_Vm; EMIT_I; }
|
||||
|
||||
|
||||
// VEXT { DECL_Id(0xF); SET_Vdnm; EMIT_I; }
|
||||
|
||||
// VMAX I { DECL_Id(0xF);
|
||||
// VMIN I { DECL_Id(0xF);
|
||||
// VMAX F { DECL_Id(0xF);
|
||||
// VMIN F { DECL_Id(0xF);
|
||||
// VNEG { DECL_Id(0xF);
|
||||
|
||||
// VPMAX I { DECL_Id(0xF);
|
||||
// VPMIN I { DECL_Id(0xF);
|
||||
// VPMAX F { DECL_Id(0xF);
|
||||
// VPMIN F { DECL_Id(0xF);
|
||||
|
||||
// VRECPE { DECL_Id(0xF3B30400); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VRECPS { DECL_Id(0xF2000F10); SET_Vdnm; EMIT_I; } // sz&1<<20 (.F32)
|
||||
// VRSQRTE { DECL_Id(0xF3B30480); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18 F&1<<8 ***
|
||||
// VRSQRTS { DECL_Id(0xF2200F10); SET_Vdnm; EMIT_I; } // sz&1<<20 (.F32)
|
||||
// VREVsz { DECL_Id(0xF3B00000); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18 op&3<<7 ***
|
||||
|
||||
// VQABS { DECL_Id(0xF3B00700); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VQMOVN { DECL_Id(0xF3B20200); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18 op&3<<6 op:00=MOVN op11=srcUnsigned op:x1=dstUnsigned
|
||||
// VQMOVUN { DECL_Id(0xF3B20200); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VQNEG { DECL_Id(0xF3B00780); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
|
||||
// VSWP { DECL_Id(0xF3B20000); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VTBL { DECL_Id(0xF3B00800); SET_Vdnm; EMIT_I; } // len&3<<8
|
||||
// VTBX { DECL_Id(0xF3B00840); SET_Vdnm; EMIT_I; } // len&3<<8
|
||||
// VTRN { DECL_Id(0xF3B20080); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VUZP { DECL_Id(0xF3B20100); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
// VZIP { DECL_Id(0xF3B20180); SET_Vd; SET_Vm; EMIT_I; } // size&3<<18
|
||||
//
|
||||
|
||||
|
||||
// VDUP & VMOVN & VMOVL are implemented in VRegXfer.h ...
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VFPv3 Instructions
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
#define SET_Sd \
|
||||
I |= ((Sd&0x1E)<<11); \
|
||||
I |= ((Sd&0x01)<<22)
|
||||
|
||||
#define SET_Sn \
|
||||
I |= ((Sn&0x1E)<<15); \
|
||||
I |= ((Sn&0x01)<<7)
|
||||
|
||||
#define SET_Sm \
|
||||
I |= ((Sm&0x1E)>>1); \
|
||||
I |= ((Sm&0x01)<<5)
|
||||
|
||||
|
||||
|
||||
#define SET_Sdnm SET_Sd; SET_Sn; SET_Sm
|
||||
|
||||
|
||||
#define VfpInstrS(viName, viId) EAPI V##viName##_VFP (eFSReg Sd, eFSReg Sn, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(viId); SET_CC; SET_Sdnm; EMIT_I; }
|
||||
|
||||
VfpInstrS(MLA, 0x0E000A00)
|
||||
VfpInstrS(MLS, 0x0E000A40)
|
||||
|
||||
VfpInstrS(NMLA, 0x0E100A40)
|
||||
VfpInstrS(NMLS, 0x0E100A00)
|
||||
VfpInstrS(NMUL, 0x0E200A40)
|
||||
|
||||
|
||||
VfpInstrS(MUL, 0x0E200A00)
|
||||
|
||||
VfpInstrS(ADD, 0x0E300A00)
|
||||
VfpInstrS(SUB, 0x0E300A40)
|
||||
|
||||
VfpInstrS(DIV, 0x0E800A00)
|
||||
|
||||
|
||||
EAPI VCVT_to_S32_VFP (eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(0x0EBD0AC0); SET_CC; SET_Sd; SET_Sm; EMIT_I; } // VfpInstrS(ABS, 0x0EB00AC0) ** {D,S}dm
|
||||
// 0x0EB80A40 is to_U32. to_S32 is 0x0EB80AC0
|
||||
EAPI VCVT_from_S32_VFP (eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(0x0EB80AC0); SET_CC; SET_Sd; SET_Sm; EMIT_I; } // VfpInstrS(ABS, 0x0EB00AC0) ** {D,S}dm
|
||||
|
||||
EAPI VABS_VFP (eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(0x0EB00AC0); SET_CC; SET_Sd; SET_Sm; EMIT_I; } // VfpInstrS(ABS, 0x0EB00AC0) ** {D,S}dm
|
||||
EAPI VNEG_VFP (eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(0x0EB10A40); SET_CC; SET_Sd; SET_Sm; EMIT_I; } // VfpInstrS(NEG, 0x0EB10A40) ** {D,S}dm
|
||||
EAPI VSQRT_VFP(eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL) { DECL_Id(0x0EB10AC0); SET_CC; SET_Sd; SET_Sm; EMIT_I; } // VfpInstrS(SQRT, 0x0EB10AC0) ** {D,S}dm
|
||||
|
||||
// - x0 Vector Move VMOV (immediate) on page A8-640
|
||||
// 0000 01 Vector Move VMOV (register) on page A8-642
|
||||
|
||||
// 001x x1 Vector Convert VCVTB, VCVTT (between half-precision and single-precision, VFP) on page A8-588
|
||||
// 010x x1 Vector Compare VCMP, VCMPE on page A8-572
|
||||
// 0111 11 Vector Convert VCVT (between double-precision and single-precision) on page A8-584
|
||||
// 1000 x1 Vector Convert VCVT, VCVTR (between floating-point and integer, VFP) on page A8-578
|
||||
// 101x x1 Vector Convert VCVT (between floating-point and fixed-point, VFP) on page A8-582
|
||||
// 110x x1 Vector Convert VCVT, VCVTR (between floating-point and integer, VFP) on page A8-578
|
||||
// 111x x1 Vector Convert VCVT (between floating-point and fixed-point, VFP) on page A8-582
|
||||
|
||||
////// hack
|
||||
|
||||
EAPI VDIV_HACKF32(eFDReg Sd, eFDReg Sn, eFDReg Sm)
|
||||
{
|
||||
ConditionCode CC=AL;
|
||||
|
||||
eFSReg SdS=(eFSReg)(Sd*2);
|
||||
eFSReg SnS=(eFSReg)(Sn*2);
|
||||
eFSReg SmS=(eFSReg)(Sm*2);
|
||||
|
||||
verify(Sd<32 && Sn<32 && Sm<32);
|
||||
|
||||
VDIV_VFP(SdS,SnS,SmS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#undef SET_Qd
|
||||
#undef SET_Dd
|
||||
|
||||
#undef SET_Qn
|
||||
#undef SET_Dn
|
||||
|
||||
#undef SET_Qm
|
||||
#undef SET_Dm
|
||||
|
||||
#undef SET_Q
|
||||
|
||||
#undef SET_Qdnm
|
||||
#undef SET_Ddnm
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,210 @@
|
||||
/*
|
||||
* E_VLoadStore.h * VFP/A.SIMD Load/Store Instruction Set Encoding
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
// [cond][110][Opcode][-Rn-][----][101][---------]
|
||||
//
|
||||
// cond != 0b1111 | LDC && STC consume these
|
||||
|
||||
|
||||
|
||||
#define SET_Dd \
|
||||
I |= ((Dd&0x0F)<<12); \
|
||||
I |= ((Dd&0x10)<<18)
|
||||
|
||||
#define SET_Sd \
|
||||
I |= ((Sd&0x1E)<<11); \
|
||||
I |= ((Sd&0x01)<<22)
|
||||
|
||||
|
||||
#define SET_Rn \
|
||||
I |= ((Rn&15)<<16)
|
||||
|
||||
#define SET_uImm8 \
|
||||
I |= (uImm8 & 255)
|
||||
|
||||
#define SET_sImm8 \
|
||||
if (sImm8 > 0) { \
|
||||
I |= (1<<23); \
|
||||
} \
|
||||
I |= (abs(sImm8) & 255)
|
||||
|
||||
|
||||
#define SET_PUW(_P,_U,_W) \
|
||||
I |= ( ((_P&1)<<24) | ((_U&1)<<23) | ((_W&1)<<21) )
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* V{LD,ST}R: Vector Load/Store Register
|
||||
*
|
||||
* V{LD,ST}R.64 // VFP && A.SIMD
|
||||
* V{LD,ST}R.32 // VFP
|
||||
*/
|
||||
|
||||
EAPI VLDR(eFDReg Dd, eReg Rn, s32 sImm8, ConditionCode CC=AL) // VLDR.64
|
||||
{
|
||||
DECL_Id(0x0D100B00); SET_CC;
|
||||
SET_Dd; SET_Rn; SET_sImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VLDR(eFSReg Sd, eReg Rn, s32 sImm8, ConditionCode CC=AL) // VLDR.32
|
||||
{
|
||||
DECL_Id(0x0D100A00); SET_CC;
|
||||
SET_Sd; SET_Rn; SET_sImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI VSTR(eFDReg Dd, eReg Rn, s32 sImm8, ConditionCode CC=AL) // VSTR.64
|
||||
{
|
||||
DECL_Id(0x0D000B00); SET_CC;
|
||||
SET_Dd; SET_Rn; SET_sImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VSTR(eFSReg Sd, eReg Rn, s32 sImm8, ConditionCode CC=AL) // VSTR.32
|
||||
{
|
||||
DECL_Id(0x0D000A00); SET_CC;
|
||||
SET_Sd; SET_Rn; SET_sImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* V{LD,ST}M: Vector Load/Store Multiple
|
||||
*
|
||||
* V{LD,ST}R.64 // VFP && A.SIMD
|
||||
* V{LD,ST}R.32 // VFP
|
||||
*
|
||||
* uImm8: directional count, abs(sImm8) is the reg. count
|
||||
* Dd: Register to start sequential operation from..
|
||||
*
|
||||
* suffix DB: P=1 U=0 W=1, Decrement Before, Addresses end just before the address in Rn.
|
||||
* suffix IA: P=0 U=1 W=?, Increment After, Addresses start at address in Rn
|
||||
*
|
||||
* ** These are very complicated encoding and require a lot of error checking and even more thought when used. **
|
||||
* ** Simply using, MOV32(R4, &double_array[0]); VLDM(D0, R4, 4); should however work to load an array of 4 doubles **
|
||||
*/
|
||||
|
||||
EAPI VLDM(eFDReg Dd, eReg Rn, u32 uImm8, u32 WB=0, ConditionCode CC=AL) // VLDM.64
|
||||
{
|
||||
// ASSERT( (uImm8>0) && (uImm8<=16) && ((Dd+uImm8) <= 32) )
|
||||
uImm8<<=1;
|
||||
DECL_Id(0x0C100B00); SET_CC;
|
||||
SET_Dd; SET_Rn;
|
||||
SET_uImm8; SET_PUW(0,1,WB); // Defaulting to IA w/o ! (Write-back)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VLDM(eFSReg Sd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VLDM.32
|
||||
{
|
||||
// ASSERT( (uImm8>0) && ((Dd+uImm8) <= 32) )
|
||||
DECL_Id(0x0C100A00); SET_CC;
|
||||
SET_Sd; SET_Rn;
|
||||
SET_uImm8; SET_PUW(0,1,0); // Defaulting to IA w/o ! (Write-back)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI VSTM(eFDReg Dd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VSTM.64
|
||||
{
|
||||
// ASSERT( (uImm8>0) && (uImm8<=16) && ((Dd+uImm8) <= 32) )
|
||||
uImm8<<=1;
|
||||
DECL_Id(0x0C000B00); SET_CC;
|
||||
SET_Dd; SET_Rn;
|
||||
SET_uImm8; SET_PUW(0,1,0); // Defaulting to IA w/o ! (Write-back)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VSTM(eFSReg Sd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VSTM.32
|
||||
{
|
||||
// ASSERT( (uImm8>0) && ((Dd+uImm8) <= 32) )
|
||||
DECL_Id(0x0C000A00); SET_CC;
|
||||
SET_Sd; SET_Rn;
|
||||
SET_uImm8; SET_PUW(0,1,0); // Defaulting to IA w/o ! (Write-back)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* V{LD,ST}n: Various extra load/store multiple.
|
||||
*
|
||||
* Not Implemented.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VPUSH/VPOP: Vector Load/Store multiple consecutive vector registers to the stack.
|
||||
*
|
||||
* V{PUSH,POP} .64: A.SIMD .32 VFP
|
||||
*/
|
||||
|
||||
EAPI VPUSH(eFDReg Dd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VPUSH.64
|
||||
{
|
||||
uImm8<<=1;
|
||||
DECL_Id(0x0D2D0B00); SET_CC;
|
||||
SET_Dd; SET_uImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VPUSH(eFSReg Sd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VPUSH.32
|
||||
{
|
||||
DECL_Id(0x0D2D0A00); SET_CC;
|
||||
SET_Sd; SET_uImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
EAPI VPOP(eFDReg Dd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VPOP.64
|
||||
{
|
||||
uImm8<<=1;
|
||||
DECL_Id(0x0CBD0B00); SET_CC;
|
||||
SET_Dd; SET_uImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VPOP(eFSReg Sd, eReg Rn, u32 uImm8, ConditionCode CC=AL) // VPOP.32
|
||||
{
|
||||
DECL_Id(0x0CBD0A00); SET_CC;
|
||||
SET_Sd; SET_uImm8;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Best practice is to remove macro definitions,
|
||||
* this way they can't affect subsequent headers.
|
||||
*/
|
||||
|
||||
#undef SET_Dd
|
||||
#undef SET_Sd
|
||||
|
||||
#undef SET_Rn
|
||||
|
||||
#undef SET_uImm8
|
||||
#undef SET_sImm8
|
||||
|
||||
#undef SET_PUW
|
||||
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,344 @@
|
||||
/*
|
||||
* E_VRegXfer.h * VFP/A.SIMD Register Transfer Instruction Set Encoding
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
/////// REPLACE THIS MESS W. SET_Rto16 / SET_Rto16_H22 , SET_Rto12 , SET_Rto0_H5 OR just leave it all in the fn's //////
|
||||
|
||||
|
||||
#define SET_Qd \
|
||||
I |= (((Qd<<1)&0x0E)<<16); \
|
||||
I |= (((Qd<<1)&0x10)<<3)
|
||||
|
||||
#define SET_Qm \
|
||||
I |= (((Qm<<1)&0x0E)); \
|
||||
I |= (((Qm<<1)&0x10)<<1)
|
||||
|
||||
|
||||
#define SET_Dd \
|
||||
I |= ((Dd&0x0F)<<16); \
|
||||
I |= ((Dd&0x10)<<3)
|
||||
|
||||
#define SET_Dm \
|
||||
I |= ((Dm&0x0F)); \
|
||||
I |= ((Dm&0x10)<<1)
|
||||
|
||||
|
||||
#define SET_Sn \
|
||||
I |= ((Sn&0x1E)<<15); \
|
||||
I |= ((Sn&0x01)<<7)
|
||||
|
||||
#define SET_Sm \
|
||||
I |= ((Sm&0x1E)>>1); \
|
||||
I |= ((Sm&0x01)<<5)
|
||||
|
||||
|
||||
#define SET_Rn \
|
||||
I |= ((Rn&15)<<16)
|
||||
|
||||
#define SET_Rt \
|
||||
I |= ((Rt&15)<<12)
|
||||
|
||||
#define SET_Rtx2 \
|
||||
I |= ((Rt&15)<<12) | ((Rt2&15)<<16)
|
||||
|
||||
// VDUP VMOV VMRS VMSR
|
||||
|
||||
/*
|
||||
* VDUP.SZ: Duplicates an element from ARM reg Rt into every element of {Q,D}d A.SIMD
|
||||
*
|
||||
*/
|
||||
EAPI VDUP(eFQReg Qd, eReg Rt, u32 Size=32, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0E800B10); SET_CC;
|
||||
SET_Qd; SET_Rt; I |= (1<<21); // Q
|
||||
if (Size==16) { I |= (1<<5); } // e
|
||||
if (Size==8) { I |= (1<<22); } // b
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VDUP(eFDReg Dd, eReg Rt, u32 Size=32, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0E800B10); SET_CC;
|
||||
SET_Dd; SET_Rt; // No Q
|
||||
if (Size==16) { I |= (1<<5); } // e
|
||||
if (Size==8) { I |= (1<<22); } // b
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VDUP8 (eFQReg Qd, eReg Rt, ConditionCode=AL) { VDUP(Qd,Rt,8, CC); }
|
||||
EAPI VDUP8 (eFDReg Dd, eReg Rt, ConditionCode=AL) { VDUP(Dd,Rt,8, CC); }
|
||||
EAPI VDUP16(eFQReg Qd, eReg Rt, ConditionCode=AL) { VDUP(Qd,Rt,16,CC); }
|
||||
EAPI VDUP16(eFDReg Dd, eReg Rt, ConditionCode=AL) { VDUP(Dd,Rt,16,CC); }
|
||||
EAPI VDUP32(eFQReg Qd, eReg Rt, ConditionCode=AL) { VDUP(Qd,Rt,32,CC); }
|
||||
EAPI VDUP32(eFDReg Dd, eReg Rt, ConditionCode=AL) { VDUP(Dd,Rt,32,CC); }
|
||||
|
||||
EAPI VDUP32(eFQReg Qd, eFDReg Dm, int idx)
|
||||
{
|
||||
DECL_Id(0xF3B00C00);
|
||||
|
||||
//Set_Qd seems to be incompitable here ?
|
||||
I |= (((Qd<<1)&0x0E)<<12); \
|
||||
I |= (((Qd<<1)&0x10)<<18);
|
||||
SET_Dm;
|
||||
I |= 0x40; //SET_Q
|
||||
I |= 0x4 << 16; // 32 bits 4=0100
|
||||
I |= (idx&1) << 19; // set idx
|
||||
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (register)
|
||||
*
|
||||
* VMOV { <Qd, Qm> , <Dd, Dm> } A.SIMD
|
||||
* VMOV { <Dd, Dm> , <Sd, Sm> } VFP sz1 UNDEFINED in single only VFP
|
||||
*/
|
||||
|
||||
EAPI VMOV(eFQReg Qd, eFQReg Qm) // UNCONDITIONAL
|
||||
{
|
||||
DECL_Id(0xF2200110);
|
||||
|
||||
I |= ((Qd&0x0F)<<12) | ((Qd&0x10)<<18);
|
||||
I |= ((Qm&0x0F)<<16) | ((Qm&0x10)<<1); // If !Consistent(M:Qm) then its VORR
|
||||
I |= ((Qm&0x0F)) | ((Qm&0x10)<<3); // If !Consistent(M:Qm) then its VORR
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VMOV(eFDReg Dd, eFDReg Dm) // UNCONDITIONAL
|
||||
{
|
||||
DECL_Id(0xF2200110);
|
||||
|
||||
I |= ((Dd&0x0F)<<12) | ((Dd&0x10)<<18);
|
||||
I |= ((Dm&0x0F)<<16) | ((Dm&0x10)<<3); // If !Consistent(M:Dm) then its VORR
|
||||
I |= ((Dm&0x0F)) | ((Dm&0x10)<<1); // If !Consistent(M:Dm) then its VORR
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
// EAPI VMOV(eFDReg Dd, eFDReg Dm, ConditionCode CC=AL) {} VFP Double Version Not Implemented here for obvious reasons : same as below except would set SZ @bit8 : 0x0EB00B40
|
||||
|
||||
EAPI VMOV(eFSReg Sd, eFSReg Sm, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EB00A40); SET_CC;
|
||||
|
||||
I |= ((Sd&0x1E)<<11) | ((Sd&1)<<22);
|
||||
I |= ((Sm&0x1E)>>1) | ((Sm&1)<<5);
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (Immediate) A.SIMD / VFP
|
||||
*
|
||||
*/
|
||||
|
||||
//// TO BE IMPLEMENTED ////
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (ARM to scalar) A.SIMD / VFP IF Size=32
|
||||
*
|
||||
*/
|
||||
EAPI VMOV(eFDReg Dd, u32 Index, eReg Rt, u32 Size=32, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0E000B10); SET_CC;
|
||||
SET_Dd; SET_Rt;
|
||||
// Dd[x] where x==Index Dd is 64b, 2x32[0,1](1bit) 4x16[0-3](2bits) 8x8[0-7](3bits)
|
||||
if (Size== 8) { I |= (1<<22) | ((Index&4)<<18) | ((Index&3)<<5) ; } // x -> opc1:0, opc2 (3bits) | opc1:1 SET
|
||||
if (Size==16) { I |= (1<<5) | ((Index&2)<<20) | ((Index&1<<6)) ; } // x -> opc1:0, opc2:1 (2bits) | opc2:0 SET
|
||||
if (Size==32) { I |= ((Index&1)<<21) ; } // x -> opc1:0 (1bit)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (scalar to ARM) A.SIMD / VFP IF Size=32
|
||||
*
|
||||
* Note: U (bit32) is unsigned bit, invalid for 32b and we do not handle it at all.. might want to set it for byte,short
|
||||
*/
|
||||
EAPI VMOV(eReg Rt, eFDReg Dd, u32 Index, u32 Size=32, ConditionCode CC=AL) // This is really Vn, but we'll use the same macros..
|
||||
{
|
||||
DECL_Id(0x0E100B10); SET_CC;
|
||||
SET_Dd; SET_Rt;
|
||||
// Dd[x] where x==Index Dd is 64b, 2x32[0,1](1bit) 4x16[0-3](2bits) 8x8[0-7](3bits)
|
||||
if (Size== 8) { I |= (1<<22) | ((Index&4)<<18) | ((Index&3)<<5) ; } // x -> opc1:0, opc2 (3bits) | opc1:1 SET
|
||||
if (Size==16) { I |= (1<<5) | ((Index&2)<<20) | ((Index&1<<6)) ; } // x -> opc1:0, opc2:1 (2bits) | opc2:0 SET
|
||||
if (Size==32) { I |= ((Index&1)<<21) ; } // x -> opc1:0 (1bit)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (between ARM and single either direction) VFP
|
||||
*
|
||||
*/
|
||||
EAPI VMOV(eReg Rt, eFSReg Sn, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0E000A10); SET_CC;
|
||||
SET_Sn; SET_Rt; I |= (1<<20); // op set = TO ARM reg
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI VMOV(eFSReg Sn, eReg Rt, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0E000A10); SET_CC;
|
||||
SET_Sn; SET_Rt; // op NOT set = TO FP Single reg
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (between two ARM regs and two contiguous singles either direction) VFP
|
||||
*
|
||||
*/
|
||||
EAPI VMOV(eReg Rt, eReg Rt2, eFSReg Sm, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0E000A10); SET_CC;
|
||||
SET_Sm; SET_Rtx2; I |= (1<<20); // op set = TO ARM regs
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI VMOV(eFSReg Sm, eReg Rt, eReg Rt2, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0E000A10); SET_CC;
|
||||
SET_Sm; SET_Rtx2; // op NOT set = TO FP Single(s)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOV: (between two ARM regs and a Double) Dm <-> Rt2:Rt A.SIMD/VFP
|
||||
*
|
||||
*/
|
||||
EAPI VMOV(eReg Rt, eReg Rt2, eFDReg Dm, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0C400B10); SET_CC;
|
||||
SET_Dm; SET_Rtx2; I |= (1<<20); // op set = TO ARM regs
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI VMOV(eFDReg Dm, eReg Rt, eReg Rt2, ConditionCode CC=AL) // Sn !d
|
||||
{
|
||||
DECL_Id(0x0C400B10); SET_CC;
|
||||
SET_Dm; SET_Rtx2; // op NOT set = TO FP Single(s)
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOVL: Takes each element in a VDouble && Sign or Zero extends into a VQuad A.SIMD
|
||||
*
|
||||
*/
|
||||
EAPI VMOVL(eFQReg Qd, eFDReg Dm, u32 Size=32, u32 Sign=0) // UNCONDITIONAL Q & ~1
|
||||
{
|
||||
Size >>= 3; // Sz/8 = 1,2 or 4 else if >0 its VSHLL
|
||||
Sign = (Sign>0)?0:1; // Invert to Unsigned
|
||||
DECL_Id(0xF2800A10);
|
||||
|
||||
SET_Dm;
|
||||
I |= ((Qd&0x0F)<<12);
|
||||
I |= ((Qd&0x10)<<18);
|
||||
I |= ((Size &7)<<19); // imm3
|
||||
I |= ((Sign &1)<<24); // U
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VMOVL_S8 (eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,8,1); }
|
||||
EAPI VMOVL_U8 (eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,8,0); }
|
||||
EAPI VMOVL_S16(eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,16,1); }
|
||||
EAPI VMOVL_U16(eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,16,0); }
|
||||
EAPI VMOVL_S32(eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,32,1); }
|
||||
EAPI VMOVL_U32(eFQReg Qd, eFDReg Dm) { VMOVL(Qd,Dm,32,0); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VMOVN: Copies least significant half of each element of a VQuad into the elements of a VDouble A.SIMD
|
||||
*
|
||||
*/
|
||||
EAPI VMOVN(eFDReg Dd, eFQReg Qm, u32 Size=32) // UNCONDITIONAL Q & ~1
|
||||
{
|
||||
Size >>= 4; // Sz/32 = 0,1 or 2
|
||||
DECL_Id(0xF3B20200);
|
||||
|
||||
SET_Qm;
|
||||
I |= ((Dd&0x0F)<<12);
|
||||
I |= ((Dd&0x10)<<18);
|
||||
I |= ((Size &3)<<18); // size
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
EAPI VMOVN16(eFDReg Dd, eFQReg Qm) { VMOVN(Dd,Qm,16); }
|
||||
EAPI VMOVN32(eFDReg Dd, eFQReg Qm) { VMOVN(Dd,Qm,32); }
|
||||
EAPI VMOVN64(eFDReg Dd, eFQReg Qm) { VMOVN(Dd,Qm,64); }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* VM{RS,SR} Move ARM reg To/From FPSCR A.SIMD/VFP
|
||||
*/
|
||||
EAPI VMRS(eReg Rt, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EF10A10);
|
||||
SET_CC; SET_Rt;
|
||||
EMIT_I;
|
||||
}
|
||||
EAPI VMSR(eReg Rt, ConditionCode CC=AL)
|
||||
{
|
||||
DECL_Id(0x0EE10A10);
|
||||
SET_CC; SET_Rt;
|
||||
EMIT_I;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#undef SET_Qd
|
||||
#undef SET_Qm
|
||||
|
||||
#undef SET_Dd
|
||||
#undef SET_Dm
|
||||
|
||||
#undef SET_Sn
|
||||
#undef SET_Sm
|
||||
|
||||
#undef SET_Rn
|
||||
#undef SET_Rt
|
||||
#undef SET_Rtx2
|
||||
|
||||
|
||||
};
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* H_Branches.h
|
||||
*
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
inline static snat Literal(unat FnAddr)
|
||||
{
|
||||
u8* pc_addr = (u8*)EMIT_GET_PTR();
|
||||
return (snat)((snat)FnAddr - ((snat)pc_addr+8));
|
||||
//return -(snat)((pc_addr+8)-(snat)FnAddr);
|
||||
}
|
||||
|
||||
EAPI CALL(unat FnAddr, ConditionCode CC=AL)
|
||||
{
|
||||
snat lit = Literal(FnAddr);
|
||||
|
||||
if(0==lit) {
|
||||
printf("Error, Compiler caught NULL literal, CALL(%08X)\n", FnAddr);
|
||||
verify(false);
|
||||
return;
|
||||
}
|
||||
if( (lit<-33554432) || (lit>33554428) ) // ..28 for BL ..30 for BLX
|
||||
{
|
||||
printf("Warning, CALL(%08X) is out of range for literal(%08X)\n", FnAddr, lit);
|
||||
// verify(false);
|
||||
|
||||
MOV32(IP, FnAddr, CC);
|
||||
BLX(IP, CC);
|
||||
return;
|
||||
}
|
||||
|
||||
BL(lit,CC);
|
||||
}
|
||||
|
||||
|
||||
|
||||
EAPI JUMP(unat FnAddr, ConditionCode CC=AL)
|
||||
{
|
||||
snat lit = Literal(FnAddr);
|
||||
|
||||
/*if(0==lit) {
|
||||
printf("Error, Compiler caught NULL literal, JUMP(%08X)\n", FnAddr);
|
||||
verify(false);
|
||||
return;
|
||||
}*/
|
||||
if( (lit<-33554432) || (lit>33554428) ) // ..28 for BL ..30 for BLX
|
||||
{
|
||||
printf("Warning, %X is out of range for imm jump! \n", FnAddr);
|
||||
//verify(false);
|
||||
|
||||
MOV32(IP, FnAddr, CC);
|
||||
BX(IP, CC);
|
||||
return;
|
||||
}
|
||||
|
||||
B(lit,CC); // Note, wont work for THUMB*, have to use bx which is reg only !
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,150 @@
|
||||
/*
|
||||
* H_LoadStore.h
|
||||
*
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
/*
|
||||
* Load Helpers
|
||||
*/
|
||||
|
||||
EAPI LoadImmBase(eReg Rt, u32 Base, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rt, Base, CC);
|
||||
|
||||
#if defined(_DEVEL)
|
||||
LDR(Rt,Rt,0, Offset, CC);
|
||||
#else
|
||||
LDR(Rt,Rt,0, CC);
|
||||
#endif
|
||||
}
|
||||
|
||||
EAPI LoadImmBase(eReg Rt, eReg Rn, u32 Base, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rn, Base, CC);
|
||||
|
||||
#if defined(_DEVEL)
|
||||
LDR(Rt,Rn,0, Offset, CC);
|
||||
#else
|
||||
LDR(Rt,Rn,0, CC);
|
||||
#endif
|
||||
}
|
||||
|
||||
EAPI LoadImmBase16(eReg Rt, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rt, Base, CC);
|
||||
LDRH(Rt,Rt,0, CC);
|
||||
|
||||
if(Extend)
|
||||
SXTH(Rt,Rt);
|
||||
}
|
||||
|
||||
EAPI LoadImmBase16(eReg Rt, eReg Rn, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rn, Base, CC);
|
||||
LDRH(Rt,Rn,0, CC);
|
||||
|
||||
if(Extend)
|
||||
SXTH(Rt,Rt);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Store Helpers
|
||||
*/
|
||||
|
||||
// you pick regs, loads Base with reg addr, you supply data in Rt
|
||||
EAPI StoreImmBase(eReg Rt, eReg Rn, u32 Base, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rn, Base, CC);
|
||||
|
||||
#if defined(_DEVEL)
|
||||
STR(Rt,Rn,0, Offset, CC);
|
||||
#else
|
||||
STR(Rt,Rn,0, CC);
|
||||
#endif
|
||||
}
|
||||
|
||||
// you pick regs, loads Rt with const val, you supply base for Rn
|
||||
EAPI StoreImmVal(eReg Rt, eReg Rn, u32 Val, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rt, Val, CC);
|
||||
|
||||
#if defined(_DEVEL)
|
||||
STR(Rt,Rn,0, Offset, CC);
|
||||
#else
|
||||
STR(Rt,Rn,0, CC);
|
||||
#endif
|
||||
}
|
||||
|
||||
// you pick regs, loads Base with reg addr, loads Rt with const val
|
||||
EAPI StoreImms(eReg Rt, eReg Rn, u32 Base, u32 Val, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rn, Base, CC);
|
||||
MOV32(Rt, Val, CC);
|
||||
|
||||
#if defined(_DEVEL)
|
||||
STR(Rt,Rn,0, Offset, CC);
|
||||
#else
|
||||
STR(Rt,Rn,0, CC);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if defined(_DEVEL) && 0 // These require testing //
|
||||
|
||||
EAPI LoadImmBase8(eReg Rt, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rt, Base, CC);
|
||||
LDRB(Rt,Rt,0, CC);
|
||||
|
||||
if(Extend)
|
||||
SXTB(Rt,Rt);
|
||||
}
|
||||
|
||||
EAPI LoadImmBase8(eReg Rt, eReg Rn, u32 Base, bool Extend=false, ConditionCode CC=AL)
|
||||
{
|
||||
MOV32(Rn, Base, CC);
|
||||
LDRB(Rt,Rn,0, CC);
|
||||
|
||||
if(Extend)
|
||||
SXTB(Rt,Rt);
|
||||
}
|
||||
|
||||
#endif // defined(_DEVEL)
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* H_fp.h
|
||||
*
|
||||
* ARMv7 floating point help routines.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
/// WIP ///
|
||||
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
#if defined(_DEVEL)
|
||||
|
||||
|
||||
/*
|
||||
* vfpVersion(): Returns VFP Arch. Version, or -1 if not supported
|
||||
*/
|
||||
int vfpVersion()
|
||||
{
|
||||
// FPSID bits [22:16] contain version
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int neonVersion()
|
||||
{
|
||||
// ??
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#define VFP_SINGLE (1<<0)
|
||||
#define VFP_DOUBLE (1<<1)
|
||||
#define NEON_INTEGER (1<<2)
|
||||
#define NEON_SINGLE (1<<3)
|
||||
#define VFP_TRAPS (1<<8) // VFPv3U
|
||||
#define FPEXT_HALF (1<<16) // Half precision extension
|
||||
|
||||
u32 fpFeatures()
|
||||
{
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#endif // _DEVEL
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
|
||||
Version 1 of the Common VFP subarchitecture has special behavior when the FPSCR.IXE bit is set to 1.
|
||||
The Common VFP subarchitecture version can be identified by checking FPSID bits [22:16]. This field is
|
||||
0b0000001 for version 1. In version 1 of the Common VFP subarchitecture the FPEXC.DEX bit is RAZ/WI.
|
||||
|
||||
|
||||
Detecting which VFP Common subarchitecture registers are implemented
|
||||
An implementation can choose not to implement FPINST and FPINST2, if these registers are not required.
|
||||
|
||||
Set FPEXC.EX=1 and FPEXC.FP2V=1
|
||||
Read back the FPEXC register
|
||||
if FPEXC.EX == 0 then
|
||||
Neither FPINST nor FPINST2 are implemented
|
||||
else
|
||||
if FPEXC.FP2V == 0 then
|
||||
FPINST is implemented, FPINST2 is not implemented.
|
||||
else
|
||||
Both FPINST and FPINST2 are implemented.
|
||||
Clean up
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* H_psuedo.h
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
EAPI MOV32(eReg Rd, u32 Imm32, ConditionCode CC=AL)
|
||||
{
|
||||
MOVW(Rd,((Imm32)&0xFFFF),CC);
|
||||
if (Imm32>>16)
|
||||
MOVT(Rd,((Imm32>>16)&0xFFFF),CC);
|
||||
}
|
||||
#if 0
|
||||
EAPI NEG(eReg Rd,eReg Rs)
|
||||
{
|
||||
RSB(Rd,Rs,0);
|
||||
}
|
||||
#endif
|
||||
EAPI NOT(eReg Rd,eReg Rs)
|
||||
{
|
||||
MVN(Rd,Rs);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* H_state.h
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
enum InstructionSet {
|
||||
IS_ARM,
|
||||
IS_Thumb,
|
||||
IS_Jazelle,
|
||||
IS_ThumbEE
|
||||
};
|
||||
|
||||
enum Endian {
|
||||
E_Little,
|
||||
E_Big
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
* coding.h, arm binary instruction coding
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
/*
|
||||
* Encoding Hi-Order 4bits, ConditionCode
|
||||
*
|
||||
*/
|
||||
|
||||
enum ConditionCode
|
||||
{
|
||||
EQ = 0x00, Equal = EQ, // 0000 Equal Z set
|
||||
NE = 0x01, NotEqual = NE, // 0001 Not equal Z clear
|
||||
CS = 0x02, CarrySet = CS, // 0010 Carry set/unsigned higher or same C set
|
||||
CC = 0x03, CarryClr = CC, // 0011 Carry clear/unsigned lowe C clear
|
||||
MI = 0x04, Minus = MI, // 0100 Minus/negative N set
|
||||
PL = 0x05, Plus = PL, // 0101 Plus/positive or zero N clear
|
||||
VS = 0x06, Overflow = VS, // 0110 Overflow V set
|
||||
VC = 0x07, NoOverflow = VC, // 0111 No overflow V clear
|
||||
|
||||
HI = 0x08, UnHigher = HI, // 1000 Unsigned higher C set and Z clear
|
||||
LS = 0x09, UnLower = LS, // 1001 Unsigned lower or same C clear or Z set
|
||||
|
||||
GE = 0x0A, GrOrEqual = GE, // 1010 Signed greater than or equal N set and V set, or N clear and V clear (N == V)
|
||||
LT = 0x0B, Less = LT, // 1011 Signed less than N set and V clear, or N clear and V set (N != V)
|
||||
GT = 0x0C, Greater = GT, // 1100 Signed greater than Z clear, and either N set and V set, or N clear and V clear (Z == 0,N == V)
|
||||
LE = 0x0D, LessOrEqual = LE, // 1101 Signed less than or equal Z set, or N set and V clear, or N clear and V set (Z == 1 or N != V)
|
||||
|
||||
AL = 0x0E, Always = AL, // 1110 Always (unconditional) -
|
||||
|
||||
|
||||
UC = 0x0F, Unconditional= UC, // 1111 Unconditional Special Instruction for ARMv5? and above
|
||||
|
||||
#define _ARM_COMPAT
|
||||
#if defined(_ARM_COMPAT)
|
||||
CC_EQ=EQ, CC_NE=NE, CC_CS=CS, CC_CC=CC, CC_MI=MI, CC_PL=PL, CC_VS=VS, CC_VC=VC,
|
||||
CC_HI=HI, CC_LS=LS, CC_GE=GE, CC_LT=LT, CC_GT=GT, CC_LE=LE, CC_AL=AL, CC_UC=UC,
|
||||
|
||||
CC_HS=CS, CC_LO=CC,
|
||||
#endif
|
||||
|
||||
ConditionCode_Size
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Data-processing OPCODE 4bits, DPOP
|
||||
*
|
||||
*/
|
||||
|
||||
enum DPOP
|
||||
{
|
||||
DP_AND, // 0000 Logical AND Rd := Rn AND shifter_operand
|
||||
DP_EOR, // 0001 Logical Exclusive OR Rd := Rn EOR shifter_operand
|
||||
DP_SUB, // 0010 Subtract Rd := Rn - shifter_operand
|
||||
DP_RSB, // 0011 Reverse Subtract Rd := shifter_operand - Rn
|
||||
DP_ADD, // 0100 Add Rd := Rn + shifter_operand
|
||||
DP_ADC, // 0101 Add with Carry Rd := Rn + shifter_operand + Carry Flag
|
||||
DP_SBC, // 0110 Subtract with Carry Rd := Rn - shifter_operand - NOT(Carry Flag)
|
||||
DP_RSC, // 0111 Reverse Subtract with Carry Rd := shifter_operand - Rn - NOT(Carry Flag)
|
||||
DP_TST, // 1000 Test Update flags after Rn AND shifter_operand
|
||||
DP_TEQ, // 1001 Test Equivalence Update flags after Rn EOR shifter_operand
|
||||
DP_CMP, // 1010 Compare Update flags after Rn - shifter_operand
|
||||
DP_CMN, // 1011 Compare Negated Update flags after Rn + shifter_operand
|
||||
DP_ORR, // 1100 Logical (inclusive) OR Rd := Rn OR shifter_operand
|
||||
DP_MOV, // 1101 Move Rd := shifter_operand (no first operand)
|
||||
DP_BIC, // 1110 Bit Clear Rd := Rn AND NOT(shifter_operand)
|
||||
DP_MVN // 1111 Move Not Rd := NOT shifter_operand (no first operand)
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum ShiftOp {
|
||||
S_LSL,
|
||||
S_LSR,
|
||||
S_ASR,
|
||||
S_ROR,
|
||||
S_RRX=S_ROR
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* eReg: ARM Register ID
|
||||
*
|
||||
*/
|
||||
enum eReg
|
||||
{
|
||||
r0=0,r1, r2, r3,
|
||||
r4, r5, r6, r7,
|
||||
r8, r9, r10, r11,
|
||||
r12, r13, r14, r15,
|
||||
|
||||
R0=0,R1, R2, R3,
|
||||
R4, R5, R6, R7,
|
||||
R8, R9, R10, R11,
|
||||
R12, R13, R14, R15,
|
||||
|
||||
// Aliases
|
||||
|
||||
a1 = r0, a2 = r1, a3 = r2, a4 = r3,
|
||||
A1 = R0, A2 = R1, A3 = R2, A4 = R3,
|
||||
|
||||
v1 = r4, v2 = r5, v3 = r6, v4 = r7, v5 = r8, v6 = r9,
|
||||
V1 = R4, V2 = R5, V3 = R6, V4 = R7, V5 = R8, V6 = R9,
|
||||
|
||||
rfp = r9, sl = r10, fp = r11, ip = r12, sp = r13, lr = r14, pc = r15,
|
||||
RFP = R9, SL = R10, FP = R11, IP = R12, SP = R13, LR = R14, PC = R15,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* eFQReg: Float [Quad] Register ID (A.SIMD)
|
||||
*
|
||||
*/
|
||||
enum eFQReg
|
||||
{
|
||||
q0=0,q1, q2, q3,
|
||||
q4, q5, q6, q7,
|
||||
q8, q9, q10, q11,
|
||||
q12, q13, q14, q15,
|
||||
|
||||
Q0=0,Q1, Q2, Q3,
|
||||
Q4, Q5, Q6, Q7,
|
||||
Q8, Q9, Q10, Q11,
|
||||
Q12, Q13, Q14, Q15
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* eFDReg: Float [Double] Register ID (VFP / A.SIMD)
|
||||
*
|
||||
*/
|
||||
enum eFDReg
|
||||
{
|
||||
d0=0,d1, d2, d3,
|
||||
d4, d5, d6, d7,
|
||||
d8, d9, d10, d11,
|
||||
d12, d13, d14, d15,
|
||||
d16, d17, d18, d19,
|
||||
d20, d21, d22, d23,
|
||||
d24, d25, d26, d27,
|
||||
d28, d29, d30, d31,
|
||||
|
||||
D0=0,D1, D2, D3,
|
||||
D4, D5, D6, D7,
|
||||
D8, D9, D10, D11,
|
||||
D12, D13, D14, D15,
|
||||
D16, D17, D18, D19,
|
||||
D20, D21, D22, D23,
|
||||
D24, D25, D26, D27,
|
||||
D28, D29, D30, D31
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* eFSReg: Float [Single] Register ID (VFP)
|
||||
*
|
||||
* Note: Using [f,F]regN syntax to avoid clash with s{8,16,32} types.
|
||||
*/
|
||||
enum eFSReg
|
||||
{
|
||||
f0=0,f1, f2, f3,
|
||||
f4, f5, f6, f7,
|
||||
f8, f9, f10, f11,
|
||||
f12, f13, f14, f15,
|
||||
f16, f17, f18, f19,
|
||||
f20, f21, f22, f23,
|
||||
f24, f25, f26, f27,
|
||||
f28, f29, f30, f31,
|
||||
|
||||
F0=0,F1, F2, F3,
|
||||
F4, F5, F6, F7,
|
||||
F8, F9, F10, F11,
|
||||
F12, F13, F14, F15,
|
||||
F16, F17, F18, F19,
|
||||
F20, F21, F22, F23,
|
||||
F24, F25, F26, F27,
|
||||
F28, F29, F30, F31
|
||||
};
|
||||
|
||||
|
||||
|
||||
enum eFSpecialReg
|
||||
{
|
||||
|
||||
// VM**
|
||||
|
||||
FPINST = 9,
|
||||
FPINST2=10,
|
||||
|
||||
FP_R_ERROR=0xFF
|
||||
};
|
||||
|
||||
|
||||
enum ePushPopReg
|
||||
{
|
||||
_r0 =0x0001, _r1 =0x0002, _r2 =0x0004, _r3 =0x0008,
|
||||
_r4 =0x0010, _r5 =0x0020, _r6 =0x0040, _r7 =0x0080,
|
||||
_r8 =0x0100, _r9 =0x0200, _r10=0x0400, _r11=0x0800,
|
||||
_r12=0x1000, _r13=0x2000, _r14=0x4000, _r15=0x8000,
|
||||
|
||||
_a1 = _r0, _a2 = _r1, _a3 = _r2, _a4 = _r3,
|
||||
_v1 = _r4, _v2 = _r5, _v3 = _r6, _v4 = _r7,
|
||||
_v5 = _r8, _v6 = _r9, _rfp = _r9, _sl = _r10,
|
||||
_fp = _r11, _ip = _r12, _sp = _r13, _lr = _r14,
|
||||
_pc = _r15,
|
||||
|
||||
_push_all = 0xFFFF, // Save All 15
|
||||
_push_call = _lr|_rfp, // Save lr && _rfb(cycle count)
|
||||
|
||||
_push_eabi = _lr|_v1|_v2|_v3|_v4|_v5|_v6|_sl|_fp|_ip, // this is guesswork ..
|
||||
};
|
||||
|
||||
|
||||
|
||||
/// WIP ///
|
||||
|
||||
struct FPReg
|
||||
{
|
||||
union
|
||||
{
|
||||
u8 vQ8[16];
|
||||
u8 vD8[8];
|
||||
u8 vS8[4];
|
||||
|
||||
u16 vQ16[8]; // *VFP: If half-word extensions are enabled
|
||||
u16 vD16[4]; // *VFP: If half-word extensions are enabled
|
||||
u16 vS16[2]; // *VFP: If half-word extensions are enabled
|
||||
|
||||
u32 vQ32[4];
|
||||
u32 vD32[2];
|
||||
u32 S;
|
||||
|
||||
// u64 vQ64[2];
|
||||
// u64 D;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
Executable
+242
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* disasm.h, a horribly static yet (hopefully) correct disassembler
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
|
||||
|
||||
inline static void armdis_cc(u32 cond, char *ccbuff) // Length is always 8 for our static'{n,m}ess
|
||||
{
|
||||
switch(cond)
|
||||
{
|
||||
case EQ: sprintf(ccbuff, "EQ"); return;
|
||||
case NE: sprintf(ccbuff, "NE"); return;
|
||||
case CS: sprintf(ccbuff, "CS"); return;
|
||||
case CC: sprintf(ccbuff, "CC"); return;
|
||||
case MI: sprintf(ccbuff, "MI"); return;
|
||||
case PL: sprintf(ccbuff, "PL"); return;
|
||||
case VS: sprintf(ccbuff, "VS"); return;
|
||||
case VC: sprintf(ccbuff, "VC"); return;
|
||||
|
||||
case HI: sprintf(ccbuff, "HI"); return;
|
||||
case LS: sprintf(ccbuff, "LS"); return;
|
||||
|
||||
case GE: sprintf(ccbuff, "GE"); return;
|
||||
case LT: sprintf(ccbuff, "LT"); return;
|
||||
case GT: sprintf(ccbuff, "GT"); return;
|
||||
case LE: sprintf(ccbuff, "LE"); return;
|
||||
|
||||
case AL: return; // sprintf(ccbuff, "AL"); -- ALways doesn't need to be specified
|
||||
|
||||
case UC: //
|
||||
default: return; // DIE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
inline static void armdis_dp(u32 dpop, char *dpbuff) // Length is always 8 ...
|
||||
{
|
||||
switch(dpop)
|
||||
{
|
||||
case DP_AND: sprintf(dpbuff, "AND"); return;
|
||||
case DP_EOR: sprintf(dpbuff, "EOR"); return;
|
||||
case DP_SUB: sprintf(dpbuff, "SUB"); return;
|
||||
case DP_RSB: sprintf(dpbuff, "RSB"); return;
|
||||
case DP_ADD: sprintf(dpbuff, "ADD"); return;
|
||||
case DP_ADC: sprintf(dpbuff, "ADC"); return;
|
||||
case DP_SBC: sprintf(dpbuff, "SBC"); return;
|
||||
case DP_RSC: sprintf(dpbuff, "RSC"); return;
|
||||
case DP_TST: sprintf(dpbuff, "TST"); return;
|
||||
case DP_TEQ: sprintf(dpbuff, "TEQ"); return;
|
||||
case DP_CMP: sprintf(dpbuff, "CMP"); return;
|
||||
case DP_CMN: sprintf(dpbuff, "CMN"); return;
|
||||
case DP_ORR: sprintf(dpbuff, "ORR"); return;
|
||||
case DP_MOV: sprintf(dpbuff, "MOV"); return;
|
||||
case DP_BIC: sprintf(dpbuff, "BIC"); return;
|
||||
case DP_MVN: sprintf(dpbuff, "MVN"); return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
inline static void armdis(u32 op, char *disbuf, u32 len=512)
|
||||
{
|
||||
char ipref[8]={0}, isuff[8]={0}, icond[8]={0} ;
|
||||
|
||||
|
||||
// u32 uOP = ((op>>12)&0xFF00) | ((op>>4)&255) ;
|
||||
|
||||
u32 uCC = ((op>>28) & 0x0F) ; //
|
||||
|
||||
u32 uO1 = ((op>>25) & 0x07) ; //
|
||||
u32 uO2 = ((op>> 4) & 0x01) ; //
|
||||
u32 uC1 = ((op>>21) & 0x0F) ; //
|
||||
u32 uC2 = ((op>> 5) & 0x07) ; //
|
||||
u32 uSB = ((op>>20) & 0x01) ; // Sign Change Bit
|
||||
|
||||
|
||||
/*
|
||||
if (uCC == UC) {
|
||||
|
||||
printf ("DBG armdis has UC instruction %X\n", op);
|
||||
sprintf (disbuf, "UNCONDITIONAL / UNHANDLED INSTRUCTION");
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (uCC != AL) {
|
||||
armdis_cc(uCC,isuff);
|
||||
}
|
||||
|
||||
|
||||
if (uO1 == 0)
|
||||
{
|
||||
|
||||
if (uO2 == 0) {
|
||||
|
||||
if ((uC1 & 0xC) == 8) {
|
||||
printf ("DBG armdis 0:0 10xx misc instruction \n", uCC);
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 0:");
|
||||
return;
|
||||
}
|
||||
|
||||
// DP imm.shift
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
else if (uO2 == 1) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 0:");
|
||||
}
|
||||
|
||||
}
|
||||
else if (uO1 == 1) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 1:");
|
||||
}
|
||||
else if (uO1 == 2) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 2:");
|
||||
}
|
||||
else if (uO1 == 3) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 3:");
|
||||
}
|
||||
else if (uO1 == 4) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 4:");
|
||||
}
|
||||
else if (uO1 == 5) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 5:");
|
||||
}
|
||||
else if (uO1 == 6) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 6:");
|
||||
}
|
||||
else if (uO1 == 7) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 7:");
|
||||
}
|
||||
else if (uO1 == 8) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 8:");
|
||||
}
|
||||
else if (uO1 == 9) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 9:");
|
||||
}
|
||||
else if (uO1 == 10) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 10:");
|
||||
}
|
||||
else if (uO1 == 11) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 11:");
|
||||
}
|
||||
else if (uO1 == 12) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 12:");
|
||||
}
|
||||
else if (uO1 == 13) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 13:");
|
||||
}
|
||||
else if (uO1 == 14) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 14:");
|
||||
}
|
||||
else if (uO1 == 15) {
|
||||
|
||||
sprintf (disbuf, "UNHANDLED INSTRUCTION 15:");
|
||||
}
|
||||
else {
|
||||
|
||||
sprintf (disbuf, "INVALID INSTRUCTION");
|
||||
}
|
||||
*/
|
||||
if (!uC1 && uO1==5) {
|
||||
//B
|
||||
char tmp[20];
|
||||
tmp[0]='\0';
|
||||
armdis_cc(uCC, tmp);
|
||||
sprintf(disbuf, "B%s %08X", tmp, (op&0xffffff)<<2);
|
||||
} else {
|
||||
armdis_dp(uC1, disbuf);
|
||||
char tmp[20];
|
||||
tmp[0]='\0';
|
||||
armdis_cc(uCC, tmp);
|
||||
if (tmp[0]) {
|
||||
strcat(disbuf, ".\0");
|
||||
strcat(disbuf, tmp);
|
||||
}
|
||||
if (uSB) strcat(disbuf, ".S\0");
|
||||
bool shifter=false;
|
||||
switch (uO1) {
|
||||
case 0:
|
||||
// reg_reg
|
||||
sprintf(tmp,"\tr%d, r%d", (op>>12)&0x0f, (op)&0x0f);
|
||||
shifter=true;
|
||||
break;
|
||||
case 1:
|
||||
// reg_imm
|
||||
sprintf(tmp,"\tr%d, %04X", (op>>16)&0x0f, (op)&0xffff);
|
||||
break;
|
||||
default:
|
||||
shifter=true;
|
||||
sprintf(tmp, " 0x%0X", uO1);
|
||||
}
|
||||
strcat(disbuf, tmp);
|
||||
char* ShiftOpStr[]={"LSL","LSR","ASR","ROR"};
|
||||
u32 shiftop=(op>>5)&0x3;
|
||||
u32 shiftoptype=(op>>4)&0x1;
|
||||
u32 shiftopreg=(op>>8)&0xf;
|
||||
u32 shiftopimm=(op>>7)&0x1f;
|
||||
if (shifter) {
|
||||
if (!shiftop && !shiftoptype && !shiftopimm)
|
||||
{
|
||||
//nothing
|
||||
} else {
|
||||
if ((shiftop==1) || (shiftop==2)) if (!shiftoptype) if (!shiftopimm) shiftopimm=32;
|
||||
sprintf(tmp, " ,%s %s%d", ShiftOpStr[shiftop], (shiftoptype)?" r":" #", (shiftoptype)?shiftopreg:shiftopimm);
|
||||
strcat(disbuf, tmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Emitter.h
|
||||
*
|
||||
* ARMv7 ISA Emitter for code generation.
|
||||
*
|
||||
* David Miller, 2011.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "arm_coding.h"
|
||||
#include "arm_registers.h"
|
||||
//#include "arm_disasm.h"
|
||||
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
/*
|
||||
* Emitter - Reserved for use w/ static members ..
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
class Emitter
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if defined(_DEBUG) || defined(DEBUG)
|
||||
|
||||
#define EAPI void
|
||||
|
||||
#define DECL_I \
|
||||
u32 Instruction=0
|
||||
|
||||
#define DECL_Id(d) \
|
||||
u32 Instruction=(d)
|
||||
|
||||
#else
|
||||
|
||||
// #define _inlineExSVoidA __extension__ static __inline void __attribute__ ((__always_inline__))
|
||||
|
||||
#define EAPI \
|
||||
inline static void
|
||||
|
||||
#define DECL_I \
|
||||
static u32 Instruction; \
|
||||
Instruction=0
|
||||
|
||||
#define DECL_Id(d) \
|
||||
static u32 Instruction; \
|
||||
Instruction=(d)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* TEMP
|
||||
*/
|
||||
|
||||
|
||||
#define I (Instruction)
|
||||
|
||||
#define SET_CC I |= (((u32)CC&15)<<28)
|
||||
|
||||
#ifndef EMIT_I
|
||||
#define EMIT_I emit_Write32((I));
|
||||
#endif
|
||||
|
||||
#ifndef EMIT_GET_PTR
|
||||
#define EMIT_GET_PTR() emit_GetCCPtr()
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* ARM Core Instructions
|
||||
*/
|
||||
|
||||
#include "E_Branches.h"
|
||||
#include "E_DataOp.h"
|
||||
#include "E_Multiply.h"
|
||||
#include "E_Parallel.h"
|
||||
#include "E_Extend.h"
|
||||
#include "E_Misc.h"
|
||||
#include "E_Status.h"
|
||||
#include "E_LoadStore.h"
|
||||
#include "E_Special.h"
|
||||
|
||||
|
||||
/*
|
||||
* ARM VFP/A.SIMD Extension Instructions
|
||||
*/
|
||||
|
||||
#include "E_VLoadStore.h"
|
||||
#include "E_VRegXfer.h"
|
||||
#include "E_VDataOp.h"
|
||||
|
||||
|
||||
/*
|
||||
* Helper Routines & Psuedo-Instructions
|
||||
*/
|
||||
|
||||
#include "H_psuedo.h"
|
||||
|
||||
#include "H_Branches.h"
|
||||
#include "H_LoadStore.h"
|
||||
|
||||
//#include "H_state.h"
|
||||
//#include "H_fp.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,487 @@
|
||||
/*
|
||||
* registers.h
|
||||
*
|
||||
* ARMv7-A system register(s).
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace ARM
|
||||
{
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 Registers for VMSA Implementation. [ref.DDI0406B B3.12]
|
||||
*************************************************************************************************/
|
||||
/*
|
||||
<CRn> <opc1> <CRm> <opc2> [NAME,] Description [Flags]
|
||||
c0 {
|
||||
0 c0 {
|
||||
0 MIDR, Main ID RO
|
||||
1 CTR, Cache Type RO
|
||||
2 TCMTR, TCM Type RO, IMPL.DEFINED
|
||||
3 TLBTR, TLB Type RO, IMPL.DEFINED
|
||||
5 MPIDR, Multiprocessor Affinity RO
|
||||
{4,6,7} MIDR$, Main ID Aliases RO
|
||||
}
|
||||
|
||||
0 c[1-7] [0-7] CPUID ID_{PFRn,DFRn,AFR0,MMFRn,ISARn} RO
|
||||
|
||||
1 c0 0 CCSIDR, Cache Size ID RO
|
||||
1 c0 1 CLIDR, Cache Level ID RO
|
||||
1 c0 7 AIDR, Aux ID RO, IMPL.DEFINED
|
||||
|
||||
2 c0 0 CSSELR, Cache Size Selection RW
|
||||
}
|
||||
|
||||
c1 0 c0 [0-2] System Control RW
|
||||
c1 0 c1 [0-2] Security Extension RW, IMPL.OPTIONAL
|
||||
|
||||
c2 0 c0 [0-2] Translation Table Base RW
|
||||
|
||||
c3 0 c0 0 DACR, Domain Access Control RW
|
||||
|
||||
c5 0 c{0,1} {0,1} Fault Status RW
|
||||
|
||||
c6 0 c0 {0,2] Fault Address RW
|
||||
|
||||
c7 0 {
|
||||
c0 4 NOP WO
|
||||
c1 {0,6} Cache Maintenance operations, Multiprocessing Extensions WO
|
||||
c4 0 PAR, Physical Address RW
|
||||
c5 {0,1,6,7} Cache and branch predictor maintenance operations WO
|
||||
c5 4 CP15ISB, Instruction barrier operation WO, USER
|
||||
c6 {1,2} Cache Maintenance operations WO
|
||||
c8 [0-7] VA to PA translation ops. WO
|
||||
c10 {1,2} Cache management ops. WO
|
||||
c10 {4,5} Data barrier ops. WO, USER
|
||||
c11 1 DCCMVAU, Cache barrier ops. WO
|
||||
c13 1 NOP WO
|
||||
c14 {1,2} Cache management ops. WO
|
||||
}
|
||||
|
||||
c8 0 c{3,5,6,7} [0-3] TLB maintenance ops. * WO
|
||||
|
||||
c9 [0-7] c{0,2,5,8} [0-7] Reserved for Branch Predictor, Cache and TCM ops. RSVD, OP.ACCESS
|
||||
c9 [0-7] c[12-15] [0-7] Reserved for Performance monitors. RSVD, OP.ACCESS
|
||||
|
||||
c10 0 c{0,1,4,8} [0-7] Reserved for TLB lockdown ops. RSVD, OP.ACCESS
|
||||
c10 0 c2 {0,1} PRRR, NMRRR, TEX Remap RW
|
||||
|
||||
c11 [0-7] c{0,8,15} [0-7] Reserved for DMA ops. TCM access. RSVD, OP.ACCESS
|
||||
|
||||
c12 0 c0 {0,1} Security Extensions RW, IMPL.OPTIONAL
|
||||
c12 0 c1 0 ISR, Security Extensions RO, IMPL.OPTIONAL
|
||||
|
||||
c13 0 c0 0 FCSEIDR, FCSE PID RO-if-FCSE-!IMPL / RW?
|
||||
c13 0 c0 [1-4] Software Thread and Context ID RW
|
||||
|
||||
c15 * * * IMPLEMENTATION DEFINED IMPL.DEFINED
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c0: ID codes registers
|
||||
*************************************************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* MIDR: Main ID Register
|
||||
*/
|
||||
struct MIDR
|
||||
{
|
||||
u32 Revision : 4;
|
||||
u32 PriPartNum : 12; // IF Impl:ARM && PriPartNo top 4bits are 0 || 7: arch&variant encoding differs
|
||||
u32 Architecture : 4;
|
||||
u32 Variant : 4;
|
||||
u32 Implementer : 8;
|
||||
};
|
||||
|
||||
enum MIDR_Implementer
|
||||
{
|
||||
ARM_Ltd = 0x41, // 'A'
|
||||
DigitalEquipment_Corp = 0x44, // 'D'
|
||||
Motorola_FreescaleSemi_Inc = 0x4D, // 'M'
|
||||
QUALCOMM_Inc = 0x51, // 'Q'
|
||||
MarvellSemi_Inc = 0x56, // 'V'
|
||||
Intel_Corp = 0x69, // 'i'
|
||||
|
||||
TexasInstruments_Inc = 0xFF // 'T' ???
|
||||
};
|
||||
|
||||
enum MIDR_Arch
|
||||
{
|
||||
ARMv4 = 1,
|
||||
ARMv4T = 2,
|
||||
ARMv5 = 3, // obselete
|
||||
ARMv5T = 4,
|
||||
ARMv5TE = 5,
|
||||
ARMv5TEJ = 6,
|
||||
ARMv6 = 7,
|
||||
CPUID_Defined = 15
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* CTR, Cache Type Register
|
||||
*/
|
||||
struct CTR
|
||||
{
|
||||
u32 IminLine : 4;
|
||||
u32 SBZ : 10;
|
||||
u32 L1Ip : 2;
|
||||
u32 DminLine : 4; //
|
||||
u32 ERG : 4; // Exclusives Reservation Granule.
|
||||
u32 CWG : 4; // Cache Writeback Granule.
|
||||
u32 RAZ : 1;
|
||||
u32 REGFMT : 3; // Set to 0b100 for ARMv7 register format, or 0b000 for <=ARMv6 format
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* TCMTR, TCM Type Register
|
||||
*/
|
||||
// High 3 bits is 0b100, the rest is IMPL.DEFINED
|
||||
typedef u32 TCMTR;
|
||||
|
||||
|
||||
/*
|
||||
* TLBTR, TLB Type Register
|
||||
*/
|
||||
// Low bit is nU : SET:1: Not unified ( separate instruction and data TLBs )
|
||||
typedef u32 TLBTR;
|
||||
|
||||
|
||||
/*
|
||||
* MPIDR, Multiprocessor Affinity Register
|
||||
*/
|
||||
|
||||
struct MPIDR
|
||||
{
|
||||
u32 AffinityLevel0 : 8;
|
||||
u32 AffinityLevel1 : 8;
|
||||
u32 AffinityLevel2 : 8;
|
||||
u32 MT : 1;
|
||||
u32 RAZ : 5; // Reserved As Zero
|
||||
u32 U : 1; // Set: Processor is part of a Uniprocessor system.
|
||||
u32 MP_Impl : 1; // RAO if MP Extensions are implemented.
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* CCSIDR, Cache Size ID Registers
|
||||
*/
|
||||
struct CCSIDR
|
||||
{
|
||||
u32 LineSize : 3;
|
||||
u32 Associativity : 10;
|
||||
u32 NumSets : 15;
|
||||
u32 WA : 1;
|
||||
u32 RA : 1;
|
||||
u32 WB : 1;
|
||||
u32 WT : 1;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* CLIDR, Cache Level ID Register
|
||||
*/
|
||||
struct CLIDR
|
||||
{
|
||||
u32 Ctype1 : 3;
|
||||
u32 Ctype2 : 3;
|
||||
u32 Ctype3 : 3;
|
||||
u32 Ctype4 : 3;
|
||||
u32 Ctype5 : 3;
|
||||
u32 Ctype6 : 3;
|
||||
u32 Ctype7 : 3;
|
||||
u32 LoUIS : 3;
|
||||
u32 LoC : 3;
|
||||
u32 LoUU : 3;
|
||||
u32 RAZ : 2; // RAZ
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* AIDR, Auxiliary ID Register.
|
||||
*/
|
||||
typedef u32 AIDR; // IMPLEMENTATION DEFINED
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* CSSELR, Cache Size Selection Register
|
||||
*/
|
||||
struct CSSELR
|
||||
{
|
||||
u32 InD : 1;
|
||||
u32 Level : 3;
|
||||
u32 SBZP : 28;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c1: System control registers
|
||||
*************************************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
// SCTRL, ACTLR ////////////////////// TODO ///////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* CPACR: Coprocessor Access Control Register.
|
||||
*
|
||||
* Controls access to all coprocessors other than CP14 & CP15.
|
||||
* It may be used to check for their presence by testing modification to cpN bits.
|
||||
*
|
||||
* Notes:
|
||||
*
|
||||
* D32DIS:1 && ASEDIS:0 is INVALID
|
||||
* ASEDIS on hw { w. VFP & w.o A.SIMD } is RAO/WI, if bit is not supported it is RAZ/WI.
|
||||
*
|
||||
* When Security Extensions are enabled, NSACR controls CP access from non-secure state.
|
||||
*
|
||||
* VFP uses CP10 && CP11, the values of .cp10 && .cp11 should be the same.
|
||||
*/
|
||||
union CPACR
|
||||
{
|
||||
struct {
|
||||
u32 cp0 : 2; // cpN [0-13]:
|
||||
u32 cp1 : 2; // Defines access rights for individual coprocessors.
|
||||
u32 cp2 : 2; // See CP_Access enum below for possible values;
|
||||
u32 cp3 : 2; //
|
||||
u32 cp4 : 2; // To test
|
||||
u32 cp5 : 2;
|
||||
u32 cp6 : 2;
|
||||
u32 cp7 : 2;
|
||||
u32 cp8 : 2;
|
||||
u32 cp9 : 2;
|
||||
u32 cp10 : 2;
|
||||
u32 cp11 : 2;
|
||||
u32 cp12 : 2;
|
||||
u32 cp13 : 2;
|
||||
u32 rsvcd: 2; // SBZP
|
||||
u32 D32DIS:1; // SET: Disables use of D16-D32 of the VFP register file.
|
||||
u32 ASEDIS:1; // SET: Disables all A.SIMD Instructions, VFPv3 shall remain valid.
|
||||
};
|
||||
|
||||
u32 R;
|
||||
};
|
||||
|
||||
/*
|
||||
* CP_Access: Enumerates access rights for CPACR.cpN
|
||||
*
|
||||
*/
|
||||
enum CP_Access
|
||||
{
|
||||
A_Deny, // Deny Access, Attempts to access cause Exception::Undefined_Instruction
|
||||
A_Privileged, // Privileged Access, Attempts to access cause Exception::Undefined_Instruction in User mode.
|
||||
A_Reserved, // Reserved Value, Use of this value is UNPREDICTABLE.
|
||||
A_Full // Full Access, Access is defined by coprocessor.
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* SCR: Secure Configuration Register.
|
||||
*
|
||||
* Requires: Security Extension.
|
||||
*/
|
||||
union SCR
|
||||
{
|
||||
struct {
|
||||
u32 NS : 1; //
|
||||
u32 IRQ : 1; //
|
||||
u32 FIQ : 1; //
|
||||
u32 EA : 1; //
|
||||
u32 FW : 1; //
|
||||
u32 AW : 1; //
|
||||
u32 nET : 1; //
|
||||
u32 SBZP:25;
|
||||
};
|
||||
|
||||
u32 R;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// SDER, Secure Debug Enable Register
|
||||
|
||||
// NSACR, Non-Secure Access Control Register
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c{2,3}: Memory protection and control registers
|
||||
*************************************************************************************************/
|
||||
|
||||
|
||||
// TTBR0 TTVR1 TTVCR
|
||||
// DACR, Domain Access Control Register
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c4: Not used
|
||||
*************************************************************************************************/
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c{5,6}: Memory system fault registers
|
||||
*************************************************************************************************/
|
||||
|
||||
// DFSR, Data Fault Status Register
|
||||
// IFSR, Instruction Fault Status Register
|
||||
// ADFSR, Aux. DFSR
|
||||
// AIFSR, Aux. IFSR
|
||||
// DFAR, Data Fault Address Register
|
||||
// IFAR, Instruction Fault Address Register
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
* CP15 c7: Cache maintenance / misc
|
||||
*************************************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*************************************************************************************************
|
||||
*************************************************************************************************
|
||||
* A.SIMD and VFP extension system registers
|
||||
*************************************************************************************************
|
||||
*************************************************************************************************/
|
||||
|
||||
enum FP_SysRegs
|
||||
{
|
||||
R_FPSID = 0, // 0b0000
|
||||
R_MVFR1 = 6, // 0b0110
|
||||
R_MVFR0 = 7, // 0b0111
|
||||
};
|
||||
|
||||
|
||||
// FPSID Floating Point System ID Register
|
||||
// MVFR1 Media and VFP Feature Register 1
|
||||
// MVFR0 Media and VFP Feature Register 0
|
||||
|
||||
struct FPSID
|
||||
{
|
||||
u32 Revision : 4; // IMPL.DEFINED
|
||||
u32 Variant : 4; // IMPL.DEFINED
|
||||
u32 PartNumber : 8; // IMPL.DEFINED
|
||||
u32 SubArch : 7; // MSB:1 when designed by ARM
|
||||
u32 SW : 1; // Is a software impl. if set
|
||||
u32 Implementer : 8; // Same as MIDR.Implementer
|
||||
};
|
||||
|
||||
enum FP_SubArch
|
||||
{
|
||||
VFPv1 = 0, // Not Permitted in ARMv7
|
||||
VFPv2_Cv1, // Not Permitted in ARMv7
|
||||
VFPv3_Cv2, //
|
||||
VFPv3_Null, // Full hardware, no trap
|
||||
VFPv3_Cv3, //
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Floating-point status and control register
|
||||
//
|
||||
struct FPSCR
|
||||
{
|
||||
u32 IOC : 1; // * All * bits are cumulative exception bits
|
||||
u32 DZC : 1; // *
|
||||
u32 OFC : 1; // *
|
||||
u32 UFC : 1; // *
|
||||
u32 IXC : 1; // *
|
||||
u32 SBZP1 : 2; //
|
||||
u32 IDC : 1; // *
|
||||
u32 IOE : 1; // ** All ** bits are FP trap enable bits
|
||||
u32 DZE : 1; // ** only supported in VFPv2 && VFPv3U
|
||||
u32 OFE : 1; // ** - RAZ elsewhere -
|
||||
u32 UFE : 1; // **
|
||||
u32 IXE : 1; // **
|
||||
u32 SBZP2 : 2; //
|
||||
u32 IDE : 1; // **
|
||||
u32 Len : 3; // SBZ for ARMv7 VFP, ignored for A.SIMD
|
||||
u32 SBZP3 : 1; //
|
||||
u32 Stride : 2; // SBZ for ARMv7 VFP, ignored for A.SIMD
|
||||
u32 RMode : 2; // Rounding Mode
|
||||
u32 FZ : 1; // Flush-to-Zero
|
||||
u32 DN : 1; // Default NaN mode control
|
||||
u32 AHP : 1; // Alt. Half-precision
|
||||
u32 QC : 1; // Cumulative saturation, A.SIMD
|
||||
u32 V : 1; // CC Overflow
|
||||
u32 C : 1; // CC Carry
|
||||
u32 Z : 1; // CC Zero
|
||||
u32 N : 1; // CC Negative
|
||||
};
|
||||
|
||||
enum FP_RoundingMode // A.SIMD Always uses RN !
|
||||
{
|
||||
RN, // Round to Nearest
|
||||
RP, // Round towards Plus Infinity
|
||||
RM, // Round towards Minus Infinity
|
||||
RZ // Round towards Zero
|
||||
};
|
||||
|
||||
|
||||
struct MVFR0
|
||||
{
|
||||
u32 A_SIMD : 4;
|
||||
u32 Single : 4;
|
||||
u32 Double : 4;
|
||||
u32 Trap : 4;
|
||||
u32 Divide : 4;
|
||||
u32 Sqrt : 4;
|
||||
u32 ShortVec: 4;
|
||||
u32 Rounding: 4;
|
||||
};
|
||||
|
||||
struct MVFR1
|
||||
{
|
||||
u32 FtZ_mode : 4;
|
||||
u32 D_NaN_mode : 4;
|
||||
u32 NFP_LdStr : 4;
|
||||
u32 NFP_int : 4;
|
||||
u32 NFP_SPFP : 4;
|
||||
u32 NFP_HPFP : 4;
|
||||
u32 VFP_HPFP : 4;
|
||||
u32 RAZ : 4;
|
||||
|
||||
};
|
||||
};
|
||||
+47
-211
@@ -1,239 +1,75 @@
|
||||
/*
|
||||
reicast build options
|
||||
|
||||
|
||||
Reicast can support a lot of stuff, and this is an attempt
|
||||
to organize the build time options
|
||||
nullDC-Beagle build configuration options
|
||||
|
||||
Option categories
|
||||
|
||||
BUILD_* - BUILD_COMPILER, etc...
|
||||
definitions about the build machine
|
||||
|
||||
HOST_*
|
||||
definitions about the host machine
|
||||
|
||||
FEAT_*
|
||||
definitions about the features that this build targets
|
||||
This is higly related to HOST_*, but it's for options that might
|
||||
or might not be avaiable depending on the target host, or that
|
||||
features that are irrelevant of the host
|
||||
|
||||
Eg, Alsa, Pulse Audio and OSS might sense as HOST dedinitions
|
||||
but it usually makes more sense to detect them as runtime. In
|
||||
that context, HOST_ALSA makes no sense because the host might
|
||||
or might not have alsa installed/ running
|
||||
|
||||
MMU makes no sense as a HOST definition at all, so it should
|
||||
be FEAT_HAS_MMU
|
||||
|
||||
TARGET_*
|
||||
A preconfigured default. Eg TARGET_WIN86.
|
||||
|
||||
Naming of options, option values, and how to use them
|
||||
|
||||
for options that makes sense to have a list of values
|
||||
{CATEGORY}_{OPTION}
|
||||
{OPTION}_{VALUE}
|
||||
|
||||
eg.
|
||||
BUILD_COMPILER == COMPILER_GCC, HOST_CPU != CPU_X64, ...
|
||||
|
||||
for options that are boolean
|
||||
{CATEGORY}_IS_{OPTION} or {CATEGORY}_HAS_{OPTION}
|
||||
|
||||
Evaluates to 0 or 1
|
||||
|
||||
If an configuration cannot be neatly split into a set of
|
||||
of orthogonal options, then it makes sense to break things
|
||||
to "sets" or have a hierarchy of options.
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
In the beggining it made sense to have an audio backend
|
||||
per operating system. It made sense to have it depend
|
||||
on HOST_OS and seleect DirectSound or alsa.
|
||||
|
||||
// no option needed
|
||||
|
||||
Then, as android was introduced, which also uses OS_LINUX
|
||||
atm, the audio could have been made an option. It could be
|
||||
a HOST_* option, or FEAT_* one. I'd prefer FEAT_*.
|
||||
FEAT_* makes more sense as future wise we might want
|
||||
to support multiple backends.
|
||||
|
||||
FEAT_AUDIO_BACKEND
|
||||
AUDIO_BACKEND_NONE
|
||||
AUDIO_BACKEND_DS
|
||||
AUDIO_BACKEND_ALSA
|
||||
AUDIO_BACKEND_ANDROID
|
||||
|
||||
Used like
|
||||
#if FEAT_AUDIO_BACKEND == AUDIO_BACKEND_DS ....
|
||||
|
||||
At some point, we might have multiple audio backends that
|
||||
can be compiled in and autodetected/selected at runtime.
|
||||
In that case, it might make sense to have the options like
|
||||
|
||||
FEAT_HAS_ALSA
|
||||
FEAT_HAS_DIRECTSOUND
|
||||
FEAT_HAS_ANDROID_AUDIO
|
||||
|
||||
or
|
||||
FEAT_HAS_AUDIO_ALSA
|
||||
FEAT_HAS_AUDIO_DS
|
||||
FEAT_HAS_AUDIO_ANDROID
|
||||
|
||||
The none option might or might not make sense. In this
|
||||
case it can be removed, as it should always be avaiable.
|
||||
|
||||
Guidelines
|
||||
----------
|
||||
|
||||
General rule of thumb, don't overcomplicate things. Start
|
||||
with a simple option, and then make it more complicated
|
||||
as new uses apply (see the example above)
|
||||
|
||||
Don't use too long names, don't use too cryptic names.
|
||||
Most team developers should be able to understand or
|
||||
figure out most of the acronyms used.
|
||||
|
||||
Try to be consistent on the acronyms across all definitions
|
||||
|
||||
Code shouldn't depend on build level options whenever possible
|
||||
|
||||
Generally, the file should compile even if the option/module is
|
||||
disabled. This makes makefiles etc much easier to write
|
||||
|
||||
TARGET_* options should generally only be used in this file
|
||||
|
||||
The current source is *not* good example of these guidelines
|
||||
|
||||
We'll try to be smart and figure out some options/defaults on this file
|
||||
but this shouldn't get too complicated
|
||||
fine grained options
|
||||
HOST_OS,HOST_CPU, ..
|
||||
|
||||
build-level options
|
||||
TARGET_BEAGLE, TARGET_WIN86, ...
|
||||
|
||||
code shouldn't depend on build level options whenever possible
|
||||
*/
|
||||
|
||||
//#define STRICT_MODE
|
||||
#ifndef STRICT_MODE
|
||||
#define FAST_MMU
|
||||
#define USE_WINCE_HACK
|
||||
#endif
|
||||
//ndc configs
|
||||
|
||||
#define NO_MMU
|
||||
//#define HOST_NO_REC
|
||||
|
||||
#define DC_PLATFORM_MASK 7
|
||||
#define DC_PLATFORM_DREAMCAST 0 /* Works, for the most part */
|
||||
#define DC_PLATFORM_NORMAL 0 /* Works, for the most part */
|
||||
#define DC_PLATFORM_DEV_UNIT 1 /* This is missing hardware */
|
||||
#define DC_PLATFORM_NAOMI 2 /* Works, for the most part */
|
||||
#define DC_PLATFORM_NAOMI2 3 /* Needs to be done, 2xsh4 + 2xpvr + custom TNL */
|
||||
#define DC_PLATFORM_ATOMISWAVE 4 /* Works, for the most part */
|
||||
#define DC_PLATFORM_ATOMISWAVE 4 /* Needs to be done, DC-like hardware with possibly more ram */
|
||||
#define DC_PLATFORM_HIKARU 5 /* Needs to be done, 2xsh4, 2x aica , custom vpu */
|
||||
#define DC_PLATFORM_AURORA 6 /* Needs to be done, Uses newer 300 mhz sh4 + 150 mhz pvr mbx SoC */
|
||||
|
||||
|
||||
#define DC_PLATFORM DC_PLATFORM_NORMAL
|
||||
|
||||
|
||||
//Target platform configs
|
||||
//HOST_OS
|
||||
#define OS_WINDOWS 0x10000001
|
||||
#define OS_LINUX 0x10000002
|
||||
|
||||
//HOST_CPU
|
||||
#define CPU_X86 0x20000001
|
||||
#define CPU_ARM 0x20000002
|
||||
#define CPU_MIPS 0x20000003
|
||||
#define CPU_X64 0x20000004
|
||||
#define CPU_GENERIC 0x20000005 //used for pnacl, emscripten, etc
|
||||
#define CPU_PPC 0x20000006
|
||||
#define CPU_PPC64 0x20000007
|
||||
#define CPU_ARM64 0x20000008
|
||||
#define CPU_MIPS64 0x20000009
|
||||
|
||||
//FEAT_SHREC, FEAT_AREC, FEAT_DSPREC
|
||||
#define DYNAREC_NONE 0x40000001
|
||||
#define DYNAREC_JIT 0x40000002
|
||||
#define DYNAREC_CPP 0x40000003
|
||||
//BUILD_COMPILER
|
||||
#define COMPILER_VC 0x30000001
|
||||
#define COMPILER_GCC 0x30000002
|
||||
|
||||
///
|
||||
#if (!defined(TARGET_WIN86) && !defined(TARGET_BEAGLE) && !defined(TARGET_NACL32) && !defined(TARGET_GCW0) && !defined(TARGET_PANDORA))
|
||||
#define TARGET_WIN86
|
||||
#endif
|
||||
|
||||
//automatic
|
||||
|
||||
#if defined(__x86_64__) || defined(_M_X64)
|
||||
#define HOST_CPU CPU_X64
|
||||
#elif defined(__i386__) || defined(_M_IX86)
|
||||
#ifdef TARGET_WIN86
|
||||
#define HOST_OS OS_WINDOWS
|
||||
#define HOST_CPU CPU_X86
|
||||
#elif defined(__arm__) || defined (_M_ARM)
|
||||
#define BUILD_COMPILER COMPILER_VC
|
||||
#elif TARGET_PANDORA
|
||||
#define HOST_OS OS_LINUX
|
||||
#define HOST_CPU CPU_ARM
|
||||
#elif defined(__aarch64__) || defined(_M_ARM64)
|
||||
#define HOST_CPU CPU_ARM64
|
||||
#elif defined(__mips__)
|
||||
#define BUILD_COMPILER COMPILER_GCC
|
||||
#elif TARGET_BEAGLE
|
||||
#define HOST_OS OS_LINUX
|
||||
#define HOST_CPU CPU_ARM
|
||||
#define BUILD_COMPILER COMPILER_GCC
|
||||
#elif TARGET_GCW0
|
||||
#define HOST_OS OS_LINUX
|
||||
#define HOST_CPU CPU_MIPS
|
||||
#define BUILD_COMPILER COMPILER_GCC
|
||||
#elif TARGET_NACL32
|
||||
#define HOST_OS OS_LINUX
|
||||
#define HOST_CPU CPU_X86
|
||||
#define BUILD_COMPILER COMPILER_GCC
|
||||
#else
|
||||
#define HOST_CPU CPU_GENERIC
|
||||
#error Invalid Target: TARGET_* not defined
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NO_REC)
|
||||
#define FEAT_SHREC DYNAREC_NONE
|
||||
#define FEAT_AREC DYNAREC_NONE
|
||||
#define FEAT_DSPREC DYNAREC_NONE
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NO_AREC)
|
||||
#define FEAT_SHREC DYNAREC_JIT
|
||||
#define FEAT_AREC DYNAREC_NONE
|
||||
#define FEAT_DSPREC DYNAREC_NONE
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_NO_JIT)
|
||||
#define FEAT_SHREC DYNAREC_CPP
|
||||
#define FEAT_AREC DYNAREC_NONE
|
||||
#define FEAT_DSPREC DYNAREC_NONE
|
||||
#endif
|
||||
|
||||
//defaults
|
||||
|
||||
#ifndef FEAT_SHREC
|
||||
#if HOST_CPU == CPU_MIPS
|
||||
#define FEAT_SHREC DYNAREC_NONE
|
||||
#else
|
||||
#define FEAT_SHREC DYNAREC_JIT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_AREC
|
||||
#if HOST_CPU == CPU_ARM || HOST_CPU == CPU_ARM64 || HOST_CPU == CPU_X64
|
||||
#define FEAT_AREC DYNAREC_JIT
|
||||
#else
|
||||
#define FEAT_AREC DYNAREC_NONE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef FEAT_DSPREC
|
||||
#if HOST_CPU == CPU_X86 || HOST_CPU == CPU_ARM64 || HOST_CPU == CPU_X64
|
||||
#define FEAT_DSPREC DYNAREC_JIT
|
||||
#else
|
||||
#define FEAT_DSPREC DYNAREC_NONE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define USE_MINIUPNPC
|
||||
|
||||
// Some restrictions on FEAT_NO_RWX_PAGES
|
||||
#if defined(FEAT_NO_RWX_PAGES) && FEAT_SHREC == DYNAREC_JIT
|
||||
#if HOST_CPU != CPU_X64 && HOST_CPU != CPU_ARM64
|
||||
#error "FEAT_NO_RWX_PAGES Only implemented for X64 and ARMv8"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
// TARGET PLATFORM
|
||||
|
||||
#define RAM_SIZE_MAX (32*1024*1024)
|
||||
#define VRAM_SIZE_MAX (16*1024*1024)
|
||||
#define ARAM_SIZE_MAX (8*1024*1024)
|
||||
|
||||
#define GD_CLOCK 33868800 //GDROM XTAL -- 768fs
|
||||
|
||||
#define AICA_CORE_CLOCK (GD_CLOCK*4/3) //[45158400] GD->PLL 3:4 -> AICA CORE -- 1024fs
|
||||
#define ADAC_CLOCK (AICA_CORE_CLOCK/4) //[11289600] 44100*256, AICA CORE -> PLL 4:1 -> ADAC -- 256fs
|
||||
#define AICA_ARM_CLOCK (AICA_CORE_CLOCK/2) //[22579200] AICA CORE -> PLL 2:1 -> ARM
|
||||
#define AICA_SDRAM_CLOCK (GD_CLOCK*2) //[67737600] GD-> PLL 2 -> SDRAM
|
||||
#define SH4_MAIN_CLOCK (200*1000*1000) //[200000000] XTal(13.5) -> PLL (33.3) -> PLL 1:6 (200)
|
||||
#define SH4_RAM_CLOCK (100*1000*1000) //[100000000] XTal(13.5) -> PLL (33.3) -> PLL 1:3 (100) , also suplied to HOLLY chip
|
||||
#define G2_BUS_CLOCK (25*1000*1000) //[25000000] from Holly, from SH4_RAM_CLOCK w/ 2 2:1 plls
|
||||
|
||||
#if defined(GLES) && !defined(GLES3) && !defined(GLES2)
|
||||
// Only use GL ES 2.0 API functions
|
||||
#define GLES2
|
||||
#endif
|
||||
+404
-89
@@ -1,120 +1,435 @@
|
||||
/*
|
||||
Config file crap
|
||||
Supports various things, as virtual config entries and such crap
|
||||
Works surprisingly well considering how old it is ...
|
||||
*/
|
||||
|
||||
#define _CRT_SECURE_NO_DEPRECATE (1)
|
||||
#include "cfg.h"
|
||||
#include "ini.h"
|
||||
#include "stdclass.h"
|
||||
|
||||
#include <cerrno>
|
||||
string cfgPath;
|
||||
|
||||
static std::string cfgPath;
|
||||
static bool save_config = true;
|
||||
static bool autoSave = true;
|
||||
//A config remains virtual only as long as a write at it
|
||||
//doesn't override the virtual value.While a config is virtual, a copy of its 'real' value is held and preserved
|
||||
|
||||
static emucfg::ConfigFile cfgdb;
|
||||
//Is this a virtual entry ?
|
||||
#define CEM_VIRTUAL 1
|
||||
//Should the value be saved ?
|
||||
#define CEM_SAVE 2
|
||||
//is this entry readonly ?
|
||||
#define CEM_READONLY 4
|
||||
//the move is from loading ?
|
||||
#define CEM_LOAD 8
|
||||
|
||||
static void saveConfigFile()
|
||||
struct ConfigEntry
|
||||
{
|
||||
FILE* cfgfile = nowide::fopen(cfgPath.c_str(), "wt");
|
||||
if (!cfgfile)
|
||||
ConfigEntry(ConfigEntry* pp)
|
||||
{
|
||||
WARN_LOG(COMMON, "Error: Unable to open file '%s' for saving", cfgPath.c_str());
|
||||
next=pp;
|
||||
flags=0;
|
||||
}
|
||||
else
|
||||
|
||||
|
||||
u32 flags;
|
||||
string name;
|
||||
string value;
|
||||
string valueVirtual;
|
||||
ConfigEntry* next;
|
||||
void SaveFile(FILE* file)
|
||||
{
|
||||
cfgdb.save(cfgfile);
|
||||
std::fclose(cfgfile);
|
||||
if (flags & CEM_SAVE)
|
||||
fprintf(file,"%s=%s\n",name.c_str(),value.c_str());
|
||||
}
|
||||
|
||||
string GetValue()
|
||||
{
|
||||
if (flags&CEM_VIRTUAL)
|
||||
return valueVirtual;
|
||||
else
|
||||
return value;
|
||||
}
|
||||
}
|
||||
void cfgSaveStr(const std::string& section, const std::string& key, const std::string& value)
|
||||
};
|
||||
struct ConfigSection
|
||||
{
|
||||
cfgdb.set(section, key, value);
|
||||
|
||||
if (save_config && autoSave)
|
||||
saveConfigFile();
|
||||
}
|
||||
|
||||
bool cfgOpen()
|
||||
{
|
||||
if (get_writable_config_path("").empty())
|
||||
// Config dir not set (android onboarding)
|
||||
return false;
|
||||
|
||||
const char* filename = "emu.cfg";
|
||||
std::string config_path_read = get_readonly_config_path(filename);
|
||||
cfgPath = get_writable_config_path(filename);
|
||||
|
||||
FILE* cfgfile = nowide::fopen(config_path_read.c_str(), "r");
|
||||
if(cfgfile != NULL) {
|
||||
cfgdb.parse(cfgfile);
|
||||
std::fclose(cfgfile);
|
||||
}
|
||||
else
|
||||
u32 flags;
|
||||
string name;
|
||||
ConfigEntry* entrys;
|
||||
ConfigSection* next;
|
||||
|
||||
ConfigSection(ConfigSection* pp)
|
||||
{
|
||||
// Config file can't be opened
|
||||
int error_code = errno;
|
||||
WARN_LOG(COMMON, "Warning: Unable to open the config file '%s' for reading (%s)", config_path_read.c_str(), strerror(error_code));
|
||||
if (error_code == ENOENT || cfgPath != config_path_read)
|
||||
next=pp;
|
||||
flags=0;
|
||||
entrys=0;
|
||||
}
|
||||
ConfigEntry* FindEntry(string name)
|
||||
{
|
||||
ConfigEntry* c= entrys;
|
||||
while(c)
|
||||
{
|
||||
// Config file didn't exist
|
||||
INFO_LOG(COMMON, "Creating new empty config file at '%s'", cfgPath.c_str());
|
||||
saveConfigFile();
|
||||
if (stricmp(name.c_str(),c->name.c_str())==0)
|
||||
return c;
|
||||
c=c->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void SetEntry(string name,string value,u32 eflags)
|
||||
{
|
||||
ConfigEntry* c=FindEntry(name);
|
||||
if (c)
|
||||
{
|
||||
//readonly is read only =)
|
||||
if (c->flags & CEM_READONLY)
|
||||
return;
|
||||
|
||||
//virtual : save only if different value
|
||||
if (c->flags & CEM_VIRTUAL)
|
||||
{
|
||||
|
||||
if(stricmp(c->valueVirtual.c_str(),value.c_str())==0)
|
||||
return;
|
||||
c->flags&=~CEM_VIRTUAL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// There was some other error (may be a permissions problem or something like that)
|
||||
save_config = false;
|
||||
entrys=c= new ConfigEntry(entrys);
|
||||
c->name=name;
|
||||
}
|
||||
|
||||
verify(!(c->flags&(CEM_VIRTUAL|CEM_READONLY)));
|
||||
//Virtual
|
||||
//Virtual | ReadOnly
|
||||
//Save
|
||||
if (eflags & CEM_VIRTUAL)
|
||||
{
|
||||
verify(!(eflags & CEM_SAVE));
|
||||
c->flags|=eflags;
|
||||
c->valueVirtual=value;
|
||||
}
|
||||
else if (eflags & CEM_SAVE)
|
||||
{
|
||||
verify(!(eflags & (CEM_VIRTUAL|CEM_READONLY)));
|
||||
flags|=CEM_SAVE;
|
||||
c->flags|=CEM_SAVE;
|
||||
|
||||
c->value=value;
|
||||
}
|
||||
else
|
||||
{
|
||||
die("Invalid eflags value");
|
||||
}
|
||||
|
||||
}
|
||||
~ConfigSection()
|
||||
{
|
||||
ConfigEntry* n=entrys;
|
||||
|
||||
while(n)
|
||||
{
|
||||
ConfigEntry* p=n;
|
||||
n=n->next;
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
void SaveFile(FILE* file)
|
||||
{
|
||||
if (flags&CEM_SAVE)
|
||||
{
|
||||
fprintf(file,"[%s]\n",name.c_str());
|
||||
|
||||
vector<ConfigEntry*> stuff;
|
||||
|
||||
ConfigEntry* n=entrys;
|
||||
|
||||
while(n)
|
||||
{
|
||||
stuff.push_back(n);
|
||||
n=n->next;
|
||||
}
|
||||
|
||||
for (int i=stuff.size()-1;i>=0;i--)
|
||||
{
|
||||
stuff[i]->SaveFile(file);
|
||||
}
|
||||
|
||||
fprintf(file,"\n");
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
struct ConfigFile
|
||||
{
|
||||
ConfigSection* entrys;
|
||||
ConfigSection* FindSection(string name)
|
||||
{
|
||||
ConfigSection* c= entrys;
|
||||
while(c)
|
||||
{
|
||||
if (stricmp(name.c_str(),c->name.c_str())==0)
|
||||
return c;
|
||||
c=c->next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
ConfigSection* GetEntry(string name)
|
||||
{
|
||||
ConfigSection* c=FindSection(name);
|
||||
if (!c)
|
||||
{
|
||||
entrys=c= new ConfigSection(entrys);
|
||||
c->name=name;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
~ConfigFile()
|
||||
{
|
||||
ConfigSection* n=entrys;
|
||||
|
||||
while(n)
|
||||
{
|
||||
ConfigSection* p=n;
|
||||
n=n->next;
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
|
||||
void ParseFile(FILE* file)
|
||||
{
|
||||
|
||||
}
|
||||
void SaveFile(FILE* file)
|
||||
{
|
||||
vector<ConfigSection*> stuff;
|
||||
|
||||
ConfigSection* n=entrys;
|
||||
|
||||
while(n)
|
||||
{
|
||||
stuff.push_back(n);
|
||||
n=n->next;
|
||||
}
|
||||
|
||||
for (int i=stuff.size()-1;i>=0;i--)
|
||||
{
|
||||
if (stuff[i]->name!="emu")
|
||||
stuff[i]->SaveFile(file);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ConfigFile cfgdb;
|
||||
|
||||
void savecfgf()
|
||||
{
|
||||
FILE* cfgfile = fopen(cfgPath.c_str(),"wt");
|
||||
if (!cfgfile)
|
||||
printf("Error : Unable to open file for saving \n");
|
||||
else
|
||||
{
|
||||
cfgdb.SaveFile(cfgfile);
|
||||
fclose(cfgfile);
|
||||
}
|
||||
}
|
||||
void cfgSaveStr(const wchar * Section, const wchar * Key, const wchar * String)
|
||||
{
|
||||
cfgdb.GetEntry(Section)->SetEntry(Key,String,CEM_SAVE);
|
||||
savecfgf();
|
||||
//WritePrivateProfileString(Section,Key,String,cfgPath);
|
||||
}
|
||||
//New config code
|
||||
|
||||
/*
|
||||
I want config to be really flexible .. so , here is the new implementation :
|
||||
|
||||
Functions :
|
||||
cfgLoadInt : Load an int , if it does not exist save the default value to it and return it
|
||||
cfgSaveInt : Save an int
|
||||
cfgLoadStr : Load a str , if it does not exist save the default value to it and return it
|
||||
cfgSaveStr : Save a str
|
||||
cfgExists : Returns true if the Section:Key exists. If Key is null , it retuns true if Section exists
|
||||
|
||||
Config parameters can be read from the config file , and can be given at the command line
|
||||
-cfg section:key=value -> defines a value at command line
|
||||
If a cfgSave* is made on a value defined by command line , then the command line value is replaced by it
|
||||
|
||||
cfg values set by command line are not written to the cfg file , unless a cfgSave* is used
|
||||
|
||||
There are some special values , all of em are on the emu namespace :)
|
||||
|
||||
These are readonly :
|
||||
|
||||
emu:AppPath : Returns the path where the emulator is stored
|
||||
emu:PluginPath : Returns the path where the plugins are loaded from
|
||||
emu:DataPath : Returns the path where the bios/data files are
|
||||
|
||||
emu:FullName : str,returns the emulator's name + version string (ex."nullDC v1.0.0 Private Beta 2 built on {datetime}")
|
||||
emu:ShortName : str,returns the emulator's name + version string , short form (ex."nullDC 1.0.0pb2")
|
||||
emu:Name : str,returns the emulator's name (ex."nullDC")
|
||||
|
||||
These are read/write
|
||||
emu:Caption : str , get/set the window caption
|
||||
*/
|
||||
|
||||
///////////////////////////////
|
||||
/*
|
||||
** This will verify there is a working file @ ./szIniFn
|
||||
** - if not present, it will write defaults
|
||||
*/
|
||||
struct vitem
|
||||
{
|
||||
string s;
|
||||
string n;
|
||||
string v;
|
||||
vitem(string a,string b,string c){s=a;n=b;v=c;}
|
||||
};
|
||||
vector<vitem> vlist;
|
||||
wchar* trim_ws(wchar* str);
|
||||
|
||||
bool cfgOpen()
|
||||
{
|
||||
cfgPath=GetPath("/emu.cfg");
|
||||
FILE* cfgfile = fopen(cfgPath.c_str(),"r");
|
||||
if(!cfgfile) {
|
||||
cfgfile = fopen(cfgPath.c_str(),"wt");
|
||||
if(!cfgfile)
|
||||
printf("Unable to open the config file for reading or writing\nfile : %s\n",cfgPath.c_str());
|
||||
else
|
||||
{
|
||||
fseek(cfgfile,0,SEEK_SET);
|
||||
fclose(cfgfile);
|
||||
cfgfile = fopen(cfgPath.c_str(),"r");
|
||||
if(!cfgfile)
|
||||
printf("Unable to open the config file for reading\nfile : %s\n",cfgPath.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
wchar line[512];
|
||||
wchar cur_sect[512]={0};
|
||||
int cline=0;
|
||||
while(cfgfile && !feof(cfgfile))
|
||||
{
|
||||
fgets(line,512,cfgfile);
|
||||
if (feof(cfgfile))
|
||||
break;
|
||||
|
||||
cline++;
|
||||
|
||||
if (strlen(line)<3)
|
||||
continue;
|
||||
if (line[strlen(line)-1]=='\r' || line[strlen(line)-1]=='\n')
|
||||
line[strlen(line)-1]=0;
|
||||
|
||||
wchar* tl=trim_ws(line);
|
||||
if (tl[0]=='[' && tl[strlen(tl)-1]==']')
|
||||
{
|
||||
tl[strlen(tl)-1]=0;
|
||||
strcpy(cur_sect,tl+1);
|
||||
trim_ws(cur_sect);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cur_sect[0]==0)
|
||||
continue;//no open section
|
||||
wchar* str1=strstr(tl,"=");
|
||||
if (!str1)
|
||||
{
|
||||
printf("Malformed entry on config - ignoring @ %d(%s)\n",cline,tl);
|
||||
continue;
|
||||
}
|
||||
*str1=0;
|
||||
str1++;
|
||||
wchar* v=trim_ws(str1);
|
||||
wchar* k=trim_ws(tl);
|
||||
if (v && k)
|
||||
{
|
||||
ConfigSection*cs=cfgdb.GetEntry(cur_sect);
|
||||
|
||||
//if (!cs->FindEntry(k))
|
||||
cs->SetEntry(k,v,CEM_SAVE|CEM_LOAD);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Malformed entry on config - ignoring @ %d(%s)\n",cline,tl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i=0;i<vlist.size();i++)
|
||||
{
|
||||
cfgdb.GetEntry(vlist[i].s)->SetEntry(vlist[i].n,vlist[i].v,CEM_VIRTUAL);
|
||||
}
|
||||
if (cfgfile)
|
||||
{
|
||||
cfgdb.SaveFile(cfgfile);
|
||||
fclose(cfgfile);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string cfgLoadStr(const std::string& section, const std::string& key, const std::string& def)
|
||||
//Implementations of the interface :)
|
||||
//Section must be set
|
||||
//If key is 0 , it looks for the section
|
||||
//0 : not found
|
||||
//1 : found section , key was 0
|
||||
//2 : found section & key
|
||||
s32 cfgExists(const wchar * Section, const wchar * Key)
|
||||
{
|
||||
return cfgdb.get(section, key, def);
|
||||
if (Section==0)
|
||||
return -1;
|
||||
//return cfgRead(Section,Key,0);
|
||||
ConfigSection*cs= cfgdb.FindSection(Section);
|
||||
if (cs == 0)
|
||||
return 0;
|
||||
|
||||
if (Key==0)
|
||||
return 1;
|
||||
|
||||
ConfigEntry* ce=cs->FindEntry(Key);
|
||||
if (ce!=0)
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
void cfgLoadStr(const wchar * Section, const wchar * Key, wchar * Return,const wchar* Default)
|
||||
{
|
||||
verify(Section!=0 && strlen(Section)!=0);
|
||||
verify(Key!=0 && strlen(Key)!=0);
|
||||
verify(Return!=0);
|
||||
if (Default==0)
|
||||
Default="";
|
||||
ConfigSection* cs= cfgdb.GetEntry(Section);
|
||||
ConfigEntry* ce=cs->FindEntry(Key);
|
||||
if (!ce)
|
||||
{
|
||||
cs->SetEntry(Key,Default,CEM_SAVE);
|
||||
strcpy(Return,Default);
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(Return,ce->GetValue().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void cfgSaveInt(const std::string& section, const std::string& key, s32 value)
|
||||
//These are helpers , mainly :)
|
||||
s32 cfgLoadInt(const wchar * Section, const wchar * Key,s32 Default)
|
||||
{
|
||||
cfgSaveStr(section, key, std::to_string(value));
|
||||
wchar temp_d[30];
|
||||
wchar temp_o[30];
|
||||
sprintf(temp_d,"%d",Default);
|
||||
cfgLoadStr(Section,Key,temp_o,temp_d);
|
||||
return atoi(temp_o);
|
||||
}
|
||||
|
||||
s32 cfgLoadInt(const std::string& section, const std::string& key, s32 def)
|
||||
void cfgSaveInt(const wchar * Section, const wchar * Key, s32 Int)
|
||||
{
|
||||
return cfgdb.get_int(section, key, def);
|
||||
wchar tmp[32];
|
||||
sprintf(tmp,"%d", Int);
|
||||
cfgSaveStr(Section,Key,tmp);
|
||||
}
|
||||
|
||||
void cfgSaveBool(const std::string& section, const std::string& key, bool value)
|
||||
void cfgSetVitual(const wchar * Section, const wchar * Key, const wchar * String)
|
||||
{
|
||||
cfgSaveStr(section, key, value ? "yes" : "no");
|
||||
}
|
||||
|
||||
bool cfgLoadBool(const std::string& section, const std::string& key, bool def)
|
||||
{
|
||||
return cfgdb.get_bool(section, key, def);
|
||||
}
|
||||
|
||||
void cfgSetVirtual(const std::string& section, const std::string& key, const std::string& value)
|
||||
{
|
||||
cfgdb.set(section, key, value, true);
|
||||
}
|
||||
|
||||
bool cfgIsVirtual(const std::string& section, const std::string& key)
|
||||
{
|
||||
return cfgdb.is_virtual(section, key);
|
||||
}
|
||||
|
||||
bool cfgHasSection(const std::string& section)
|
||||
{
|
||||
return cfgdb.has_section(section);
|
||||
}
|
||||
|
||||
void cfgDeleteSection(const std::string& section)
|
||||
{
|
||||
cfgdb.delete_section(section);
|
||||
}
|
||||
|
||||
void cfgSetAutoSave(bool autoSave)
|
||||
{
|
||||
::autoSave = autoSave;
|
||||
if (autoSave)
|
||||
saveConfigFile();
|
||||
}
|
||||
vlist.push_back(vitem(Section,Key,String));
|
||||
//cfgdb.GetEntry(Section,CEM_VIRTUAL)->SetEntry(Key,String,CEM_VIRTUAL);
|
||||
}
|
||||
+14
-13
@@ -2,18 +2,19 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
/*
|
||||
** cfg* prototypes, if you pass NULL to a cfgSave* it will wipe out the section
|
||||
** } if you pass it to lpKey it will wipe out that particular entry
|
||||
** } if you add write to something it will create it if its not present
|
||||
** } ** Strings passed to LoadStr should be MAX_PATH in size ! **
|
||||
*/
|
||||
|
||||
bool cfgOpen();
|
||||
s32 cfgLoadInt(const std::string& section, const std::string& key, s32 def);
|
||||
void cfgSaveInt(const std::string& section, const std::string& key, s32 value);
|
||||
std::string cfgLoadStr(const std::string& section, const std::string& key, const std::string& def);
|
||||
void cfgSaveStr(const std::string& section, const std::string& key, const std::string& value);
|
||||
void cfgSaveBool(const std::string& section, const std::string& key, bool value);
|
||||
bool cfgLoadBool(const std::string& section, const std::string& key, bool def);
|
||||
void cfgSetVirtual(const std::string& section, const std::string& key, const std::string& value);
|
||||
bool cfgIsVirtual(const std::string& section, const std::string& key);
|
||||
s32 cfgLoadInt(const wchar * lpSection, const wchar * lpKey,s32 Default);
|
||||
void cfgSaveInt(const wchar * lpSection, const wchar * lpKey, s32 Int);
|
||||
void cfgLoadStr(const wchar * lpSection, const wchar * lpKey, wchar * lpReturn,const wchar* lpDefault);
|
||||
void cfgSaveStr(const wchar * lpSection, const wchar * lpKey, const wchar * lpString);
|
||||
s32 cfgExists(const wchar * Section, const wchar * Key);
|
||||
void cfgSetVitual(const wchar * lpSection, const wchar * lpKey, const wchar * lpString);
|
||||
|
||||
bool ParseCommandLine(int argc, char *argv[]);
|
||||
|
||||
void cfgSetAutoSave(bool autoSave);
|
||||
bool cfgHasSection(const std::string& section);
|
||||
void cfgDeleteSection(const std::string& section);
|
||||
bool ParseCommandLine(int argc,wchar* argv[]);
|
||||
+33
-61
@@ -5,13 +5,13 @@
|
||||
Nothing too interesting here, really
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <cctype>
|
||||
#include <cstring>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "cfg/cfg.h"
|
||||
|
||||
char* trim_ws(char* str)
|
||||
wchar* trim_ws(wchar* str)
|
||||
{
|
||||
if (str==0 || strlen(str)==0)
|
||||
return 0;
|
||||
@@ -42,48 +42,47 @@ char* trim_ws(char* str)
|
||||
return str;
|
||||
}
|
||||
|
||||
int setconfig(char** arg,int cl)
|
||||
int setconfig(wchar** arg,int cl)
|
||||
{
|
||||
int rv=0;
|
||||
for(;;)
|
||||
{
|
||||
if (cl<1)
|
||||
{
|
||||
WARN_LOG(COMMON, "-config : invalid number of parameters, format is section:key=value");
|
||||
printf("-config : invalid number of parameters, format is section:key=value\n");
|
||||
return rv;
|
||||
}
|
||||
char* sep=strstr(arg[1],":");
|
||||
wchar* sep=strstr(arg[1],":");
|
||||
if (sep==0)
|
||||
{
|
||||
WARN_LOG(COMMON, "-config : invalid parameter %s, format is section:key=value", arg[1]);
|
||||
printf("-config : invalid parameter %s, format is section:key=value\n",arg[1]);
|
||||
return rv;
|
||||
}
|
||||
char* value=strstr(sep+1,"=");
|
||||
wchar* value=strstr(sep+1,"=");
|
||||
if (value==0)
|
||||
{
|
||||
WARN_LOG(COMMON, "-config : invalid parameter %s, format is section:key=value", arg[1]);
|
||||
printf("-config : invalid parameter %s, format is section:key=value\n",arg[1]);
|
||||
return rv;
|
||||
}
|
||||
|
||||
*sep++=0;
|
||||
*value++=0;
|
||||
|
||||
char* sect=trim_ws(arg[1]);
|
||||
char* key=trim_ws(sep);
|
||||
wchar* sect=trim_ws(arg[1]);
|
||||
wchar* key=trim_ws(sep);
|
||||
value=trim_ws(value);
|
||||
|
||||
if (sect==0 || key==0)
|
||||
{
|
||||
WARN_LOG(COMMON, "-config : invalid parameter, format is section:key=value");
|
||||
printf("-config : invalid parameter, format is section:key=value\n");
|
||||
return rv;
|
||||
}
|
||||
|
||||
const char* constval = value;
|
||||
if (constval==0)
|
||||
constval="";
|
||||
INFO_LOG(COMMON, "Virtual cfg %s:%s=%s", sect, key, value);
|
||||
if (value==0)
|
||||
value="";
|
||||
printf("Virtual cfg %s:%s=%s\n",sect,key,value);
|
||||
|
||||
cfgSetVirtual(sect,key,value);
|
||||
cfgSetVitual(sect,key,value);
|
||||
rv++;
|
||||
|
||||
if (cl>=3 && stricmp(arg[2],",")==0)
|
||||
@@ -99,68 +98,41 @@ int setconfig(char** arg,int cl)
|
||||
return rv;
|
||||
}
|
||||
|
||||
static int showhelp()
|
||||
int showhelp(wchar** arg,int cl)
|
||||
{
|
||||
printf("Usage: flycast [OPTION]... [CONTENT]\n\n");
|
||||
printf("Options:\n");
|
||||
printf("-config section:key=value add a virtual config value;\n");
|
||||
printf(" virtual config values won't be saved to the .cfg file\n");
|
||||
printf(" unless a different value is written to them\n");
|
||||
printf("-help display this help\n");
|
||||
printf("Available commands :\n");
|
||||
|
||||
printf("-config section:key=value [, ..]: add a virtual config value\n Virtual config values wont be saved to the .cfg file\n unless a different value is writen to em\nNote :\n You can specify many settings in the xx:yy=zz , gg:hh=jj , ...\n format.The spaces betwen the values and ',' are needed.");
|
||||
|
||||
exit(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ParseCommandLine(int argc,char* argv[])
|
||||
bool ParseCommandLine(int argc,wchar* argv[])
|
||||
{
|
||||
settings.imgread.ImagePath[0] = '\0';
|
||||
|
||||
int cl=argc-2;
|
||||
char** arg=argv+1;
|
||||
wchar** arg=argv+1;
|
||||
while(cl>=0)
|
||||
{
|
||||
if (stricmp(*arg,"-help")==0 || stricmp(*arg,"--help")==0)
|
||||
if (stricmp(*arg,"-help")==0)
|
||||
{
|
||||
showhelp();
|
||||
int as=showhelp(arg,cl);
|
||||
cl-=as;
|
||||
arg+=as;
|
||||
return true;
|
||||
}
|
||||
else if (stricmp(*arg,"-config")==0 || stricmp(*arg,"--config")==0)
|
||||
else if (stricmp(*arg,"-config")==0)
|
||||
{
|
||||
int as=setconfig(arg,cl);
|
||||
cl-=as;
|
||||
arg+=as;
|
||||
}
|
||||
#if defined(__APPLE__)
|
||||
else if (!strncmp(*arg, "-NSDocumentRevisions", 20))
|
||||
{
|
||||
arg++;
|
||||
cl--;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
char* extension = strrchr(*arg, '.');
|
||||
|
||||
if (extension
|
||||
&& (stricmp(extension, ".cdi") == 0 || stricmp(extension, ".chd") == 0
|
||||
|| stricmp(extension, ".gdi") == 0 || stricmp(extension, ".cue") == 0))
|
||||
{
|
||||
INFO_LOG(COMMON, "Using '%s' as cd image", *arg);
|
||||
strcpy(settings.imgread.ImagePath, *arg);
|
||||
}
|
||||
else if (extension && stricmp(extension, ".elf") == 0)
|
||||
{
|
||||
INFO_LOG(COMMON, "Using '%s' as reios elf file", *arg);
|
||||
cfgSetVirtual("config", "bios.UseReios", "yes");
|
||||
strcpy(settings.imgread.ImagePath, *arg);
|
||||
}
|
||||
else
|
||||
{
|
||||
INFO_LOG(COMMON, "Using '%s' as rom", *arg);
|
||||
strcpy(settings.imgread.ImagePath, *arg);
|
||||
}
|
||||
printf("wtf %s is suposed to do ?\n",*arg);
|
||||
}
|
||||
arg++;
|
||||
cl--;
|
||||
}
|
||||
printf("\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,312 +0,0 @@
|
||||
#include "ini.h"
|
||||
#include "types.h"
|
||||
#include <sstream>
|
||||
|
||||
char* trim_ws(char* str);
|
||||
|
||||
namespace emucfg {
|
||||
|
||||
/* ConfigEntry */
|
||||
|
||||
const std::string& ConfigEntry::get_string() const
|
||||
{
|
||||
return this->value;
|
||||
}
|
||||
|
||||
int ConfigEntry::get_int()
|
||||
{
|
||||
if (strstr(this->value.c_str(), "0x") != NULL)
|
||||
{
|
||||
return (int)strtoul(this->value.c_str(), NULL, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
return atoi(this->value.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
bool ConfigEntry::get_bool()
|
||||
{
|
||||
if (stricmp(this->value.c_str(), "yes") == 0 ||
|
||||
stricmp(this->value.c_str(), "true") == 0 ||
|
||||
stricmp(this->value.c_str(), "on") == 0 ||
|
||||
stricmp(this->value.c_str(), "1") == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* ConfigSection */
|
||||
|
||||
bool ConfigSection::has_entry(const std::string& name)
|
||||
{
|
||||
return (this->entries.count(name) == 1);
|
||||
}
|
||||
|
||||
ConfigEntry* ConfigSection::get_entry(const std::string& name)
|
||||
{
|
||||
if(this->has_entry(name))
|
||||
{
|
||||
return &this->entries[name];
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ConfigSection::set(const std::string& name, const std::string& value)
|
||||
{
|
||||
ConfigEntry new_entry = { value };
|
||||
this->entries[name] = new_entry;
|
||||
}
|
||||
|
||||
void ConfigSection::delete_entry(const std::string& name)
|
||||
{
|
||||
this->entries.erase(name);
|
||||
}
|
||||
|
||||
/* ConfigFile */
|
||||
|
||||
ConfigSection* ConfigFile::add_section(const std::string& name, bool is_virtual)
|
||||
{
|
||||
ConfigSection new_section;
|
||||
if (is_virtual)
|
||||
{
|
||||
this->virtual_sections.insert(std::make_pair(name, new_section));
|
||||
return &this->virtual_sections[name];
|
||||
}
|
||||
this->sections.insert(std::make_pair(name, new_section));
|
||||
return &this->sections[name];
|
||||
}
|
||||
|
||||
bool ConfigFile::has_section(const std::string& name)
|
||||
{
|
||||
return (this->virtual_sections.count(name) == 1 || this->sections.count(name) == 1);
|
||||
}
|
||||
|
||||
bool ConfigFile::has_entry(const std::string& section_name, const std::string& entry_name)
|
||||
{
|
||||
ConfigSection* section = this->get_section(section_name, true);
|
||||
if ((section != NULL) && section->has_entry(entry_name))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
section = this->get_section(section_name, false);
|
||||
return ((section != NULL) && section->has_entry(entry_name));
|
||||
}
|
||||
|
||||
ConfigSection* ConfigFile::get_section(const std::string& name, bool is_virtual)
|
||||
{
|
||||
if(is_virtual)
|
||||
{
|
||||
if (this->virtual_sections.count(name) == 1)
|
||||
{
|
||||
return &this->virtual_sections[name];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this->sections.count(name) == 1)
|
||||
{
|
||||
return &this->sections[name];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ConfigEntry* ConfigFile::get_entry(const std::string& section_name, const std::string& entry_name)
|
||||
{
|
||||
ConfigSection* section = this->get_section(section_name, true);
|
||||
if(section != NULL && section->has_entry(entry_name))
|
||||
{
|
||||
return section->get_entry(entry_name);
|
||||
}
|
||||
|
||||
section = this->get_section(section_name, false);
|
||||
if(section != NULL)
|
||||
{
|
||||
return section->get_entry(entry_name);
|
||||
}
|
||||
return NULL;
|
||||
|
||||
}
|
||||
|
||||
std::string ConfigFile::get(const std::string& section_name, const std::string& entry_name, const std::string& default_value)
|
||||
{
|
||||
ConfigEntry* entry = this->get_entry(section_name, entry_name);
|
||||
if (entry == NULL)
|
||||
{
|
||||
return default_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
return entry->get_string();
|
||||
}
|
||||
}
|
||||
|
||||
int ConfigFile::get_int(const std::string& section_name, const std::string& entry_name, int default_value)
|
||||
{
|
||||
ConfigEntry* entry = this->get_entry(section_name, entry_name);
|
||||
if (entry == NULL)
|
||||
{
|
||||
return default_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
return entry->get_int();
|
||||
}
|
||||
}
|
||||
|
||||
bool ConfigFile::get_bool(const std::string& section_name, const std::string& entry_name, bool default_value)
|
||||
{
|
||||
ConfigEntry* entry = this->get_entry(section_name, entry_name);
|
||||
if (entry == NULL)
|
||||
{
|
||||
return default_value;
|
||||
}
|
||||
else
|
||||
{
|
||||
return entry->get_bool();
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigFile::set(const std::string& section_name, const std::string& entry_name, const std::string& value, bool is_virtual)
|
||||
{
|
||||
ConfigSection* section = this->get_section(section_name, is_virtual);
|
||||
if(section == NULL)
|
||||
{
|
||||
section = this->add_section(section_name, is_virtual);
|
||||
}
|
||||
section->set(entry_name, value);
|
||||
}
|
||||
|
||||
void ConfigFile::set_int(const std::string& section_name, const std::string& entry_name, int value, bool is_virtual)
|
||||
{
|
||||
std::stringstream str_value;
|
||||
str_value << value;
|
||||
this->set(section_name, entry_name, str_value.str(), is_virtual);
|
||||
}
|
||||
|
||||
void ConfigFile::set_bool(const std::string& section_name, const std::string& entry_name, bool value, bool is_virtual)
|
||||
{
|
||||
std::string str_value = (value ? "yes" : "no");
|
||||
this->set(section_name, entry_name, str_value, is_virtual);
|
||||
}
|
||||
|
||||
void ConfigFile::parse(FILE* file)
|
||||
{
|
||||
if(file == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
char line[512];
|
||||
char current_section[512] = { '\0' };
|
||||
int cline = 0;
|
||||
while(file && !feof(file))
|
||||
{
|
||||
if (std::fgets(line, 512, file) == NULL || std::feof(file))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
cline++;
|
||||
|
||||
if (strlen(line) < 3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (line[strlen(line)-1] == '\r' ||
|
||||
line[strlen(line)-1] == '\n')
|
||||
{
|
||||
line[strlen(line)-1] = '\0';
|
||||
}
|
||||
|
||||
char* tl = trim_ws(line);
|
||||
|
||||
if (tl[0] == '[' && tl[strlen(tl)-1] == ']')
|
||||
{
|
||||
tl[strlen(tl)-1] = '\0';
|
||||
|
||||
// FIXME: Data loss if buffer is too small
|
||||
strncpy(current_section, tl+1, sizeof(current_section));
|
||||
current_section[sizeof(current_section) - 1] = '\0';
|
||||
|
||||
trim_ws(current_section);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen(current_section) == 0)
|
||||
{
|
||||
continue; //no open section
|
||||
}
|
||||
|
||||
char* separator = strstr(tl, "=");
|
||||
|
||||
if (!separator)
|
||||
{
|
||||
WARN_LOG(COMMON, "Malformed entry on config - ignoring @ %d(%s)", cline, tl);
|
||||
continue;
|
||||
}
|
||||
|
||||
*separator = '\0';
|
||||
|
||||
char* name = trim_ws(tl);
|
||||
char* value = trim_ws(separator + 1);
|
||||
if (name == NULL || value == NULL)
|
||||
{
|
||||
//printf("Malformed entry on config - ignoring @ %d(%s)\n",cline, tl);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->set(std::string(current_section), std::string(name), std::string(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigFile::save(FILE* file)
|
||||
{
|
||||
for (const auto& section_it : this->sections)
|
||||
{
|
||||
const std::string& section_name = section_it.first;
|
||||
const ConfigSection& section = section_it.second;
|
||||
|
||||
std::fprintf(file, "[%s]\n", section_name.c_str());
|
||||
|
||||
for (const auto& entry_it : section.entries)
|
||||
{
|
||||
const std::string& entry_name = entry_it.first;
|
||||
const ConfigEntry& entry = entry_it.second;
|
||||
std::fprintf(file, "%s = %s\n", entry_name.c_str(), entry.get_string().c_str());
|
||||
}
|
||||
|
||||
std::fputs("\n", file);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigFile::delete_section(const std::string& section_name) {
|
||||
sections.erase(section_name);
|
||||
virtual_sections.erase(section_name);
|
||||
}
|
||||
|
||||
void ConfigFile::delete_entry(const std::string& section_name, const std::string& entry_name)
|
||||
{
|
||||
ConfigSection *section = get_section(section_name, false);
|
||||
if (section != NULL)
|
||||
section->delete_entry(entry_name);
|
||||
}
|
||||
|
||||
bool ConfigFile::is_virtual(const std::string& section_name, const std::string& entry_name)
|
||||
{
|
||||
ConfigSection *section = get_section(section_name, true);
|
||||
if (section == nullptr)
|
||||
return false;
|
||||
return section->has_entry(entry_name);
|
||||
}
|
||||
|
||||
} // namespace emucfg
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdio>
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace emucfg {
|
||||
|
||||
struct ConfigEntry {
|
||||
std::string value;
|
||||
const std::string& get_string() const;
|
||||
int get_int();
|
||||
bool get_bool();
|
||||
};
|
||||
|
||||
struct ConfigSection {
|
||||
std::map<std::string, ConfigEntry> entries;
|
||||
bool has_entry(const std::string& name);
|
||||
void set(const std::string& name, const std::string& value);
|
||||
void delete_entry(const std::string& name);
|
||||
ConfigEntry* get_entry(const std::string& name);
|
||||
};
|
||||
|
||||
struct ConfigFile {
|
||||
private:
|
||||
std::map<std::string, ConfigSection> sections;
|
||||
std::map<std::string, ConfigSection> virtual_sections;
|
||||
ConfigSection* add_section(const std::string& name, bool is_virtual);
|
||||
ConfigSection* get_section(const std::string& name, bool is_virtual);
|
||||
ConfigEntry* get_entry(const std::string& section_name, const std::string& entry_name);
|
||||
|
||||
|
||||
public:
|
||||
bool has_section(const std::string& name);
|
||||
bool has_entry(const std::string& section_name, const std::string& entry_name);
|
||||
bool is_virtual(const std::string& section_name, const std::string& entry_name);
|
||||
|
||||
void parse(FILE* file);
|
||||
void save(FILE* file);
|
||||
|
||||
/* getting values */
|
||||
std::string get(const std::string& section_name, const std::string& entry_name, const std::string& default_value = "");
|
||||
int get_int(const std::string& section_name, const std::string& entry_name, int default_value = 0);
|
||||
bool get_bool(const std::string& section_name, const std::string& entry_name, bool default_value = false);
|
||||
/* setting values */
|
||||
void set(const std::string& section_name, const std::string& entry_name, const std::string& value, bool is_virtual = false);
|
||||
void set_int(const std::string& section_name, const std::string& entry_name, int value, bool is_virtual = false);
|
||||
void set_bool(const std::string& section_name, const std::string& entry_name, bool value, bool is_virtual = false);
|
||||
|
||||
void delete_section(const std::string& section_name);
|
||||
void delete_entry(const std::string& section_name, const std::string& entry_name);
|
||||
};
|
||||
|
||||
} // namespace emucfg
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "option.h"
|
||||
|
||||
namespace config {
|
||||
|
||||
// Dynarec
|
||||
|
||||
Option<bool> DynarecEnabled("Dynarec.Enabled", true);
|
||||
Option<bool> DynarecIdleSkip("Dynarec.idleskip", true);
|
||||
Option<bool> DynarecSafeMode("Dynarec.safe-mode");
|
||||
|
||||
// General
|
||||
|
||||
Option<int> Cable("Dreamcast.Cable", 3); // TV Composite
|
||||
Option<int> Region("Dreamcast.Region", 1); // USA
|
||||
Option<int> Broadcast("Dreamcast.Broadcast", 0); // NTSC
|
||||
Option<int> Language("Dreamcast.Language", 1); // English
|
||||
Option<bool> FullMMU("Dreamcast.FullMMU");
|
||||
Option<bool> ForceWindowsCE("Dreamcast.ForceWindowsCE");
|
||||
Option<bool> AutoLoadState("Dreamcast.AutoLoadState");
|
||||
Option<bool> AutoSaveState("Dreamcast.AutoSaveState");
|
||||
Option<int> SavestateSlot("Dreamcast.SavestateSlot");
|
||||
|
||||
// Sound
|
||||
|
||||
Option<bool> DSPEnabled("aica.DSPEnabled", false);
|
||||
Option<bool> DisableSound("aica.NoSound");
|
||||
#if HOST_CPU == CPU_ARM
|
||||
Option<int> AudioBufferSize("aica.BufferSize", 5644); // 128 ms
|
||||
#else
|
||||
Option<int> AudioBufferSize("aica.BufferSize", 2822); // 64 ms
|
||||
#endif
|
||||
Option<bool> AutoLatency("aica.AutoLatency",
|
||||
#ifdef __ANDROID__
|
||||
true
|
||||
#else
|
||||
false
|
||||
#endif
|
||||
);
|
||||
|
||||
OptionString AudioBackend("backend", "auto", "audio");
|
||||
AudioVolumeOption AudioVolume;
|
||||
|
||||
// Rendering
|
||||
|
||||
RendererOption RendererType;
|
||||
Option<bool> UseMipmaps("rend.UseMipmaps", true);
|
||||
Option<bool> Widescreen("rend.WideScreen");
|
||||
Option<bool> SuperWidescreen("rend.SuperWideScreen");
|
||||
Option<bool> ShowFPS("rend.ShowFPS");
|
||||
Option<bool> RenderToTextureBuffer("rend.RenderToTextureBuffer");
|
||||
Option<bool> TranslucentPolygonDepthMask("rend.TranslucentPolygonDepthMask");
|
||||
Option<bool> ModifierVolumes("rend.ModifierVolumes", true);
|
||||
Option<int> TextureUpscale("rend.TextureUpscale", 1);
|
||||
Option<int> MaxFilteredTextureSize("rend.MaxFilteredTextureSize", 256);
|
||||
Option<float> ExtraDepthScale("rend.ExtraDepthScale", 1.f);
|
||||
Option<bool> CustomTextures("rend.CustomTextures");
|
||||
Option<bool> DumpTextures("rend.DumpTextures");
|
||||
Option<int> ScreenStretching("rend.ScreenStretching", 100);
|
||||
Option<bool> Fog("rend.Fog", true);
|
||||
Option<bool> FloatVMUs("rend.FloatVMUs");
|
||||
Option<bool> Rotate90("rend.Rotate90");
|
||||
Option<bool> PerStripSorting("rend.PerStripSorting");
|
||||
Option<bool> DelayFrameSwapping("rend.DelayFrameSwapping", true);
|
||||
Option<bool> WidescreenGameHacks("rend.WidescreenGameHacks");
|
||||
std::array<Option<int>, 4> CrosshairColor {
|
||||
Option<int>("rend.CrossHairColor1"),
|
||||
Option<int>("rend.CrossHairColor2"),
|
||||
Option<int>("rend.CrossHairColor3"),
|
||||
Option<int>("rend.CrossHairColor4"),
|
||||
};
|
||||
Option<int> SkipFrame("ta.skip");
|
||||
Option<int> MaxThreads("pvr.MaxThreads", 3);
|
||||
Option<int> AutoSkipFrame("pvr.AutoSkipFrame", 0);
|
||||
Option<int> RenderResolution("rend.Resolution", 480);
|
||||
Option<bool> VSync("rend.vsync", true);
|
||||
|
||||
// Misc
|
||||
|
||||
Option<bool> SerialConsole("Debug.SerialConsoleEnabled");
|
||||
Option<bool> SerialPTY("Debug.SerialPTY");
|
||||
Option<bool> UseReios("UseReios");
|
||||
|
||||
Option<bool> OpenGlChecks("OpenGlChecks", false, "validate");
|
||||
|
||||
Option<std::vector<std::string>, false> ContentPath("Dreamcast.ContentPath");
|
||||
Option<bool, false> HideLegacyNaomiRoms("Dreamcast.HideLegacyNaomiRoms", true);
|
||||
|
||||
// Network
|
||||
|
||||
Option<bool> NetworkEnable("Enable", false, "network");
|
||||
Option<bool> ActAsServer("ActAsServer", false, "network");
|
||||
OptionString DNS("DNS", "46.101.91.123", "network");
|
||||
OptionString NetworkServer("server", "", "network");
|
||||
Option<bool> EmulateBBA("EmulateBBA", false, "network");
|
||||
|
||||
#ifdef SUPPORT_DISPMANX
|
||||
Option<bool> DispmanxMaintainAspect("maintain_aspect", true, "dispmanx");
|
||||
#endif
|
||||
|
||||
#ifdef USE_OMX
|
||||
Option<int> OmxAudioLatency("audio_latency", 100, "omx");
|
||||
Option<bool> OmxAudioHdmi("audio_hdmi", true, "omx");
|
||||
#endif
|
||||
|
||||
// Maple
|
||||
|
||||
Option<int> MouseSensitivity("MouseSensitivity", 100, "input");
|
||||
Option<int> VirtualGamepadVibration("VirtualGamepadVibration", 20, "input");
|
||||
|
||||
std::array<Option<MapleDeviceType>, 4> MapleMainDevices {
|
||||
Option<MapleDeviceType>("device1", MDT_SegaController, "input"),
|
||||
Option<MapleDeviceType>("device2", MDT_None, "input"),
|
||||
Option<MapleDeviceType>("device3", MDT_None, "input"),
|
||||
Option<MapleDeviceType>("device4", MDT_None, "input"),
|
||||
};
|
||||
std::array<std::array<Option<MapleDeviceType>, 2>, 4> MapleExpansionDevices {
|
||||
Option<MapleDeviceType>("device1.1", MDT_SegaVMU, "input"),
|
||||
Option<MapleDeviceType>("device1.2", MDT_SegaVMU, "input"),
|
||||
|
||||
Option<MapleDeviceType>("device2.1", MDT_None, "input"),
|
||||
Option<MapleDeviceType>("device2.2", MDT_None, "input"),
|
||||
|
||||
Option<MapleDeviceType>("device3.1", MDT_None, "input"),
|
||||
Option<MapleDeviceType>("device3.2", MDT_None, "input"),
|
||||
|
||||
Option<MapleDeviceType>("device4.1", MDT_None, "input"),
|
||||
Option<MapleDeviceType>("device4.2", MDT_None, "input"),
|
||||
};
|
||||
#ifdef _WIN32
|
||||
Option<bool> UseRawInput("RawInput", false, "input");
|
||||
#endif
|
||||
|
||||
} // namespace config
|
||||
@@ -1,451 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <array>
|
||||
#include <cmath>
|
||||
#include "cfg.h"
|
||||
#include "hw/maple/maple_cfg.h"
|
||||
|
||||
namespace config {
|
||||
|
||||
class BaseOption {
|
||||
public:
|
||||
virtual ~BaseOption() = default;
|
||||
virtual void save() const = 0;
|
||||
virtual void load() = 0;
|
||||
virtual void reset() = 0;
|
||||
};
|
||||
|
||||
class Settings {
|
||||
public:
|
||||
void reset() {
|
||||
for (const auto& o : options)
|
||||
o->reset();
|
||||
gameId.clear();
|
||||
perGameConfig = false;
|
||||
}
|
||||
|
||||
void load(bool gameSpecific) {
|
||||
if (gameSpecific)
|
||||
{
|
||||
if (gameId.empty())
|
||||
return;
|
||||
if (!cfgHasSection(gameId))
|
||||
return;
|
||||
perGameConfig = true;
|
||||
}
|
||||
for (const auto& o : options)
|
||||
o->load();
|
||||
}
|
||||
|
||||
void save() {
|
||||
cfgSetAutoSave(false);
|
||||
for (const auto& o : options)
|
||||
o->save();
|
||||
cfgSetAutoSave(true);
|
||||
}
|
||||
|
||||
const std::string& getGameId() const {
|
||||
return gameId;
|
||||
}
|
||||
|
||||
void setGameId(const std::string& gameId) {
|
||||
this->gameId = gameId;
|
||||
}
|
||||
|
||||
bool hasPerGameConfig() const {
|
||||
return perGameConfig;
|
||||
}
|
||||
void setPerGameConfig(bool perGameConfig) {
|
||||
this->perGameConfig = perGameConfig;
|
||||
if (!perGameConfig) {
|
||||
if (!gameId.empty())
|
||||
cfgDeleteSection(gameId);
|
||||
reset();
|
||||
}
|
||||
}
|
||||
|
||||
static Settings& instance() {
|
||||
static Settings *_instance = new Settings();
|
||||
return *_instance;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<BaseOption *> options;
|
||||
std::string gameId;
|
||||
bool perGameConfig = false;
|
||||
|
||||
template<typename T, bool PerGameOption>
|
||||
friend class Option;
|
||||
};
|
||||
|
||||
// Missing in C++11
|
||||
template <bool B, typename T = void>
|
||||
using enable_if_t = typename std::enable_if<B, T>::type;
|
||||
|
||||
template<typename T, bool PerGameOption = true>
|
||||
class Option : public BaseOption {
|
||||
public:
|
||||
Option(const std::string& name, T defaultValue = T(), const std::string& section = "config")
|
||||
: section(section), name(name), value(defaultValue), defaultValue(defaultValue),
|
||||
settings(Settings::instance())
|
||||
{
|
||||
settings.options.push_back(this);
|
||||
}
|
||||
|
||||
void reset() override {
|
||||
set(defaultValue);
|
||||
overridden = false;
|
||||
}
|
||||
|
||||
void load() override {
|
||||
if (PerGameOption && settings.hasPerGameConfig())
|
||||
set(doLoad(settings.getGameId(), section + "." + name));
|
||||
else
|
||||
{
|
||||
set(doLoad(section, name));
|
||||
if (cfgIsVirtual(section, name))
|
||||
override(value);
|
||||
}
|
||||
}
|
||||
|
||||
void save() const override
|
||||
{
|
||||
if (overridden) {
|
||||
if (value == overriddenDefault)
|
||||
return;
|
||||
if (!settings.hasPerGameConfig())
|
||||
// overridden options can only be saved in per-game settings
|
||||
return;
|
||||
}
|
||||
else if (PerGameOption && settings.hasPerGameConfig())
|
||||
{
|
||||
if (value == doLoad(section, name))
|
||||
return;
|
||||
}
|
||||
if (PerGameOption && settings.hasPerGameConfig())
|
||||
doSave(settings.getGameId(), section + "." + name);
|
||||
else
|
||||
doSave(section, name);
|
||||
}
|
||||
|
||||
T& get() { return value; }
|
||||
void set(T v) { value = v; }
|
||||
|
||||
void override(T v) {
|
||||
verify(PerGameOption);
|
||||
overriddenDefault = v;
|
||||
overridden = true;
|
||||
value = v;
|
||||
}
|
||||
bool isReadOnly() const {
|
||||
return overridden && !settings.hasPerGameConfig();
|
||||
}
|
||||
|
||||
explicit operator T() const { return value; }
|
||||
operator T&() { return value; }
|
||||
T& operator=(const T& v) { set(v); return value; }
|
||||
|
||||
protected:
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<U, bool>::value, T>
|
||||
doLoad(const std::string& section, const std::string& name) const
|
||||
{
|
||||
return cfgLoadBool(section, name, value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<(std::is_integral<U>::value || std::is_enum<U>::value)
|
||||
&& !std::is_same<U, bool>::value, T>
|
||||
doLoad(const std::string& section, const std::string& name) const
|
||||
{
|
||||
return (T)cfgLoadInt(section, name, (int)value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<U, std::string>::value, T>
|
||||
doLoad(const std::string& section, const std::string& name) const
|
||||
{
|
||||
return cfgLoadStr(section, name, value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<float, U>::value, T>
|
||||
doLoad(const std::string& section, const std::string& name) const
|
||||
{
|
||||
std::string strValue = cfgLoadStr(section, name, "");
|
||||
if (strValue.empty())
|
||||
return value;
|
||||
else
|
||||
return atof(strValue.c_str());
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<std::vector<std::string>, U>::value, T>
|
||||
doLoad(const std::string& section, const std::string& name) const
|
||||
{
|
||||
std::string paths = cfgLoadStr(section, name, "");
|
||||
if (paths.empty())
|
||||
return value;
|
||||
std::string::size_type start = 0;
|
||||
std::vector<std::string> newValue;
|
||||
while (true)
|
||||
{
|
||||
std::string::size_type end = paths.find(';', start);
|
||||
if (end == std::string::npos)
|
||||
end = paths.size();
|
||||
if (start != end)
|
||||
newValue.push_back(paths.substr(start, end - start));
|
||||
if (end == paths.size())
|
||||
break;
|
||||
start = end + 1;
|
||||
}
|
||||
return newValue;
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<U, bool>::value>
|
||||
doSave(const std::string& section, const std::string& name) const
|
||||
{
|
||||
cfgSaveBool(section, name, value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<(std::is_integral<U>::value || std::is_enum<U>::value)
|
||||
&& !std::is_same<U, bool>::value>
|
||||
doSave(const std::string& section, const std::string& name) const
|
||||
{
|
||||
cfgSaveInt(section, name, (int)value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<U, std::string>::value>
|
||||
doSave(const std::string& section, const std::string& name) const
|
||||
{
|
||||
cfgSaveStr(section, name, value);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<float, U>::value>
|
||||
doSave(const std::string& section, const std::string& name) const
|
||||
{
|
||||
char buf[64];
|
||||
snprintf(buf, sizeof(buf), "%f", value);
|
||||
cfgSaveStr(section, name, buf);
|
||||
}
|
||||
|
||||
template <typename U = T>
|
||||
enable_if_t<std::is_same<std::vector<std::string>, U>::value>
|
||||
doSave(const std::string& section, const std::string& name) const
|
||||
{
|
||||
std::string s;
|
||||
for (auto& v : value)
|
||||
{
|
||||
if (s.empty())
|
||||
s = v;
|
||||
else
|
||||
s += ";" + v;
|
||||
}
|
||||
cfgSaveStr(section, name, s);
|
||||
}
|
||||
|
||||
std::string section;
|
||||
std::string name;
|
||||
T value;
|
||||
T defaultValue;
|
||||
T overriddenDefault = T();
|
||||
bool overridden = false;
|
||||
Settings& settings;
|
||||
};
|
||||
|
||||
using OptionString = Option<std::string>;
|
||||
|
||||
// Dynarec
|
||||
|
||||
extern Option<bool> DynarecEnabled;
|
||||
extern Option<bool> DynarecIdleSkip;
|
||||
extern Option<bool> DynarecSafeMode;
|
||||
|
||||
// General
|
||||
|
||||
extern Option<int> Cable; // 0 -> VGA, 1 -> VGA, 2 -> RGB, 3 -> TV Composite
|
||||
extern Option<int> Region; // 0 -> JP, 1 -> USA, 2 -> EU, 3 -> default
|
||||
extern Option<int> Broadcast; // 0 -> NTSC, 1 -> PAL, 2 -> PAL/M, 3 -> PAL/N, 4 -> default
|
||||
extern Option<int> Language; // 0 -> JP, 1 -> EN, 2 -> DE, 3 -> FR, 4 -> SP, 5 -> IT, 6 -> default
|
||||
extern Option<bool> FullMMU;
|
||||
extern Option<bool> ForceWindowsCE;
|
||||
extern Option<bool> AutoLoadState;
|
||||
extern Option<bool> AutoSaveState;
|
||||
extern Option<int> SavestateSlot;
|
||||
|
||||
// Sound
|
||||
|
||||
constexpr bool LimitFPS = true;
|
||||
extern Option<bool> DSPEnabled;
|
||||
extern Option<bool> DisableSound;
|
||||
extern Option<int> AudioBufferSize; //In samples ,*4 for bytes
|
||||
extern Option<bool> AutoLatency;
|
||||
|
||||
extern OptionString AudioBackend;
|
||||
|
||||
class AudioVolumeOption : public Option<int> {
|
||||
public:
|
||||
AudioVolumeOption() : Option<int>("aica.Volume", 100) {};
|
||||
float logarithmic_volume_scale = 1.0;
|
||||
|
||||
void load() override {
|
||||
Option<int>::load();
|
||||
calcDbPower();
|
||||
}
|
||||
|
||||
float dbPower()
|
||||
{
|
||||
return logarithmic_volume_scale;
|
||||
}
|
||||
void calcDbPower()
|
||||
{
|
||||
// dB scaling calculation: https://www.dr-lex.be/info-stuff/volumecontrols.html
|
||||
logarithmic_volume_scale = fmin(exp(4.605 * float(value) / 100.0) / 100.0, 1.0);
|
||||
if (value < 10)
|
||||
logarithmic_volume_scale *= value / 10.0;
|
||||
}
|
||||
};
|
||||
extern AudioVolumeOption AudioVolume;
|
||||
|
||||
// Rendering
|
||||
|
||||
class RendererOption : public Option<RenderType> {
|
||||
public:
|
||||
RendererOption()
|
||||
#ifdef _WIN32
|
||||
: Option<RenderType>("pvr.rend", RenderType::DirectX9) {}
|
||||
#else
|
||||
: Option<RenderType>("pvr.rend", RenderType::OpenGL) {}
|
||||
#endif
|
||||
|
||||
bool isOpenGL() const {
|
||||
return value == RenderType::OpenGL || value == RenderType::OpenGL_OIT;
|
||||
}
|
||||
bool isVulkan() const {
|
||||
return value == RenderType::Vulkan || value == RenderType::Vulkan_OIT;
|
||||
}
|
||||
bool isDirectX() const {
|
||||
return value == RenderType::DirectX9;
|
||||
}
|
||||
|
||||
void set(RenderType v)
|
||||
{
|
||||
newValue = v;
|
||||
}
|
||||
RenderType& operator=(const RenderType& v) { set(v); return value; }
|
||||
|
||||
void load() override {
|
||||
RenderType current = value;
|
||||
Option<RenderType>::load();
|
||||
newValue = value;
|
||||
value = current;
|
||||
}
|
||||
|
||||
void reset() override {
|
||||
// don't reset the value to avoid vk -> gl -> vk quick switching
|
||||
overridden = false;
|
||||
}
|
||||
|
||||
bool pendingChange() {
|
||||
return newValue != value;
|
||||
}
|
||||
void commit() {
|
||||
value = newValue;
|
||||
}
|
||||
|
||||
private:
|
||||
RenderType newValue = RenderType();
|
||||
};
|
||||
extern RendererOption RendererType;
|
||||
extern Option<bool> UseMipmaps;
|
||||
extern Option<bool> Widescreen;
|
||||
extern Option<bool> SuperWidescreen;
|
||||
extern Option<bool> ShowFPS;
|
||||
extern Option<bool> RenderToTextureBuffer;
|
||||
extern Option<bool> TranslucentPolygonDepthMask;
|
||||
extern Option<bool> ModifierVolumes;
|
||||
constexpr bool Clipping = true;
|
||||
extern Option<int> TextureUpscale;
|
||||
extern Option<int> MaxFilteredTextureSize;
|
||||
extern Option<float> ExtraDepthScale;
|
||||
extern Option<bool> CustomTextures;
|
||||
extern Option<bool> DumpTextures;
|
||||
extern Option<int> ScreenStretching; // in percent. 150 means stretch from 4/3 to 6/3
|
||||
extern Option<bool> Fog;
|
||||
extern Option<bool> FloatVMUs;
|
||||
extern Option<bool> Rotate90;
|
||||
extern Option<bool> PerStripSorting;
|
||||
extern Option<bool> DelayFrameSwapping; // Delay swapping frame until FB_R_SOF matches FB_W_SOF
|
||||
extern Option<bool> WidescreenGameHacks;
|
||||
extern std::array<Option<int>, 4> CrosshairColor;
|
||||
extern Option<int> SkipFrame;
|
||||
extern Option<int> MaxThreads;
|
||||
extern Option<int> AutoSkipFrame; // 0: none, 1: some, 2: more
|
||||
extern Option<int> RenderResolution;
|
||||
extern Option<bool> VSync;
|
||||
|
||||
// Misc
|
||||
|
||||
extern Option<bool> SerialConsole;
|
||||
extern Option<bool> SerialPTY;
|
||||
extern Option<bool> UseReios;
|
||||
|
||||
extern Option<bool> OpenGlChecks;
|
||||
|
||||
extern Option<std::vector<std::string>, false> ContentPath;
|
||||
extern Option<bool, false> HideLegacyNaomiRoms;
|
||||
|
||||
// Network
|
||||
|
||||
extern Option<bool> NetworkEnable;
|
||||
extern Option<bool> ActAsServer;
|
||||
extern OptionString DNS;
|
||||
extern OptionString NetworkServer;
|
||||
extern Option<bool> EmulateBBA;
|
||||
|
||||
#ifdef SUPPORT_DISPMANX
|
||||
extern Option<bool> DispmanxMaintainAspect;
|
||||
#endif
|
||||
|
||||
#ifdef USE_OMX
|
||||
extern Option<int> OmxAudioLatency;
|
||||
extern Option<bool> OmxAudioHdmi;
|
||||
#endif
|
||||
|
||||
// Maple
|
||||
|
||||
extern Option<int> MouseSensitivity;
|
||||
extern Option<int> VirtualGamepadVibration;
|
||||
extern std::array<Option<MapleDeviceType>, 4> MapleMainDevices;
|
||||
extern std::array<std::array<Option<MapleDeviceType>, 2>, 4> MapleExpansionDevices;
|
||||
#ifdef _WIN32
|
||||
extern Option<bool> UseRawInput;
|
||||
#else
|
||||
constexpr bool UseRawInput = false;
|
||||
#endif
|
||||
|
||||
} // namespace config
|
||||
|
||||
-519
@@ -1,519 +0,0 @@
|
||||
/*
|
||||
Created on: Sep 23, 2019
|
||||
|
||||
Credits for cheats: Esppiral, S4pph4rad, yzb37859365, Shenmue_Trilogy, Radaron, Virgin KLM, Joel, Zorlon,
|
||||
ELOTROLADO.NET, SEGARETRO.ORG, Sakuragi @ emutalk.net
|
||||
Copyright 2019 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "cheats.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "reios/reios.h"
|
||||
#include "network/picoppp.h"
|
||||
#include "cfg/cfg.h"
|
||||
|
||||
const WidescreenCheat CheatManager::widescreen_cheats[] =
|
||||
{
|
||||
{ "MK-51064", nullptr, { 0x39EFF4, 0 }, { 0x43700000 } }, // 18 wheeler (USA)
|
||||
{ "MK-5106450", nullptr, { 0x39EFF4, 0 }, { 0x43700000 } }, // 18 wheeler (PAL)
|
||||
{ "HDR-0080", nullptr, { 0x6625C0, 0 }, { 0x43700000 } }, // 18 wheeler (JP)
|
||||
{ "T-9708N", nullptr, { 0x0AD5B0, 0x112E00, 0 }, { 0x4A2671C4, 0x401CCCCD } }, // 4 Wheel Thunder (USA)
|
||||
{ "MK-5119050", nullptr, { 0x104A34, 0 }, { 0x3F52CCCD } }, // 90 Minutes - Sega Championship Football (PAL)
|
||||
{ "T40209D 50", nullptr, { 0x2A8750, 0 }, { 0x3F400000 } }, // AeroWings 2 (PAL)
|
||||
{ "T34101M", nullptr, { 0x24CF20, 0x24CEEC, 0 }, { 0x3FAAAAAB, 0x43F00000, 0 } }, // Animastar (JP)
|
||||
{ "MK-51171", nullptr, { 0xCA20B8, 0 }, { 0x43700000 } }, // Alien Front Online (USA)
|
||||
{ "T2101M", nullptr, { 0x13E8B4, 0x13E8E4, 0 }, { 0x43F00000, 0x3F400000 } }, // Berserk (JP)
|
||||
{ "T13001D 18", nullptr, { 0x2DAC44, 0 }, { 0x3F400000 } }, // Blue Stinger (En, De) (PAL)
|
||||
{ "xxxxxxxxxx", nullptr, { 0x2DAB84, 0 }, { 0x3F400000 } }, // Blue Stinger (Fr) (PAL)
|
||||
{ "T13001D-05", nullptr, { 0x2D9C84, 0 }, { 0x3F400000 } }, // Blue Stinger (Es, It?) (PAL)
|
||||
{ "T13001N", nullptr, { 0x2D9CA4, 0 }, { 0x3F400000 } }, // Blue Stinger (USA)
|
||||
{ "HDR-0003", nullptr, { 0x2D6D80, 0 }, { 0x3F400000 } }, // Blue Stinger (JP)
|
||||
{ "T42903M", nullptr, { 0x286E2C, 0x286E5C, 0 }, { 0x43F00000, 0x3F400000 } }, // Bomber Hehhe! (JP)
|
||||
{ "MK-51065", nullptr, { 0x387B84, 0x387BB4, 0 }, { 0x43F00000, 0x3F400000 } }, // Bomberman Online (USA)
|
||||
{ "T6801M", nullptr, { 0x042F3C, 0 }, { 0x4384BC09 } }, // Buggy Heat (JP)
|
||||
{ "T46601D 05", nullptr, { 0xBB3D14, 0 }, { 0x440A7C9A } }, // Cannon Spike (PAL)
|
||||
{ "T1215N", nullptr, { 0xBB3C74, 0 }, { 0x440A7C9A } }, // Cannon Spike (USA)
|
||||
{ "T44901D 50", nullptr, { 0xB0109C, 0xB010CC, 0 }, { 0x43F00000, 0x3F400000 } }, // Carrier (PAL)
|
||||
{ "T5701N", nullptr, { 0xAFD93C, 0xAFD96C, 0 }, { 0x43F00000, 0x3F400000 } }, // Carrier (USA)
|
||||
// Capcom vs. SNK Pro (JP)
|
||||
// You can see the end of the backgrounds on each side. The HUD is shifted to the right.
|
||||
// Code 2 sets HUD and movements of the characters to a 4:3 zone
|
||||
{ "T1247M", nullptr, { 0x1E8238, 0x3D3658, 0x3D3628, 0 }, { 0x43F00000, 0x43D20000, 0x43700000 } },
|
||||
// Capcom vs. SNK 2 (JP)
|
||||
// You can see the end of the backgrounds on each side.
|
||||
{ "T1249M", nullptr, { 0x39BFD8, 0x34E9E8, 0x34EFBC, 0 }, { 0x43700000, 0x3F400000, 0x3F400000 } },
|
||||
{ "T44902D 50", nullptr, { 0x1DBFF8, 0 }, { 0x43700000 } }, // Charge ‘n Blast (PAL)
|
||||
{ "T4402M", nullptr, { 0x1DA9E0, 0 }, { 0x43700000 } }, // Charge ‘n Blast (JP)
|
||||
{ "MK-5104950", nullptr, { 0x2D2D40, 0x2D2D70, 0 }, { 0x3F400000, 0xC2700000 } }, // ChuChu Rocket! (PAL)
|
||||
{ "T44903D 50", nullptr, { 0x315300, 0x315334, 0 }, { 0x43F00000, 0x3FAAAAAB } }, // Coaster Works (PAL)
|
||||
// Confidential Mission (PAL) 022F0D58 43700000 - Only works on real Dreamcast
|
||||
{ "T36901M", nullptr, { 0x1C8A98, 0 }, { 0x3F400000 } }, // Cool Boarders (JP)
|
||||
{ "T3106M", nullptr, { 0x60B59C, 0 }, { 0x3F400000 } }, // Cool Cool Toon (JP)
|
||||
{ "HDR-0176", nullptr, { 0x240FAC, 0 }, { 0x3F400000 } }, // Cosmic Smash (JP)
|
||||
{ "MK-51035", " U ", { 0x2B08B0, 0 }, { 0x43700000 } }, // Crazy Taxi (USA)
|
||||
{ "MK-51035", " E ", { 0x2B3410, 0 }, { 0x43700000 } }, // Crazy Taxi (PAL)
|
||||
{ "MK-5113650", nullptr, { 0x2BFB70, 0 }, { 0x43700000 } }, // Crazy Taxi 2 (PAL)
|
||||
{ "MK-51136", nullptr, { 0x2BDDD0, 0 }, { 0x43700000 } }, // Crazy Taxi 2 (USA)
|
||||
// { "HDR-0159", nullptr, { 0x2FBBD0, 0 }, { 0x43700000 } }, // Crazy Taxi 2 (JP) not working
|
||||
{ "T13004N", nullptr, { 0x016D94, 0 }, { 0x44234E73 } }, // Cyber Troopers - Virtual On - Oratorio Tangram (USA)
|
||||
// D2 (USA)
|
||||
{ "MK-51036", nullptr, { 0x4B5CF4, 0x4B5CC4, 0x3E92A0, 0x3E92A8, 0x3E92C0, 0x3E92C8 },
|
||||
{ 0x3F400000, 0x43F00000, 0, 0, 0, 0 } },
|
||||
// D2 (JP)
|
||||
{ "T30006M", nullptr, { 0x4CF42C, 0x4CF45C, 0x3E1A36, 0x3E1A34, 0x3E1A3C, 0x3E1A54, 0x3E1A5C, 0 },
|
||||
{ 0x43F00000, 0x3F400000, 0x08010000, 0, 0, 0, 0 } },
|
||||
{ "MK-5103750", nullptr, { 0x1FE270, 0 }, { 0x43700000 } }, // Daytona USA (PAL)
|
||||
{ "MK-51037", nullptr, { 0x1FC6D0, 0 }, { 0x43700000 } }, // Daytona USA (USA)
|
||||
{ "T9501N-50", nullptr, { 0x9821D4, 0 }, { 0x3F400000 } }, // Deadly Skies (PAL)
|
||||
{ "T8116D 50", nullptr, { 0x2E5530, 0 }, { 0x43700000 } }, // Dead or Alive 2 (PAL)
|
||||
{ "T3601N", nullptr, { 0x2F0670, 0 }, { 0x43700000 } }, // Dead or Alive 2 (USA)
|
||||
{ "T3602M", nullptr, { 0x2FF798, 0 }, { 0x43700000 } }, // Dead or Alive 2 (JP)
|
||||
{ "T3601M", nullptr, { 0x2FBBD0, 0x1E6658, 0 }, { 0x43700000, 0x4414C000 } }, // Dead or Alive 2: Limited Edition (JP) (code 1 fixes HUD)
|
||||
{ "T2401N", nullptr, { 0x8BD5B4, 0x8BD5E4, 0 }, { 0x43F00000, 0x3F400000 } }, // Death Crimson OX (USA)
|
||||
{ "T23201M", nullptr, { 0x819F44, 0x819F74, 0 }, { 0x43F00000, 0x3F400000 } }, // Death Crimson 2 (JP)
|
||||
{ "T17714D50", nullptr, { 0x0D2ED0, 0x0D2ED4, 0 }, { 0x3FAAAAAB, 0x3F400000 } }, // Donald Duck: Quack Attack (PAL) (Code 1 corrects the HUD)
|
||||
{ "T12503D-50", nullptr, { 0x49CB24, 0 }, { 0x3F0CCCCD } }, // Dragons Blood (PAL)
|
||||
{ "T17716D 50", nullptr, { 0xF97F40, 0x08DCF8, 0 }, { 0x00000168, 0 } }, // Dragonriders: Chronicles of Pern (PAL)
|
||||
{ "T17720N", nullptr, { 0xF97F40, 0x08DCF4, 0 }, { 0x00000168, 0 } }, // Dragonriders: Chronicles of Pern (USA) (Code 1 removes black bars)
|
||||
{ "MK-5101350", nullptr, { 0x4FCBC0, 0 }, { 0x43700000 } }, // Dynamite Cop (PAL)
|
||||
{ "MK-51013", nullptr, { 0x4FCBC0, 0 }, { 0x43700000 } }, // Dynamite Cop (USA)
|
||||
// Draconus: Cult of the Wyrm (USA)
|
||||
// Code 1-2 increases drawing distance
|
||||
{ "T40203N", nullptr, { 0x49D7F4, 0x49D8CC, 0x49D6F8, 0 }, { 0x3F07C3BB, 0x447A0000, 0x3FAAAAAB } },
|
||||
// Ecco the Dolphin: Defender of the Future (PAL)
|
||||
{ "MK-5103350", nullptr, { 0x275418, 0x040E68, 0x040D1C, 0 }, { 0x49D9A5DA, 0x3F100000, 0x3F100000 } },
|
||||
{ "T17705D 05", nullptr, { 0x304870, 0 }, { 0x3F400000 } }, // Evolution - The World of Sacred Device (PAL)
|
||||
{ "T45005D 50", nullptr, { 0x36CE5C, 0x36CE8C, 0 }, { 0x43F00000, 0x3F400000 } }, // Evolution 2 - Far Off Promise (PAL)
|
||||
{ "T1711N", nullptr, { 0x36C76C, 0x36C73C, 0 }, { 0x3F400000, 0x43F00000 } }, // Evolution 2 - Far Off Promise (USA)
|
||||
{ "T8118D 50", nullptr, { 0x2C6B7C, 0 }, { 0x00004000 } }, // Ferrari F355 Challenge (PAL) vga mode only
|
||||
{ "HDR-0100", nullptr, { 0x3235D4, 0 }, { 0x00004000 } }, // Ferrari F355 Challenge (JP) vga mode only
|
||||
{ "MK-5115450", nullptr, { 0x3D3B10, 0 }, { 0x43700000 } }, // Fighting Vipers 2 (PAL)
|
||||
{ "HDR-0133", nullptr, { 0x3D3AF0, 0 }, { 0x43700000 } }, // Fighting Vipers 2 (JP)
|
||||
{ "MK-51114", nullptr, { 0x132DD8, 0xA26CA8, 0xA26738, 0xA275B8, 0xA26AD8, 0xA26908, 0 },
|
||||
{ 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000 } }, // Floigan Bros. Ep. 1 (PAL)
|
||||
{ "T34201M", nullptr, { 0x586290, 0x586260, 0 }, { 0x3F400000, 0x43F00000 } }, // Frame Gride (JP)
|
||||
{ "T-8113D-50", nullptr, { 0x55A354, 0 }, { 0x3FAAAAAB } }, // Fur Fighters (PAL)
|
||||
{ "T-8107N", nullptr, { 0x55A374, 0 }, { 0x3FAAAAAB } }, // Fur Fighters (USA)
|
||||
{ "T9707D 50", nullptr, { 0x2E7CD0, 0x2E7D04, 0x2E7D10, 0x2E7D0C, 0 },
|
||||
{ 0x43BEAE39, 0x3DCCCCCD , 0x44A00000, 0xC4200000 } }, // Gauntlet Legends (PAL)
|
||||
{ "HDR-0004", nullptr, { 0x364A64, 0 }, { 0x43BA0000 } }, // Godzilla Generations (JP)
|
||||
{ "HDR-0047", nullptr, { 0x7C3F24, 0x7C3F54, 0 }, { 0x43F00000, 0x3F400000 } }, // Godzilla Generations Maximum Impact (JP)
|
||||
{ "T41501M", nullptr, { 0x282604, 0x282634, 0 }, { 0x43F00000, 0x3F400000 } }, // Golem no Maigo (aka The Lost Golem) (JP)
|
||||
{ "T1219M", nullptr, { 0xBC3C94, 0 }, { 0x440A7C9A } }, // Gun Spike (JP)
|
||||
{ "T13301N", nullptr, { 0x88E780, 0 }, { 0x3F400000 } }, // Gundam Side Story (USA)
|
||||
// { "T11001N", nullptr, { 0xC3D6BC, 0xD204A8, 0xD32FC8, 0xC7CF84, 0xD20548, 0 },
|
||||
// { 0x00363031, 0x00000356, 0x00000280, 0x00000280, 0x00000280 } }, // Half-Life. Not working
|
||||
{ "MK-5104150", nullptr, { 0x23FCC4, 0 }, { 0x44558000 } }, // Headhunter (PAL)
|
||||
{ "MK-5100250", nullptr, { 0x4C6708, 0 }, { 0x43700000 } }, // House of the Dead 2, The (PAL)
|
||||
{ "MK-51002", nullptr, { 0x4C6088, 0 }, { 0x43700000 } }, // House of the Dead 2, The (USA)
|
||||
{ "T38706M", nullptr, { 0xC0CFA0, 0 }, { 0x3F400000 } }, // Ikaruga (JP)
|
||||
{ "T46001N", nullptr, { 0x1C8A98, 0 }, { 0x3F400000 } }, // Illbleed (USA)
|
||||
{ "T44904D 50", nullptr, { 0x18C15C, 0x18C18C, 0 }, { 0x43F00000, 0x3F400000 } }, // Iron Aces (PAL)
|
||||
{ "MK-51058", nullptr, { 0x32E0FC, 0x32E12C, 0 }, { 0x43F00000, 0x3F400000 } }, // Jet Grind Radio (USA)
|
||||
{ "MK-5105850", nullptr, { 0x32F9EC, 0x32F9BC, 0 }, { 0x3F400000, 0x43F00000 } }, // Jet Set Radio (PAL)
|
||||
{ "HDR-0078", nullptr, { 0x327A8C, 0x327A5C, 0 }, { 0x3F400000, 0x43F00000 } }, // Jet Set Radio (De La) (JP)
|
||||
{ "T22902D 50", nullptr, { 0x278508, 0 }, { 0x43700000 } }, // Kao The Kangaroo (PAL)
|
||||
{ "T22903N", nullptr, { 0x2780A8, 0 }, { 0x43700000 } }, // Kao The Kangaroo (USA)
|
||||
{ "T47803M", nullptr, { 0x0FDFAC, 0 }, { 0x3F400000 } }, // Karous (JP)
|
||||
// { "T41901N", nullptr, { 0x53F580, 0xEFB748, 0xEFB750, 0 }, { 0xC4200000, 0x43A00000, 0x43200000 } }, // KISS Psycho Circus – The Nightmare Child (USA)
|
||||
{ "T2501M", nullptr, { 0x24A878, 0x24A8A8, 0 }, { 0x43F00000, 0x3F400000 } }, // Langrisser Millenium (JP)
|
||||
{ "T15111D 50", nullptr, { 0x29B90C, 0 }, { 0x3F400000 } }, // Le Mans 24 Hours (PAL)
|
||||
{ "T15116N", nullptr, { 0x2198EC, 0 }, { 0x3F400000 } }, // Looney Tunes: Space Race (USA)
|
||||
{ "MK-5105050", nullptr, { 0x33818C, 0 }, { 0x3FA66666 } }, // Maken X (PAL)
|
||||
{ "MK-51050", nullptr, { 0x30CB4C, 0 }, { 0x3F400000 } }, // Maken X (USA)
|
||||
{ "T1212N", nullptr, { 0x2D6B18, 0x268390, 0x268ED8, 0x268934, 0x26947C, 0x269A20, 0x269FC4, 0 },
|
||||
{ 0x43700000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000 } }, // Marvel vs. Capcom 2 (USA)
|
||||
{ "T1215M", nullptr, { 0x2FE2C0, 0x28FB38, 0x290680, 0x2900DC, 0x290C24, 0x2911C8, 0x29176C, 0 },
|
||||
{ 0x43700000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000, 0x3F400000 } }, // Marvel vs. Capcom 2 (JP)
|
||||
{ "T41402N", nullptr, { 0x551B80, 0 }, { 0x3F400000 } }, // Max Steel - Covert Missions (USA)
|
||||
{ "MK-5102250", "V1.001", { 0x107FDC, 0x11253C, 0 }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (v1.001) (PAL)
|
||||
{ "MK-5102250", "V1.009", { 0x106B5C, 0x1111F4, 0 }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (v1.009) (PAL)
|
||||
{ "MK-51012", nullptr, { 0x10A01C, 0x1146FC, 0 }, { 0x3F99999A, 0x3F900000 } }, // Metropolis Street Racer (USA)
|
||||
{ "T0000M", nullptr, { 0x1CAEAC, 0x1CAEDC, 0 }, { 0x43F00000, 0x3F400000 } }, // Millenium Racer Y2K Fighters
|
||||
{ "T1221M", nullptr, { 0x426B74, 0 }, { 0x43F00000 } }, // Moero! Justice Gauken (JP)
|
||||
{ "T9701D", nullptr, { 0x31290C, 0 }, { 0x3F400000 } }, // Mortal Kombat Gold (PAL)
|
||||
{ "T-9701N", nullptr, { 0x337B8C, 0 }, { 0x3FA66666 } }, // Mortal Kombat Gold (USA)
|
||||
{ "T7020D", nullptr, { 0x1A5D40, 0x1A5D18, 0x1A5D38, 0x1A5D34, 0x1A5D30, 0x1A5D3C, 0x1A5D0C, 0x1A5D08, 0x1ACB78, 0 },
|
||||
{ 0x3F59999A, 0x44084000, 0x3FB1EB85, 0x3FAAAAAB, 0x3F800000, 0x3FA66666, 0xC31B0000, 0x42700000, 0x44160000 } }, // Mr Driller (PAL)
|
||||
{ "T7604M", nullptr, { 0x43BDA4, 0x43BDD8, 0x4319E8, 0x431A08, 0x431A28, 0x431A48, 0 },
|
||||
{ 0x43700000, 0x3F9AF5C2, 0x42200000, 0x42200000, 0x438C0000, 0x438C0000 } }, // Nanatsu no Hikan - Senritsu no Bishou (JP)
|
||||
{ "HDR-0079", nullptr, { 0x353744, 0x353774, 0x353778, 0 },
|
||||
{ 0x43F00000, 0x3F400000, 0x3F800000 } }, // Napple Tale: Arsia in Daydream (JP)
|
||||
//crash { "MK-51178", nullptr, { 0x23AF00, 0x23B160, 0x144D40, 0x2105B4, 0x705B40, 0 },
|
||||
// { 0xBFAAAAAB, 0xBFAAAAAB, 0xBFAAAAAB, 0xBFAAAAAB, 0x44558000 } }, // NBA 2K2
|
||||
{ "T9504M", nullptr, { 0xCDE848, 0xCDE844, 0 }, { 0x3F400000, 0x3FA00000 } }, // Nightmare Creatures II (USA)
|
||||
{ "T-9502D-50", nullptr, { 0xBDE9B0, 0xBDE9C4, 0 }, { 0x3F400000, 0x3FA00000 } }, // Nightmare Creatures II (PAL)
|
||||
{ "MK-5110250", nullptr, { 0x87B5A4, 0 }, { 0x43700000 } }, // Outtrigger (PAL)
|
||||
{ "HDR-0118", nullptr, { 0x83E284, 0 }, { 0x43700000 } }, // Outtrigger (JP)
|
||||
{ "T15103D 50", nullptr, { 0x1EEE78, 0 }, { 0x3F400000 } }, // PenPen (PAL)
|
||||
{ "T17001M", nullptr, { 0x1C3828, 0 }, { 0x3F400000 } }, // PenPen TriIcelon (JP)
|
||||
{ "MK-5110050", nullptr, { 0x548E04, 0x0923C0, 0 }, { 0x43E80000, 0x3F966666 } }, // Phantasy Star Online (PAL) TODO
|
||||
{ "MK-51100", nullptr, { 0x548E84, 0x0925A4, 0 }, { 0x43D20000, 0x3FA66666 } }, // Phantasy Star Online (USA) TODO
|
||||
{ "HDR-0129", nullptr, { 0x57E344, 0x091794, 0 }, { 0x43D20000, 0x3FA66666 } }, // Phantasy Star Online (JP) TODO
|
||||
{ "MK-5119350", nullptr, { 0x57552C, 0x0A2DD4, 0 }, { 0x43F00000, 0x3F911111 } }, // Phantasy Star Online Ver. 2 (PAL) TODO
|
||||
{ "MK-51193", nullptr, { 0x0A3138, 0x58C8CC, 0 }, { 0x3F911111, 0x43F00000 } }, // Phantasy Star Online Ver. 2 (USA) TODO
|
||||
{ "T1207N", nullptr, { 0x7D463C, 0 }, { 0x3F400000 } }, // Plasma Sword - Nightmare of Bilstein (USA)
|
||||
{ "T36801D 50", nullptr, { 0x7FD3C8, 0 }, { 0x43700000 } }, // Power Stone (PAL)
|
||||
{ "T1201N", nullptr, { 0x7FCEE8, 0 }, { 0x43700000 } }, // Power Stone (USA)
|
||||
{ "T36812D 50", nullptr, { 0x868BA8, 0 }, { 0x43700000 } }, // Power Stone 2 (PAL)
|
||||
{ "T1211N", nullptr, { 0x8689A8, 0 }, { 0x43700000 } }, // Power Stone 2 (USA)
|
||||
{ "T1218M", nullptr, { 0x849AA0, 0 }, { 0x43700000 } }, // Power Stone 2 (JP)
|
||||
{ "T7022D 50", nullptr, { 0x33414C, 0 }, { 0x43F00000 } }, // Project Justice (PAL)
|
||||
{ "T1219N", nullptr, { 0x33374C, 0 }, { 0x43F00000 } }, // Project Justice (USA)
|
||||
{ "MK-51162", nullptr, { 0x204308, 0 }, { 0x3FE38E39 } }, // Propeller Arena
|
||||
{ "T-8106D-50", nullptr, { 0x7DA39C, 0 }, { 0x3F400000 } }, // Psychic Force 2012 (PAL)
|
||||
{ "T9901M", nullptr, { 0x1AD848, 0 }, { 0x3F400000 } }, // Rainbow Cotton (JP)
|
||||
{ "T9711D 50", nullptr, { 0x1574D8, 0 }, { 0x43700000 } }, // Ready 2 Rumble Boxing Round 2 (PAL)
|
||||
{ "T7012D 05", nullptr, { 0x4FF93C, 0x4FF96C, 0 }, { 0x43F00000, 0x3F400000 } }, // Record of Lodoss War (En) (PAL)
|
||||
{ "xxxxxxxxxx", nullptr, { 0x4FF25C, 0x4FF28C, 0 }, { 0x43F00000, 0x3F400000 } }, // Record of Lodoss War (De) (PAL)
|
||||
{ "T7012D 09", nullptr, { 0x50499C, 0x5049CC, 0 }, { 0x43F00000, 0x3F400000 } }, // Record of Lodoss War (Fr) (PAL)
|
||||
{ "MK-5102151", nullptr, { 0x3511A0, 0 }, { 0x3FC58577 } }, // Red Dog (PAL)
|
||||
{ "HDR-0074", nullptr, { 0x1FF60C, 0x1FF610, 0x1FF5DC, 0 }, { 0x3F400000, 0x3F800000, 0x43DC0000 } }, //Rent a Hero n°1
|
||||
// Resident Evil: Code Veronica (De) (PAL)
|
||||
// Code 1-4 removes the black bars on top and bottom in FMV
|
||||
{ "xxxxxxxxxx", nullptr, { 0x32A380, 0x383E18, 0x383E38, 0x383E58, 0x383E78, 0 },
|
||||
{ 0x3F400000, 0x43F00000, 0, 0x43F00000, 0 } },
|
||||
// Resident Evil: Code Veronica (Fr) (PAL)
|
||||
// Code 1-4 removes the black bars on top and bottom in FMV
|
||||
{ "T36806D 09", nullptr, { 0x32A380, 0x383E18, 0x383E38, 0x383E58, 0x383E78, 0 },
|
||||
{ 0x3F400000, 0x43F00000, 0, 0x43F00000, 0 } },
|
||||
// Resident Evil: Code Veronica (Sp) (PAL)
|
||||
{ "xxxxxxxxxx", nullptr, { 0x32A3A0, /* 0x383E18, 0x383E38, 0x383E58, 0x383E78, */ 0 },
|
||||
{ 0x3F400000, 0x43F00000, 0, 0x43F00000, 0 } },
|
||||
// Resident Evil: Code Veronica (USA)
|
||||
// Code 1-4 removes the black bars on top and bottom in FMV
|
||||
{ "T1204N", nullptr, { 0x329E40, 0x3838D8, 0x3838F8, 0x383918, 0x383938, 0 },
|
||||
{ 0x3F400000, 0x43F00000, 0, 0x43F00000, 0 } },
|
||||
{ "T8107D 50", nullptr, { 0x0464FC, 0x046210, 0 }, { 0x3A888889, 0x44200000 } }, // Re-Volt (PAL) Code 1 is a render fix
|
||||
{ "MK-5119250", nullptr, { 0x0C5EB4, 0 }, { 0x3A888889 } }, // Rez (PAL)
|
||||
{ "T15122N", nullptr, { 0x8E7A80, 0x8E7AB4, 0 }, { 0x43E10000, 0x3FAAAAAB } }, // Ring, The - Terror's Realm (USA)
|
||||
{ "MK-51010", nullptr, { 0x1A4D2C, 0x1A4D5C, 0 }, { 0x43F00000, 0x3F400000 } }, // Rippin' Riders (USA)
|
||||
{ "HDR-0044", nullptr, { 0x298A94, 0x298AC4, 0 }, { 0x43F00000, 0x3F400000 } }, // Roommania #203 (JP)
|
||||
{ "MK-5109250", nullptr, { 0x29E6C4, 0 }, { 0x3F400000 } }, // Samba De Amigo (PAL)
|
||||
{ "T41301N", nullptr, { 0x77A178, 0 }, { 0x3F400000 } }, // Seventh Cross Evolution (USA)
|
||||
{ "T8104D 58", nullptr, { 0x2C03F8, 0 }, { 0x44558000 } }, // Shadow Man (PAL)
|
||||
{ "T-8106N", nullptr, { 0x2C03F4, 0 }, { 0x3F400000 } }, // Shadow Man (USA)
|
||||
{ "MK-51048", nullptr, { 0x4AA4DC, 0x2B4E30, 0 }, { 0x3F400000, 0x3F400000 } }, // Seaman (USA)
|
||||
{ "MK-5105350", nullptr, { 0x5D613C, 0 }, { 0x3F400000 } }, // Sega GT (PAL)
|
||||
{ "MK-51096", nullptr, { 0x495050, 0 }, { 0x43700000 } }, // Sega Marine Fishing (USA)
|
||||
// { "MK-51019", nullptr, { 0xB83A48, 0 }, { 0x3F400000 } }, // Sega Rally 2 (USA) not working?
|
||||
// { "HDR0010", nullptr, { 0xBD9BA0, 0 }, { 0x3F400000 } }, // Sega Rally 2 (JP) not working?
|
||||
{ "HDR-0151", nullptr, { 0xAF57DC, 0xAF580C, 0x2122A0, 0 },
|
||||
{ 0x43F00000, 0x3F400000, 0x3F400000 } }, // SGGG – Segagaga (JP)
|
||||
{ "MK-5105950", nullptr, { 0x231EF8, 0x1EF370, 0 }, { 0x43800000, 0x7C1EF400 } }, // Shenmue (PAL) code 1 reduces clipping
|
||||
{ "MK-51059", nullptr, { 0x230250, 0 }, { 0x43800000 } }, // Shenmue (USA) Clipping
|
||||
{ "HDR-0016", nullptr, { 0x22E8A0, 0x1EBE70, 0 }, { 0x43800000, 0x7C1EBF00 } }, // Shenmue (JP) code 1 reduces clipping
|
||||
{ "MK-5118450", nullptr, { 0x31186C, 0 }, { 0x43800000 } }, // Shenmue II (PAL) 01160FF4 0000E100 for black bars in cutscenes
|
||||
// Shenmue II (PAL) Alternative code without clipping or black bars. Might be demanding on real hardware.
|
||||
// 02311880 C3A00000, 0227E198 35AA359E, 01160FF4 0000E100
|
||||
{ "HDR-0164", nullptr, { 0x30D67C, 0 }, { 0x43700000 } }, // Shenmue II (JP) Clipping
|
||||
{ "T9505D", nullptr, { 0xD1FB14, 0x096A4C, 0 }, { 0x3F400000, 0x3FAAAAAB } }, // Silent Scope (PAL) Choose 60Hz in game options
|
||||
{ "MK-51052", " E ", { 0x502A84, 0 }, { 0x3F400000 } }, // Skies of Arcadia (PAL)
|
||||
{ "MK-51052", " U ", { 0x599158, 0 }, { 0x3F400000 } }, // Skies of Arcadia (USA)
|
||||
{ "T15104D 50", nullptr, { 0x17EF68, 0 }, { 0x43F00010 } }, // Slave Zero (PAL) Widescreen, but a bit zoomed in
|
||||
{ "MK-5101050", nullptr, { 0x1A50EC, 0x1A511C, 0 }, { 0x43F00000, 0x3F400000 } }, // Snow Surfers (PAL)
|
||||
{ "MK-5100050", nullptr, { 0x88F528, 0x88F55C, 0 }, { 0x43F00000, 0x3FA66666 } }, // Sonic Adventure (PAL)
|
||||
{ "MK-51000", nullptr, { 0x88F5E8, 0x88F61C, 0 }, { 0x43F00000, 0x3FAAAAAB } }, // Sonic Adventure (USA)
|
||||
{ "MK-51117", nullptr, { 0x28DEF8, 0x28DF28, 0 }, { 0x43F00000, 0x3f400000 } }, // Sonic Adventure 2 (USA)
|
||||
{ "HDR-0165", nullptr, { 0x28DF28, 0x28DEF8, 0 }, { 0x3F400000, 0x43F00000 } }, // Sonic Adventure 2 (JP)
|
||||
{ "MK-51060", nullptr, { 0x112A2C, 0 }, { 0x3F400000 } }, // Sonic Shuffle (US)
|
||||
{ "MK-5106050", nullptr, { 0x110B4C, 0 }, { 0x3F400000 } }, // Sonic Shuffle (PAL)
|
||||
{ "T9103M", nullptr, { 0x25C714, 0x25C744, 0 }, { 0x43F00000, 0x3F400000 } }, // Sorcerian - Shichisei Mahou no Shito
|
||||
{ "T1401D 50", nullptr, { 0x2D6138, 0 }, { 0x3F400000 } }, // Soul Calibur (PAL)
|
||||
{ "T1401N", nullptr, { 0x266C28, 0 }, { 0x3F400000 } }, // Soul Calibur (USA)
|
||||
{ "T36802N", " E ", { 0x129FA0, 0x12A9BC, 0x1C9FDC, 0 },
|
||||
{ 0x3EF55555, 0x3EF55555, 0x000000F0 } }, // Soul Reaver (PAL) Code 2 is a Render Fix
|
||||
{ "HDR-0190", nullptr, { 0x14D3E0, 0 }, { 0x3F400000 } }, // Space Channel 5 Part 2 (JP)
|
||||
{ "T1216M", nullptr, { 0x017C38, 0x17F00, 0 }, { 0x3A99999A, 0x3A99999A } }, // Spawn - In the Demon's Hand v1.003 (JP)
|
||||
{ "T1216N", nullptr, { 0x017C58, 0x17F20, 0 }, { 0x3A99999A, 0x3A99999A } }, // Spawn - In the Demon's Hand v1.000 (US)
|
||||
{ "T36816D 50", nullptr, { 0x017C78, 0x17F40, 0 }, { 0x3A99999A, 0x3A99999A } }, // Spawn - In the Demon's Hand v1.000 (EU)
|
||||
// Star Wars Episode I Racer (USA)
|
||||
// Code 1-4 removes the black bars on top and bottom in FMV
|
||||
{ "T23001N", nullptr, { 0x17AE20, 0x29A96C, 0x29A98C, 0x29A9AC, 0x29A9CC, 0 },
|
||||
{ 0x3F400000, 0x42900000, 0x42900000, 0x43CE0000, 0x43CE0000 } },
|
||||
{ "T40206N", nullptr, { 0x43296C, 0 }, { 0x3F400000, 0 } }, // Super Magnetic Neo (US)
|
||||
{ "T40206D 50", nullptr, { 0x43E34C, 0 }, { 0x3F400000, 0 } }, // Super Magnetic Neo (EU)
|
||||
// { "T7014D 50", nullptr, { 0xE2B234, 0 }, { 0x3F800000 } }, // Super Runabout (PAL) doesn't work?
|
||||
{ "T17721D 50", nullptr, { 0x45CED4, 0 }, { 0x3F400000 } }, // Surf Rocket Racers (PAL) alt: 021EBF40 3F400000
|
||||
{ "T17703D 50", nullptr, { 0xCD8950, 0 }, { 0x3F111111 } }, // Suzuki Alstare Extreme Racing
|
||||
{ "T36807D 05", nullptr, { 0x140F74, 0x140FA4, 0 }, { 0x43FA0000, 0x3F400000 } }, // Sword of Bersek (PAL)
|
||||
{ "T-36805N", nullptr, { 0x13F1C4, 0x13F194, 0 }, { 0x3F400000, 0x43F00000 } }, // Sword of Bersek (USA)
|
||||
{ "MK-51186", nullptr, { 0x4A19B0, 0 }, { 0x43700000 } }, // Tennis 2K2 (USA)
|
||||
{ "T15123N", nullptr, { 0x29B7BC, 0 }, { 0x3F400000 } }, // Test Drive Le Mans (USA) doesn't work?
|
||||
{ "T20801M", nullptr, { 0x1AAC80, 0x1AACB0, 0 }, { 0x43F00000, 0x3F400000 } }, // Tetris 4D (JP)
|
||||
{ "MK-5101153", nullptr, { 0x14EFA8, 0x14EFD8, 0 }, { 0x43F00000, 0x3F400000 } }, // Timestalkers (PAL)
|
||||
{ "T7009D50", nullptr, { 0x39173C, 0 }, { 0x3F400000 } }, // Tech Romancer (PAL)
|
||||
{ "T35402M", nullptr, { 0x315370, 0x3153A0, 0 }, { 0x43F00000, 0x3F400000 } }, // Tokyo Bus Guide (JP) doesn't work?
|
||||
{ "T40201D 50", nullptr, { 0x1D9F10, 0 }, { 0x3F400000 } }, // Tokyo Highway Challenge (PAL)
|
||||
{ "T40210D 50", nullptr, { 0x21E4F8, 0 }, { 0x43700000 } }, // Tokyo Highway Challenge 2 (PAL)
|
||||
{ "xxxxxxxxxx", nullptr, { 0x21DEF8, 0 }, { 0x3F400000 } }, // Tokyo Street Racer 2 (USA)
|
||||
// { "T36804D05", nullptr, { 0xB75E28, 0 }, { 0x3EC00000 } }, // Tomb Raider: The Last Revelation (UK) (PAL) clipping, use hex patch instead
|
||||
{ "T13008D 05", nullptr, { 0x1D7C20, 0 }, { 0x3FA66666 } }, // Tony Hawk's Pro Skater 2 (PAL)
|
||||
{ "T13006N", nullptr, { 0x1D77A0, 0 }, { 0x3FA66666 } }, // Tony Hawk's Pro Skater 2 (USA)
|
||||
{ "MK-5102050", nullptr, { 0x0D592C, 0 }, { 0x3FD00000 } }, // Toy Commander (PAL)
|
||||
{ "xxxxxxxxxx", nullptr, { 0x469FCC, 0x469FFC, 0 }, { 0x44700000, 0x3F400000 } }, // Toyota Doricatch Series: Land Cruiser 100/Cygnus
|
||||
{ "MK-5109505", nullptr, { 0x1B2718, 0 }, { 0x3F400000 } }, // UEFA Dream Soccer (PAL)
|
||||
{ "T40203D 50", nullptr, { 0x1D74E8, 0x1D7518, 0 }, { 0x43F00000, 0x3F400000 } }, // Ultimate Fighting Championship (PAL)
|
||||
{ "T40204N", nullptr, { 0x1A9684, 0 }, { 0x3F400000 } }, // Ultimate Fighting Championship (USA) problems with cam in game
|
||||
{ "T-8110D-50", nullptr, { 0x0C6B90, 0x0C6B94, 0 }, { 0x43F00000, 0x43870000 } }, // Vanishing Point (PAL)
|
||||
// { "MK-5109450", nullptr, { 0x244134, 0x7A73B8, 0x7830D8, 0x7A74B8, 0x783138, 0x7A85A0, 0x6C7928, 0x6C7930, 0x6C7948, 0x6C7950, 0 },
|
||||
//crash { 0x43F00000, 0x3F9C932E, 0x3F9C932E, 0x3F9C932E, 0x3F9C932E, 0x3F400000, 0, 0, 0, 0 } }, // Virtua Athlete 2K (PAL)
|
||||
{ "MK-5100150", nullptr, { 0x19D718, 0 }, { 0x43700000 } }, // Virtua Fighter 3 TB (PAL)
|
||||
{ "HDR-0002", nullptr, { 0x199FB0, 0 }, { 0x43700000 } }, // Virtua Fighter 3 TB (JP)
|
||||
{ "MK-5105450", nullptr, { 0x456378, 0 }, { 0x43700000 } }, // Virtua Tennis (v1.001) (PAL)
|
||||
{ "MK-51054", nullptr, { 0x450A90, 0 }, { 0x43700000 } }, // Virtua Tennis (USA)
|
||||
{ "MK-5118650", nullptr, { 0x4A4A20, 0 }, { 0x43700000 } }, // Virtua Tennis 2 (PAL)
|
||||
// { "T0000", nullptr, { 0x3A514C, 0x3A6170, 0 }, { 0x3F400000, 0x00000356 } }, // Volgarr the Viking. Not working
|
||||
{ "xxxxxxxxxx", nullptr, { 0x20BB68, 0x1ACBD0, 0x1B9ADC, 0 }, // Code 1 reduces clipping. Code 2 fixes the clock.
|
||||
{ 0x43700000, 0x7C1ACC60, 0x3F400000 } }, // What's Shenmue (JP)
|
||||
{ "T40504D 50", nullptr, { 0x75281C, 0 }, { 0x3F400000 } }, // Wetrix+ (PAL) not working?
|
||||
{ "MK-51152", nullptr, { 0x014E90, 0 }, { 0x43700000 } }, // World Series Baseball 2K2 (USA)
|
||||
{ "T20401M", nullptr, { 0x323CB0, 0x1ACBD0, 0x1B9ADC, 0 }, // Code 1 reduces clipping. Code 2 fixes the HUD.
|
||||
{ 0x43700000, 0x1ACC60, 0x3F400000 } }, // Zero Gunner 2 (JP)
|
||||
{ "MK-5103850", nullptr, { 0x9484E8, 0 }, { 0x43700000 } }, // Zombie Revenge (PAL)
|
||||
{ "MK-51038", nullptr, { 0x948058, 0 }, { 0x43700000 } }, // Zombie Revenge (USA)
|
||||
{ "HDR-0026", nullptr, { 0x948B18, 0 }, { 0x43700000 } }, // Zombie Revenge (JP)
|
||||
{ "T43301M", nullptr, { 0x4B0218, 0 }, { 0x3F400000 } }, // Zusar Vasar (JP)
|
||||
|
||||
{ nullptr },
|
||||
};
|
||||
const WidescreenCheat CheatManager::naomi_widescreen_cheats[] =
|
||||
{
|
||||
{ "KNIGHTS OF VALOUR THE 7 SPIRITS", nullptr, { 0x475B70, 0x475B40, 0 }, { 0x3F400000, 0x43F00000 } },
|
||||
{ "Dolphin Blue", nullptr, { 0x3F2E2C, 0x3F2190, 0x3F2E6C, 0x3F215C, 0 },
|
||||
{ 0x43B90000, 0x3FAA9FBE, 0x43B90000, 0x43F00000 } },
|
||||
{ "METAL SLUG 6", nullptr, { 0xE93478, 0xE9347C, 0 }, { 0x3F400000, 0x3F8872B0 } },
|
||||
{ "TOY FIGHTER", nullptr, { 0x133E58, 0 }, { 0x43700000 } },
|
||||
{ "LUPIN THE THIRD -THE SHOOTING-", nullptr, { 0x045490 }, { 0x3F400000 } },
|
||||
|
||||
{ nullptr },
|
||||
};
|
||||
CheatManager cheatManager;
|
||||
|
||||
void CheatManager::loadCheatFile(const std::string& filename)
|
||||
{
|
||||
FILE* cheatfile = nowide::fopen(filename.c_str(), "r");
|
||||
if (cheatfile == nullptr)
|
||||
{
|
||||
WARN_LOG(COMMON, "Cannot open cheat file '%s'", filename.c_str());
|
||||
return;
|
||||
}
|
||||
cheats.clear();
|
||||
Cheat cheat;
|
||||
int cheatNumber = 0;
|
||||
char buffer[512];
|
||||
while (fgets(buffer, sizeof(buffer), cheatfile) != nullptr)
|
||||
{
|
||||
std::string l = buffer;
|
||||
auto equalPos = l.find('=');
|
||||
if (equalPos == std::string::npos)
|
||||
continue;
|
||||
auto quotePos = l.find('"', equalPos);
|
||||
if (quotePos == std::string::npos)
|
||||
continue;
|
||||
auto quote2Pos = l.find('"', quotePos + 1);
|
||||
if (quote2Pos == std::string::npos)
|
||||
continue;
|
||||
if (l.substr(0, 5) != "cheat" || l[5] < '0' || l[5] > '9')
|
||||
continue;
|
||||
char *p;
|
||||
int number = strtol(&l[5], &p, 10);
|
||||
if (number != cheatNumber && cheat.type != Cheat::Type::disabled)
|
||||
{
|
||||
cheatNumber = number;
|
||||
cheats.push_back(cheat);
|
||||
cheat = Cheat();
|
||||
}
|
||||
std::string param = trim_trailing_ws(l.substr(p - &l[0], equalPos - (p - &l[0])));
|
||||
std::string value = l.substr(quotePos + 1, quote2Pos - quotePos - 1);
|
||||
|
||||
if (param == "_address")
|
||||
{
|
||||
cheat.address = strtol(value.c_str(), nullptr, 10);
|
||||
verify(cheat.address < RAM_SIZE);
|
||||
}
|
||||
else if (param == "_cheat_type")
|
||||
cheat.type = (Cheat::Type)strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_desc")
|
||||
cheat.description = value;
|
||||
else if (param == "_memory_search_size")
|
||||
cheat.size = 1 << strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_value")
|
||||
cheat.value = strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_repeat_count")
|
||||
cheat.repeatCount = strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_repeat_add_to_value")
|
||||
cheat.repeatValueIncrement = strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_repeat_add_to_address")
|
||||
cheat.repeatAddressIncrement = strtol(value.c_str(), nullptr, 10);
|
||||
else if (param == "_enable")
|
||||
cheat.enabled = value == "true";
|
||||
}
|
||||
std::fclose(cheatfile);
|
||||
if (cheat.type != Cheat::Type::disabled)
|
||||
cheats.push_back(cheat);
|
||||
active = !cheats.empty();
|
||||
INFO_LOG(COMMON, "%d cheats loaded", (int)cheats.size());
|
||||
cfgSaveStr("cheats", gameId, filename);
|
||||
}
|
||||
|
||||
void CheatManager::reset(const std::string& gameId)
|
||||
{
|
||||
if (this->gameId != gameId)
|
||||
{
|
||||
cheats.clear();
|
||||
active = false;
|
||||
this->gameId = gameId;
|
||||
std::string cheatFile = cfgLoadStr("cheats", gameId, "");
|
||||
if (!cheatFile.empty())
|
||||
loadCheatFile(cheatFile);
|
||||
}
|
||||
widescreen_cheat = nullptr;
|
||||
if (!config::WidescreenGameHacks)
|
||||
return;
|
||||
if (settings.platform.system == DC_PLATFORM_DREAMCAST)
|
||||
{
|
||||
for (int i = 0; widescreen_cheats[i].game_id != nullptr; i++)
|
||||
{
|
||||
if (!strcmp(gameId.c_str(), widescreen_cheats[i].game_id)
|
||||
&& (widescreen_cheats[i].area_or_version == nullptr
|
||||
|| !strncmp(ip_meta.area_symbols, widescreen_cheats[i].area_or_version, sizeof(ip_meta.area_symbols))
|
||||
|| !strncmp(ip_meta.product_version, widescreen_cheats[i].area_or_version, sizeof(ip_meta.product_version))))
|
||||
{
|
||||
widescreen_cheat = &widescreen_cheats[i];
|
||||
NOTICE_LOG(COMMON, "Applying widescreen hack to game %s", gameId.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; naomi_widescreen_cheats[i].game_id != nullptr; i++)
|
||||
{
|
||||
if (!strcmp(gameId.c_str(), naomi_widescreen_cheats[i].game_id))
|
||||
{
|
||||
widescreen_cheat = &naomi_widescreen_cheats[i];
|
||||
NOTICE_LOG(COMMON, "Applying widescreen hack to game %s", gameId.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (widescreen_cheat == nullptr)
|
||||
return;
|
||||
for (size_t i = 0; i < ARRAY_SIZE(widescreen_cheat->addresses) && widescreen_cheat->addresses[i] != 0; i++)
|
||||
verify(widescreen_cheat->addresses[i] < RAM_SIZE);
|
||||
}
|
||||
|
||||
u32 CheatManager::readRam(u32 addr, u32 bits)
|
||||
{
|
||||
switch (bits)
|
||||
{
|
||||
case 8:
|
||||
return ReadMem8_nommu(0x8C000000 + addr);
|
||||
case 16:
|
||||
return ReadMem16_nommu(0x8C000000 + addr);
|
||||
case 32:
|
||||
return ReadMem32_nommu(0x8C000000 + addr);
|
||||
default:
|
||||
die("invalid size");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void CheatManager::writeRam(u32 addr, u32 value, u32 bits)
|
||||
{
|
||||
switch (bits)
|
||||
{
|
||||
case 8:
|
||||
WriteMem8_nommu(0x8C000000 + addr, (u8)value);
|
||||
break;
|
||||
case 16:
|
||||
WriteMem16_nommu(0x8C000000 + addr, (u16)value);
|
||||
break;
|
||||
case 32:
|
||||
WriteMem32_nommu(0x8C000000 + addr, value);
|
||||
break;
|
||||
default:
|
||||
die("invalid size");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CheatManager::apply()
|
||||
{
|
||||
if (widescreen_cheat != nullptr)
|
||||
{
|
||||
for (size_t i = 0; i < ARRAY_SIZE(widescreen_cheat->addresses) && widescreen_cheat->addresses[i] != 0; i++)
|
||||
writeRam(widescreen_cheat->addresses[i], widescreen_cheat->values[i], 32);
|
||||
}
|
||||
if (active && !networkStarted())
|
||||
{
|
||||
bool skipCheat = false;
|
||||
for (const Cheat& cheat : cheats)
|
||||
{
|
||||
if (skipCheat) {
|
||||
skipCheat = false;
|
||||
continue;
|
||||
}
|
||||
if (!cheat.enabled)
|
||||
continue;
|
||||
|
||||
bool setValue = false;
|
||||
u32 valueToSet = 0;
|
||||
switch (cheat.type)
|
||||
{
|
||||
case Cheat::Type::disabled:
|
||||
default:
|
||||
break;
|
||||
case Cheat::Type::setValue:
|
||||
setValue = true;
|
||||
valueToSet = cheat.value;
|
||||
break;
|
||||
case Cheat::Type::increase:
|
||||
setValue = true;
|
||||
valueToSet = readRam(cheat.address, cheat.size) + cheat.value;
|
||||
break;
|
||||
case Cheat::Type::decrease:
|
||||
setValue = true;
|
||||
valueToSet = readRam(cheat.address, cheat.size) - cheat.value;
|
||||
break;
|
||||
case Cheat::Type::runNextIfEq:
|
||||
skipCheat = readRam(cheat.address, cheat.size) != cheat.value;
|
||||
break;
|
||||
case Cheat::Type::runNextIfNeq:
|
||||
skipCheat = readRam(cheat.address, cheat.size) == cheat.value;
|
||||
break;
|
||||
case Cheat::Type::runNextIfGt:
|
||||
skipCheat = readRam(cheat.address, cheat.size) <= cheat.value;
|
||||
break;
|
||||
case Cheat::Type::runNextIfLt:
|
||||
skipCheat = readRam(cheat.address, cheat.size) >= cheat.value;
|
||||
break;
|
||||
}
|
||||
if (setValue)
|
||||
{
|
||||
u32 address = cheat.address;
|
||||
for (u32 repeat = 0; repeat < cheat.repeatCount; repeat++)
|
||||
{
|
||||
writeRam(address, valueToSet, cheat.size);
|
||||
address += cheat.repeatAddressIncrement * cheat.size / 8;
|
||||
valueToSet += cheat.repeatValueIncrement;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
Created on: Sep 23, 2019
|
||||
|
||||
Copyright 2019 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
|
||||
struct WidescreenCheat
|
||||
{
|
||||
const char *game_id;
|
||||
const char *area_or_version;
|
||||
u32 addresses[16];
|
||||
u32 values[16];
|
||||
};
|
||||
|
||||
struct Cheat
|
||||
{
|
||||
enum class Type {
|
||||
disabled,
|
||||
setValue,
|
||||
increase,
|
||||
decrease,
|
||||
runNextIfEq,
|
||||
runNextIfNeq,
|
||||
runNextIfGt,
|
||||
runNextIfLt
|
||||
};
|
||||
Type type = Type::disabled;
|
||||
std::string description;
|
||||
bool enabled = false;
|
||||
u32 size = 0;
|
||||
u32 address = 0;
|
||||
u32 value = 0;
|
||||
u32 repeatCount = 1;
|
||||
u32 repeatValueIncrement = 0;
|
||||
u32 repeatAddressIncrement = 0;
|
||||
};
|
||||
|
||||
class CheatManager
|
||||
{
|
||||
public:
|
||||
void reset(const std::string& gameId);
|
||||
void apply();
|
||||
size_t cheatCount() const { return cheats.size(); }
|
||||
const std::string& cheatDescription(size_t index) const { return cheats[index].description; }
|
||||
bool cheatEnabled(size_t index) const { return cheats[index].enabled; }
|
||||
void enableCheat(size_t index, bool enabled) { cheats[index].enabled = enabled; }
|
||||
void loadCheatFile(const std::string& filename);
|
||||
// Returns true if using 16:9 anamorphic screen ratio
|
||||
bool isWidescreen() const { return widescreen_cheat != nullptr; }
|
||||
|
||||
private:
|
||||
u32 readRam(u32 addr, u32 bits);
|
||||
void writeRam(u32 addr, u32 value, u32 bits);
|
||||
|
||||
static const WidescreenCheat widescreen_cheats[];
|
||||
static const WidescreenCheat naomi_widescreen_cheats[];
|
||||
const WidescreenCheat *widescreen_cheat = nullptr;
|
||||
bool active = false;
|
||||
std::vector<Cheat> cheats;
|
||||
std::string gameId;
|
||||
};
|
||||
|
||||
extern CheatManager cheatManager;
|
||||
+35
-238
@@ -1,261 +1,58 @@
|
||||
RZDCY_FILES :=
|
||||
#LOCAL_PATH:=
|
||||
|
||||
#MFLAGS := -marm -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp
|
||||
#ASFLAGS := -march=armv7-a -mfpu=vfp-d16 -mfloat-abi=softfp
|
||||
#LDFLAGS := -g -Wl,-Map,$(notdir $@).map,--gc-sections -Wl,-O3 -Wl,--sort-common
|
||||
|
||||
RZDCY_SRC_DIR ?= $(call my-dir)
|
||||
VERSION_HEADER := $(RZDCY_SRC_DIR)/version.h
|
||||
|
||||
RZDCY_MODULES := cfg/ hw/arm7/ hw/aica/ hw/holly/ hw/ hw/gdrom/ hw/maple/ \
|
||||
hw/mem/ hw/pvr/ hw/sh4/ hw/sh4/interpr/ hw/sh4/modules/ profiler/ oslib/ \
|
||||
hw/naomi/ imgread/ ./ deps/libchdr/src/ deps/libchdr/deps/zlib-1.2.11/ \
|
||||
deps/libelf/ deps/chdpsr/ rend/ reios/ deps/xbrz/ \
|
||||
deps/imgui/ archive/ input/ log/ wsi/ network/ hw/bba/ debug/ \
|
||||
hw/modem/ deps/picotcp/modules/ deps/picotcp/stack/
|
||||
hw/mem/ hw/pvr/ hw/sh4/ hw/sh4/interpr/ hw/sh4/modules/ plugins/ profiler/ oslib/ \
|
||||
hw/extdev/ hw/arm/ imgread/ linux/ ./ deps/zlib/ deps/chdr/ deps/crypto/ deps/libelf/ deps/chdpsr/ arm_emitter/ \
|
||||
deps/libzip/ deps/libpng/ rend/
|
||||
|
||||
ifndef NO_REC
|
||||
ifndef NOT_ARM
|
||||
RZDCY_MODULES += rec-ARM/ deps/vixl/ deps/vixl/aarch32/
|
||||
endif
|
||||
|
||||
ifdef X86_REC
|
||||
RZDCY_MODULES += rec-x86/
|
||||
endif
|
||||
|
||||
ifdef X64_REC
|
||||
RZDCY_MODULES += rec-x64/
|
||||
endif
|
||||
|
||||
ifdef CPP_REC
|
||||
RZDCY_MODULES += rec-cpp/
|
||||
endif
|
||||
|
||||
ifdef ARM64_REC
|
||||
RZDCY_MODULES += rec-ARM64/ deps/vixl/ deps/vixl/aarch64/
|
||||
endif
|
||||
RZDCY_MODULES += hw/sh4/dyna/
|
||||
endif
|
||||
|
||||
ifndef NOT_ARM
|
||||
RZDCY_MODULES += rec-ARM/
|
||||
endif
|
||||
|
||||
ifndef NO_REND
|
||||
RZDCY_MODULES += rend/gles/
|
||||
ifndef USE_GLES
|
||||
ifndef USE_DISPMANX
|
||||
RZDCY_MODULES += rend/gl4/
|
||||
endif
|
||||
endif
|
||||
ifdef USE_VULKAN
|
||||
RZDCY_MODULES += rend/vulkan/ rend/vulkan/oit/ deps/volk/ \
|
||||
deps/glslang/glslang/MachineIndependent/ \
|
||||
deps/glslang/glslang/MachineIndependent/preprocessor/ \
|
||||
deps/glslang/glslang/GenericCodeGen/ \
|
||||
deps/glslang/OGLCompilersDLL/ \
|
||||
deps/glslang/SPIRV/
|
||||
ifdef FOR_WINDOWS
|
||||
RZDCY_FILES += $(RZDCY_SRC_DIR)/deps/glslang/glslang/OSDependent/Windows/ossource.cpp
|
||||
else
|
||||
RZDCY_FILES += $(RZDCY_SRC_DIR)/deps/glslang/glslang/OSDependent/Unix/ossource.cpp
|
||||
endif
|
||||
endif
|
||||
else
|
||||
RZDCY_MODULES += rend/norend/
|
||||
endif
|
||||
|
||||
ifdef USE_SDL
|
||||
RZDCY_MODULES += sdl/
|
||||
ifdef FOR_ANDROID
|
||||
RZDCY_MODULES += android/ deps/libandroid/
|
||||
endif
|
||||
|
||||
ifdef FOR_LINUX
|
||||
ifndef UNIT_TESTS
|
||||
RZDCY_MODULES += linux-dist/
|
||||
endif
|
||||
RZDCY_MODULES += linux/
|
||||
endif
|
||||
|
||||
ifdef FOR_WINDOWS
|
||||
RZDCY_MODULES += rend/dx9/
|
||||
ifndef UNIT_TESTS
|
||||
RZDCY_FILES += $(RZDCY_SRC_DIR)/windows/winmain.cpp
|
||||
endif
|
||||
RZDCY_FILES += $(RZDCY_SRC_DIR)/windows/win_vmem.cpp $(RZDCY_SRC_DIR)/windows/rawinput.cpp
|
||||
RZDCY_CFLAGS += -I$(RZDCY_SRC_DIR)/deps/dirent
|
||||
endif
|
||||
|
||||
ifdef USE_VULKAN
|
||||
ifdef FOR_WINDOWS
|
||||
RZDCY_CFLAGS += -DVK_USE_PLATFORM_WIN32_KHR
|
||||
ifdef USE_SDL
|
||||
RZDCY_MODULES += sdl/
|
||||
else
|
||||
RZDCY_CFLAGS += -DVK_USE_PLATFORM_XLIB_KHR
|
||||
RZDCY_MODULES += linux-dist/
|
||||
endif
|
||||
RZDCY_CFLAGS += -D USE_VULKAN
|
||||
endif
|
||||
|
||||
RZDCY_CFLAGS += -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/rend/gles -I$(RZDCY_SRC_DIR)/deps \
|
||||
-I$(RZDCY_SRC_DIR)/deps/vixl -I$(RZDCY_SRC_DIR)/khronos -I$(RZDCY_SRC_DIR)/deps/glslang \
|
||||
-I$(RZDCY_SRC_DIR)/deps/glm -I$(RZDCY_SRC_DIR)/deps/xbyak -I$(RZDCY_SRC_DIR)/deps/nowide/include \
|
||||
-I$(RZDCY_SRC_DIR)/deps/picotcp/include -I$(RZDCY_SRC_DIR)/deps/picotcp/modules \
|
||||
-I$(RZDCY_SRC_DIR)/deps/libchdr/include -I$(RZDCY_SRC_DIR)/deps/libchdr/deps/zlib-1.2.11/ \
|
||||
-I$(RZDCY_SRC_DIR)/deps/libchdr/deps/lzma-19.00 -I$(RZDCY_SRC_DIR)/deps/libchdr/deps/lzma-19.00/include
|
||||
|
||||
ifdef USE_SYSTEM_MINIUPNPC
|
||||
RZDCY_CFLAGS += -I/usr/include/miniupnpc
|
||||
else
|
||||
RZDCY_CFLAGS += -I$(RZDCY_SRC_DIR)/deps/miniupnpc
|
||||
endif
|
||||
|
||||
ifdef NO_REC
|
||||
RZDCY_CFLAGS += -DTARGET_NO_REC
|
||||
else
|
||||
RZDCY_MODULES += hw/sh4/dyna/
|
||||
endif
|
||||
|
||||
ifdef USE_GLES
|
||||
RZDCY_CFLAGS += -DGLES -fPIC
|
||||
endif
|
||||
|
||||
ifdef CHD5_FLAC
|
||||
RZDCY_CFLAGS += -DCHD5_FLAC -I$(RZDCY_SRC_DIR)/deps/flac/src/libFLAC/include/ -I$(RZDCY_SRC_DIR)/deps/flac/include
|
||||
RZDCY_CFLAGS += -DHAVE_CONFIG_H
|
||||
RZDCY_MODULES += deps/flac/src/libFLAC/
|
||||
endif
|
||||
|
||||
# 7-Zip/LZMA settings (CHDv5)
|
||||
ifdef CHD5_LZMA
|
||||
RZDCY_MODULES += deps/lzma/
|
||||
RZDCY_CFLAGS += -D_7ZIP_ST -DCHD5_LZMA
|
||||
endif
|
||||
|
||||
RZDCY_CFLAGS += -DXXH_INLINE_ALL -I$(RZDCY_SRC_DIR)/deps/xxHash -I$(RZDCY_SRC_DIR)/deps/stb
|
||||
|
||||
RZDCY_FILES += $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(wildcard $(dir)*.cpp))
|
||||
RZDCY_FILES += $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(wildcard $(dir)*.cc))
|
||||
RZDCY_FILES := $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(wildcard $(dir)*.cpp))
|
||||
RZDCY_FILES += $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(wildcard $(dir)*.c))
|
||||
RZDCY_FILES += $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(wildcard $(dir)*.S))
|
||||
|
||||
ifdef STATIC_LIBZIP
|
||||
RZDCY_CFLAGS += -I$(RZDCY_SRC_DIR)/deps/libzip/lib
|
||||
LIBZIP_DIR = $(RZDCY_SRC_DIR)/deps/libzip/lib
|
||||
RZDCY_FILES += $(LIBZIP_DIR)/zip_add.c \
|
||||
$(LIBZIP_DIR)/zip_add_dir.c \
|
||||
$(LIBZIP_DIR)/zip_add_entry.c \
|
||||
$(LIBZIP_DIR)/zip_algorithm_deflate.c \
|
||||
$(LIBZIP_DIR)/zip_buffer.c \
|
||||
$(LIBZIP_DIR)/zip_close.c \
|
||||
$(LIBZIP_DIR)/zip_delete.c \
|
||||
$(LIBZIP_DIR)/zip_dir_add.c \
|
||||
$(LIBZIP_DIR)/zip_dirent.c \
|
||||
$(LIBZIP_DIR)/zip_discard.c \
|
||||
$(LIBZIP_DIR)/zip_entry.c \
|
||||
$(LIBZIP_DIR)/zip_error.c \
|
||||
$(LIBZIP_DIR)/zip_error_clear.c \
|
||||
$(LIBZIP_DIR)/zip_error_get.c \
|
||||
$(LIBZIP_DIR)/zip_error_get_sys_type.c \
|
||||
$(LIBZIP_DIR)/zip_error_strerror.c \
|
||||
$(LIBZIP_DIR)/zip_error_to_str.c \
|
||||
$(LIBZIP_DIR)/zip_extra_field.c \
|
||||
$(LIBZIP_DIR)/zip_extra_field_api.c \
|
||||
$(LIBZIP_DIR)/zip_fclose.c \
|
||||
$(LIBZIP_DIR)/zip_fdopen.c \
|
||||
$(LIBZIP_DIR)/zip_file_add.c \
|
||||
$(LIBZIP_DIR)/zip_file_error_clear.c \
|
||||
$(LIBZIP_DIR)/zip_file_error_get.c \
|
||||
$(LIBZIP_DIR)/zip_file_get_comment.c \
|
||||
$(LIBZIP_DIR)/zip_file_get_external_attributes.c \
|
||||
$(LIBZIP_DIR)/zip_file_get_offset.c \
|
||||
$(LIBZIP_DIR)/zip_file_rename.c \
|
||||
$(LIBZIP_DIR)/zip_file_replace.c \
|
||||
$(LIBZIP_DIR)/zip_file_set_comment.c \
|
||||
$(LIBZIP_DIR)/zip_file_set_encryption.c \
|
||||
$(LIBZIP_DIR)/zip_file_set_external_attributes.c \
|
||||
$(LIBZIP_DIR)/zip_file_set_mtime.c \
|
||||
$(LIBZIP_DIR)/zip_file_strerror.c \
|
||||
$(LIBZIP_DIR)/zip_fopen.c \
|
||||
$(LIBZIP_DIR)/zip_fopen_encrypted.c \
|
||||
$(LIBZIP_DIR)/zip_fopen_index.c \
|
||||
$(LIBZIP_DIR)/zip_fopen_index_encrypted.c \
|
||||
$(LIBZIP_DIR)/zip_fread.c \
|
||||
$(LIBZIP_DIR)/zip_fseek.c \
|
||||
$(LIBZIP_DIR)/zip_ftell.c \
|
||||
$(LIBZIP_DIR)/zip_get_archive_comment.c \
|
||||
$(LIBZIP_DIR)/zip_get_archive_flag.c \
|
||||
$(LIBZIP_DIR)/zip_get_encryption_implementation.c \
|
||||
$(LIBZIP_DIR)/zip_get_file_comment.c \
|
||||
$(LIBZIP_DIR)/zip_get_name.c \
|
||||
$(LIBZIP_DIR)/zip_get_num_entries.c \
|
||||
$(LIBZIP_DIR)/zip_get_num_files.c \
|
||||
$(LIBZIP_DIR)/zip_hash.c \
|
||||
$(LIBZIP_DIR)/zip_io_util.c \
|
||||
$(LIBZIP_DIR)/zip_libzip_version.c \
|
||||
$(LIBZIP_DIR)/zip_memdup.c \
|
||||
$(LIBZIP_DIR)/zip_name_locate.c \
|
||||
$(LIBZIP_DIR)/zip_new.c \
|
||||
$(LIBZIP_DIR)/zip_open.c \
|
||||
$(LIBZIP_DIR)/zip_pkware.c \
|
||||
$(LIBZIP_DIR)/zip_progress.c \
|
||||
$(LIBZIP_DIR)/zip_rename.c \
|
||||
$(LIBZIP_DIR)/zip_replace.c \
|
||||
$(LIBZIP_DIR)/zip_set_archive_comment.c \
|
||||
$(LIBZIP_DIR)/zip_set_archive_flag.c \
|
||||
$(LIBZIP_DIR)/zip_set_default_password.c \
|
||||
$(LIBZIP_DIR)/zip_set_file_comment.c \
|
||||
$(LIBZIP_DIR)/zip_set_file_compression.c \
|
||||
$(LIBZIP_DIR)/zip_set_name.c \
|
||||
$(LIBZIP_DIR)/zip_source_accept_empty.c \
|
||||
$(LIBZIP_DIR)/zip_source_begin_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_begin_write_cloning.c \
|
||||
$(LIBZIP_DIR)/zip_source_buffer.c \
|
||||
$(LIBZIP_DIR)/zip_source_call.c \
|
||||
$(LIBZIP_DIR)/zip_source_close.c \
|
||||
$(LIBZIP_DIR)/zip_source_commit_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_compress.c \
|
||||
$(LIBZIP_DIR)/zip_source_crc.c \
|
||||
$(LIBZIP_DIR)/zip_source_error.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_common.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_stdio.c \
|
||||
$(LIBZIP_DIR)/zip_source_free.c \
|
||||
$(LIBZIP_DIR)/zip_source_function.c \
|
||||
$(LIBZIP_DIR)/zip_source_get_file_attributes.c \
|
||||
$(LIBZIP_DIR)/zip_source_is_deleted.c \
|
||||
$(LIBZIP_DIR)/zip_source_layered.c \
|
||||
$(LIBZIP_DIR)/zip_source_open.c \
|
||||
$(LIBZIP_DIR)/zip_source_pkware_decode.c \
|
||||
$(LIBZIP_DIR)/zip_source_pkware_encode.c \
|
||||
$(LIBZIP_DIR)/zip_source_read.c \
|
||||
$(LIBZIP_DIR)/zip_source_remove.c \
|
||||
$(LIBZIP_DIR)/zip_source_rollback_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_seek.c \
|
||||
$(LIBZIP_DIR)/zip_source_seek_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_stat.c \
|
||||
$(LIBZIP_DIR)/zip_source_supports.c \
|
||||
$(LIBZIP_DIR)/zip_source_tell.c \
|
||||
$(LIBZIP_DIR)/zip_source_tell_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_window.c \
|
||||
$(LIBZIP_DIR)/zip_source_write.c \
|
||||
$(LIBZIP_DIR)/zip_source_zip.c \
|
||||
$(LIBZIP_DIR)/zip_source_zip_new.c \
|
||||
$(LIBZIP_DIR)/zip_stat.c \
|
||||
$(LIBZIP_DIR)/zip_stat_index.c \
|
||||
$(LIBZIP_DIR)/zip_stat_init.c \
|
||||
$(LIBZIP_DIR)/zip_strerror.c \
|
||||
$(LIBZIP_DIR)/zip_string.c \
|
||||
$(LIBZIP_DIR)/zip_unchange.c \
|
||||
$(LIBZIP_DIR)/zip_unchange_all.c \
|
||||
$(LIBZIP_DIR)/zip_unchange_archive.c \
|
||||
$(LIBZIP_DIR)/zip_unchange_data.c \
|
||||
$(LIBZIP_DIR)/zip_utf-8.c \
|
||||
$(LIBZIP_DIR)/zip_err_str.c
|
||||
|
||||
ifdef FOR_WINDOWS
|
||||
RZDCY_FILES += $(LIBZIP_DIR)/zip_source_file_win32.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_win32_named.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_win32_utf16.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_win32_utf8.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_win32_ansi.c \
|
||||
$(LIBZIP_DIR)/zip_random_win32.c
|
||||
else
|
||||
RZDCY_FILES += $(LIBZIP_DIR)/zip_mkstempm.c \
|
||||
$(LIBZIP_DIR)/zip_source_file_stdio_named.c \
|
||||
$(LIBZIP_DIR)/zip_random_unix.c
|
||||
endif
|
||||
endif
|
||||
|
||||
$(VERSION_HEADER):
|
||||
echo "#define GIT_VERSION \"`git describe --tags --always`\"" > $(VERSION_HEADER)
|
||||
echo "#define GIT_HASH \"`git rev-parse --short HEAD`\"" >> $(VERSION_HEADER)
|
||||
echo "#define BUILD_DATE \"`date '+%Y-%m-%d %H:%M:%S %Z'`\"" >> $(VERSION_HEADER)
|
||||
|
||||
|
||||
ifdef FOR_PANDORA
|
||||
RZDCY_CXXFLAGS := \
|
||||
$(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \
|
||||
-DRELEASE -DPANDORA\
|
||||
-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp \
|
||||
-frename-registers -fsingle-precision-constant -ffast-math \
|
||||
-ftree-vectorize -fomit-frame-pointer -fno-exceptions -fno-rtti -std=gnu++11
|
||||
else
|
||||
RZDCY_CXXFLAGS := \
|
||||
$(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \
|
||||
-D_ANDROID -DRELEASE -DTARGET_BEAGLE\
|
||||
-march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 \
|
||||
-frename-registers -fsingle-precision-constant -ffast-math \
|
||||
-ftree-vectorize -fomit-frame-pointer -fno-exceptions -fno-rtti -std=gnu++11
|
||||
endif
|
||||
@@ -1,324 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
#include "types.h"
|
||||
#include "emulator.h"
|
||||
#include "hw/sh4/sh4_if.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#include "hw/sh4/sh4_interpreter.h"
|
||||
#include "cfg/option.h"
|
||||
#include <array>
|
||||
#include <signal.h>
|
||||
#include <map>
|
||||
|
||||
#ifndef SIGTRAP
|
||||
#define SIGTRAP 5
|
||||
#endif
|
||||
#ifndef SIGBUS
|
||||
#define SIGBUS 7
|
||||
#endif
|
||||
|
||||
const std::array<Sh4RegType, 59> Sh4RegList {
|
||||
reg_r0,
|
||||
reg_r1,
|
||||
reg_r2,
|
||||
reg_r3,
|
||||
reg_r4,
|
||||
reg_r5,
|
||||
reg_r6,
|
||||
reg_r7,
|
||||
reg_r8,
|
||||
reg_r9,
|
||||
reg_r10,
|
||||
reg_r11,
|
||||
reg_r12,
|
||||
reg_r13,
|
||||
reg_r14,
|
||||
reg_r15,
|
||||
reg_nextpc,
|
||||
reg_pr,
|
||||
reg_gbr,
|
||||
reg_vbr,
|
||||
reg_mach,
|
||||
reg_macl,
|
||||
reg_sr_status,
|
||||
|
||||
reg_fpul,
|
||||
reg_fpscr,
|
||||
reg_fr_0, reg_fr_1, reg_fr_2, reg_fr_3, reg_fr_4, reg_fr_5, reg_fr_6, reg_fr_7,
|
||||
reg_fr_8, reg_fr_9, reg_fr_10, reg_fr_11, reg_fr_12, reg_fr_13, reg_fr_14, reg_fr_15,
|
||||
reg_ssr,
|
||||
reg_spc,
|
||||
// correct?
|
||||
reg_r0, reg_r1, reg_r2, reg_r3, reg_r4, reg_r5, reg_r6, reg_r7,
|
||||
reg_r0_Bank, reg_r1_Bank, reg_r2_Bank, reg_r3_Bank, reg_r4_Bank, reg_r5_Bank, reg_r6_Bank, reg_r7_Bank,
|
||||
};
|
||||
|
||||
class DebugAgent
|
||||
{
|
||||
public:
|
||||
void doContinue(u32 pc = 1)
|
||||
{
|
||||
if (pc != 1)
|
||||
Sh4cntx.pc = pc;
|
||||
dc_resume();
|
||||
}
|
||||
|
||||
void step()
|
||||
{
|
||||
bool restoreBreakpoint = removeMatchpoint(0, Sh4cntx.pc, 2);
|
||||
u32 savedPc = Sh4cntx.pc;
|
||||
dc_step();
|
||||
if (restoreBreakpoint)
|
||||
insertMatchpoint(0, savedPc, 2);
|
||||
}
|
||||
|
||||
int readAllRegs(u32 **regs)
|
||||
{
|
||||
static std::array<u32, Sh4RegList.size()> allregs;
|
||||
for (u32 i = 0; i < Sh4RegList.size(); i++)
|
||||
{
|
||||
if (Sh4RegList[i] == reg_sr_status)
|
||||
allregs[i] = sh4_sr_GetFull();
|
||||
else if (Sh4RegList[i] != NoReg)
|
||||
allregs[i] = *GetRegPtr(Sh4RegList[i]);
|
||||
}
|
||||
*regs = &allregs[0];
|
||||
return allregs.size();
|
||||
}
|
||||
|
||||
void writeAllRegs(const std::vector<u32>& regs)
|
||||
{
|
||||
for (u32 i = 0; i < Sh4RegList.size(); i++)
|
||||
if (Sh4RegList[i] != NoReg)
|
||||
*GetRegPtr(Sh4RegList[i]) = regs[i];
|
||||
}
|
||||
|
||||
u32 readReg(u32 regNum)
|
||||
{
|
||||
if (regNum >= Sh4RegList.size())
|
||||
return 0;
|
||||
Sh4RegType reg = Sh4RegList[regNum];
|
||||
if (reg == reg_sr_status)
|
||||
return sh4_sr_GetFull();
|
||||
if (reg != NoReg)
|
||||
return *GetRegPtr(reg);
|
||||
return 0;
|
||||
}
|
||||
void writeReg(u32 regNum, u32 value)
|
||||
{
|
||||
if (regNum >= Sh4RegList.size())
|
||||
return;
|
||||
Sh4RegType reg = Sh4RegList[regNum];
|
||||
if (reg == reg_sr_status)
|
||||
sh4_sr_SetFull(value);
|
||||
else if (reg != NoReg)
|
||||
*GetRegPtr(reg) = value;
|
||||
}
|
||||
|
||||
const u8 *readMem(u32 addr, u32 len)
|
||||
{
|
||||
static std::vector<u8> data;
|
||||
data.resize(len);
|
||||
u8 *p = &data[0];
|
||||
while (len > 0)
|
||||
{
|
||||
if (len >= 4 && (addr & 3) == 0)
|
||||
{
|
||||
*(u32 *)p = ReadMem32_nommu(addr);
|
||||
addr += 4;
|
||||
len -= 4;
|
||||
p += 4;
|
||||
}
|
||||
else if (len >= 2 && (addr & 1) == 0)
|
||||
{
|
||||
*(u16 *)p = ReadMem16_nommu(addr);
|
||||
addr += 2;
|
||||
len -= 2;
|
||||
p += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
*p++ = ReadMem8_nommu(addr);
|
||||
addr++;
|
||||
len--;
|
||||
}
|
||||
}
|
||||
return &data[0];
|
||||
}
|
||||
void writeMem(u32 addr, const std::vector<u8>& data)
|
||||
{
|
||||
const u8 *p = &data[0];
|
||||
u32 len = data.size();
|
||||
while (len > 0)
|
||||
{
|
||||
if (len >= 4 && (addr & 3) == 0)
|
||||
{
|
||||
WriteMem32_nommu(addr, *(u32 *)p);
|
||||
addr += 4;
|
||||
len -= 4;
|
||||
p += 4;
|
||||
}
|
||||
else if (len >= 2 && (addr & 3) == 0)
|
||||
{
|
||||
WriteMem16_nommu(addr, *(u16 *)p);
|
||||
addr += 2;
|
||||
len -= 2;
|
||||
p += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteMem8_nommu(addr, *p++);
|
||||
addr++;
|
||||
len--;
|
||||
}
|
||||
}
|
||||
}
|
||||
bool insertMatchpoint(char type, u32 addr, u32 len)
|
||||
{
|
||||
if (type == 0 && len != 2) {
|
||||
WARN_LOG(COMMON, "insertMatchpoint: length != 2: %d", len);
|
||||
return false;
|
||||
}
|
||||
// TODO other matchpoint types
|
||||
if (breakpoints.find(addr) != breakpoints.end())
|
||||
return true;
|
||||
breakpoints[addr] = Breakpoint(type, addr);
|
||||
breakpoints[addr].savedOp = ReadMem16_nommu(addr);
|
||||
WriteMem16_nommu(addr, 0xC308); // trapa #0x20
|
||||
return true;
|
||||
}
|
||||
bool removeMatchpoint(char type, u32 addr, u32 len)
|
||||
{
|
||||
if (type == 0 && len != 2) {
|
||||
WARN_LOG(COMMON, "removeMatchpoint: length != 2: %d", len);
|
||||
return false;
|
||||
}
|
||||
auto it = breakpoints.find(addr);
|
||||
if (it == breakpoints.end())
|
||||
return false;
|
||||
WriteMem16_nommu(addr, it->second.savedOp);
|
||||
breakpoints.erase(it);
|
||||
return true;
|
||||
}
|
||||
|
||||
u32 interrupt()
|
||||
{
|
||||
config::DynarecEnabled = false;
|
||||
exception = SIGINT;
|
||||
dc_stop();
|
||||
return exception;
|
||||
}
|
||||
|
||||
// called on the emu thread
|
||||
void debugTrap(u32 event)
|
||||
{
|
||||
exception = findException(event);
|
||||
Sh4cntx.pc -= 2; // FIXME delay slot
|
||||
}
|
||||
|
||||
void postDebugTrap()
|
||||
{
|
||||
// needed to join the emu thread since debugTrap() is called by it
|
||||
dc_stop();
|
||||
}
|
||||
|
||||
u32 currentException()
|
||||
{
|
||||
return exception;
|
||||
}
|
||||
|
||||
void restart()
|
||||
{
|
||||
dc_stop();
|
||||
dc_reset(true);
|
||||
dc_resume();
|
||||
}
|
||||
|
||||
void detach()
|
||||
{
|
||||
dc_resume();
|
||||
}
|
||||
|
||||
void kill()
|
||||
{
|
||||
dc_exit();
|
||||
}
|
||||
|
||||
void resetAgent()
|
||||
{
|
||||
stack.clear();
|
||||
}
|
||||
|
||||
int findException(u32 event)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case 0x0A0: // Instruction/data TLB protection violation exception (read)
|
||||
case 0x0C0: // Data TLB protection violation exception (write)
|
||||
return SIGSEGV;
|
||||
case 0x0E0: // Instruction/data address error (read)
|
||||
case 0x100: // data address error (write)
|
||||
return SIGBUS;
|
||||
case 0x160: // trapa
|
||||
case 0x1E0: // User break before/after instruction execution
|
||||
return SIGTRAP;
|
||||
case 0x180: // General illegal instruction exception
|
||||
case 0x1A0: // Slot illegal instruction exception
|
||||
return SIGILL;
|
||||
case 0x120: // FPU exception
|
||||
case 0x800: // General FPU disable exception
|
||||
case 0x820: // Slot FPU disable exception
|
||||
return SIGFPE;
|
||||
default:
|
||||
return SIGABRT;
|
||||
}
|
||||
}
|
||||
|
||||
const u32 *getStack(u32& size)
|
||||
{
|
||||
verify(!Sh4cntx.CpuRunning);
|
||||
size = stack.size() * 8;
|
||||
return (const u32 *)&stack[0];
|
||||
}
|
||||
|
||||
void subroutineCall()
|
||||
{
|
||||
subroutineReturn();
|
||||
stack.push_back(std::make_pair(Sh4cntx.pc, Sh4cntx.r[15]));
|
||||
}
|
||||
|
||||
void subroutineReturn()
|
||||
{
|
||||
while (!stack.empty() && Sh4cntx.r[15] >= stack.back().second)
|
||||
stack.pop_back();
|
||||
}
|
||||
|
||||
u32 exception = 0;
|
||||
|
||||
struct Breakpoint {
|
||||
Breakpoint() = default;
|
||||
Breakpoint(u16 type, u32 addr) : addr(addr), type(type) { }
|
||||
u32 addr = 0;
|
||||
u16 type = 0;
|
||||
u16 savedOp = 0;
|
||||
};
|
||||
std::map<u32, Breakpoint> breakpoints;
|
||||
std::vector<std::pair<u32, u32>> stack;
|
||||
};
|
||||
@@ -1,883 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "types.h"
|
||||
|
||||
#ifdef GDB_SERVER
|
||||
#include "gdb_server.h"
|
||||
#include "debug_agent.h"
|
||||
#include "network/net_platform.h"
|
||||
#include <stdexcept>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include <mutex>
|
||||
|
||||
#define SERVER_PORT 3263
|
||||
|
||||
namespace debugger {
|
||||
|
||||
static void emuEventCallback(Event event);
|
||||
|
||||
class GdbServer
|
||||
{
|
||||
public:
|
||||
struct Error : public std::runtime_error {
|
||||
Error(const char *reason) : std::runtime_error(reason) {}
|
||||
};
|
||||
|
||||
void init()
|
||||
{
|
||||
if (VALID(serverSocket))
|
||||
return;
|
||||
|
||||
serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (!VALID(serverSocket))
|
||||
throw Error("gdb: Cannot create server socket");
|
||||
|
||||
int option = 1;
|
||||
setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (const char *)&option, sizeof(option));
|
||||
|
||||
struct sockaddr_in serveraddr;
|
||||
memset(&serveraddr, 0, sizeof(serveraddr));
|
||||
serveraddr.sin_family = AF_INET;
|
||||
serveraddr.sin_port = htons(SERVER_PORT);
|
||||
|
||||
if (::bind(serverSocket, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
|
||||
{
|
||||
closesocket(serverSocket);
|
||||
throw Error("gdb: bind() failed");
|
||||
}
|
||||
if (::listen(serverSocket, 5) < 0)
|
||||
{
|
||||
closesocket(serverSocket);
|
||||
throw Error("gdb: listen() failed");
|
||||
}
|
||||
EventManager::listen(Event::Resume, emuEventCallback);
|
||||
EventManager::listen(Event::Terminate, emuEventCallback);
|
||||
}
|
||||
|
||||
void term()
|
||||
{
|
||||
stop();
|
||||
if (VALID(clientSocket))
|
||||
{
|
||||
closesocket(clientSocket);
|
||||
clientSocket = INVALID_SOCKET;
|
||||
}
|
||||
if (VALID(serverSocket))
|
||||
{
|
||||
closesocket(serverSocket);
|
||||
serverSocket = INVALID_SOCKET;
|
||||
}
|
||||
}
|
||||
|
||||
void run()
|
||||
{
|
||||
DEBUG_LOG(COMMON, "GdbServer starting");
|
||||
thread = std::thread(&GdbServer::serverThread, this);
|
||||
}
|
||||
|
||||
void stop()
|
||||
{
|
||||
if (thread.joinable())
|
||||
{
|
||||
DEBUG_LOG(COMMON, "GdbServer stopping");
|
||||
agent.resetAgent();
|
||||
stopRequested = true;
|
||||
thread.join();
|
||||
}
|
||||
}
|
||||
|
||||
bool isRunning() const {
|
||||
return thread.joinable();
|
||||
}
|
||||
|
||||
// called on the emu thread
|
||||
void debugTrap(u32 event)
|
||||
{
|
||||
if (!attached)
|
||||
return;
|
||||
agent.debugTrap(event);
|
||||
reportException();
|
||||
postDebugTrapNeeded = true;
|
||||
throw Stop();
|
||||
}
|
||||
|
||||
private:
|
||||
const u32 EXCEPT_NONE = 1;
|
||||
|
||||
void serverThread()
|
||||
{
|
||||
while (!stopRequested)
|
||||
{
|
||||
fd_set fds;
|
||||
FD_ZERO(&fds);
|
||||
sock_t max_fd = serverSocket;
|
||||
FD_SET(serverSocket, &fds);
|
||||
if (VALID(clientSocket))
|
||||
{
|
||||
max_fd = std::max(max_fd, clientSocket);
|
||||
FD_SET(clientSocket, &fds);
|
||||
}
|
||||
timeval tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = 100 * 1000;
|
||||
if (::select(max_fd + 1, &fds, nullptr, nullptr, &tv) > 0)
|
||||
{
|
||||
if (FD_ISSET(serverSocket, &fds))
|
||||
{
|
||||
try {
|
||||
acceptClientConnection();
|
||||
} catch (const Error& e) {
|
||||
ERROR_LOG(COMMON, "%s", e.what());
|
||||
closesocket(serverSocket);
|
||||
serverSocket = INVALID_SOCKET;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (FD_ISSET(clientSocket, &fds))
|
||||
{
|
||||
readCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (VALID(clientSocket))
|
||||
{
|
||||
closesocket(clientSocket);
|
||||
clientSocket = INVALID_SOCKET;
|
||||
}
|
||||
attached = false;
|
||||
stopRequested = false;
|
||||
}
|
||||
|
||||
void acceptClientConnection()
|
||||
{
|
||||
if (VALID(clientSocket))
|
||||
closesocket(clientSocket);
|
||||
sockaddr_in src_addr{};
|
||||
socklen_t addr_len = sizeof(src_addr);
|
||||
clientSocket = ::accept(serverSocket, (sockaddr *)&src_addr, &addr_len);
|
||||
if (!VALID(clientSocket))
|
||||
{
|
||||
if (get_last_error() != L_EAGAIN && get_last_error() != L_EWOULDBLOCK)
|
||||
throw Error("accept failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
NOTICE_LOG(NETWORK, "gdb: client connection");
|
||||
attached = true;
|
||||
agent.interrupt();
|
||||
}
|
||||
}
|
||||
|
||||
void readCommand()
|
||||
{
|
||||
if (postDebugTrapNeeded)
|
||||
{
|
||||
postDebugTrapNeeded = false;
|
||||
agent.postDebugTrap();
|
||||
}
|
||||
try {
|
||||
std::string packet = recvPacket();
|
||||
if (packet.empty())
|
||||
return;
|
||||
|
||||
DEBUG_LOG(NETWORK, "gdb: recv %s", packet.c_str());
|
||||
switch (packet[0])
|
||||
{
|
||||
case '!': // Enable extended mode
|
||||
sendPacket("OK");
|
||||
break;
|
||||
case '?': // Sent when connection is first established to query the reason the target halted
|
||||
reportException();
|
||||
break;
|
||||
case 'A': // Initialized argv[] array passed into program. not supported
|
||||
sendPacket("E01");
|
||||
break;;
|
||||
case 'b': // Change the serial line speed to baud. deprecated
|
||||
break;
|
||||
case 'B': // Set or clear a breakpoint at addr. deprecated
|
||||
break;
|
||||
case 'c': // Continue at addr, which is the address to resume.
|
||||
// If addr is omitted, resume at current address
|
||||
sendContinue(packet);
|
||||
break;
|
||||
case 'C': // Continue with signal sig
|
||||
sendContinue(packet);
|
||||
break;
|
||||
case 'd': // Toggle debug flag. deprecated
|
||||
break;
|
||||
case 'D': // Detach GDB from the remote system
|
||||
sendPacket("OK");
|
||||
agent.detach();
|
||||
break;
|
||||
case 'F': // File-I/O protocol extension not currently supported
|
||||
break;;
|
||||
case 'g': // Read general registers
|
||||
readAllRegs();
|
||||
break;
|
||||
case 'G': // Write general registers
|
||||
writeAllRegs(packet);
|
||||
break;
|
||||
case 'H': // Set thread for subsequent operations
|
||||
sendPacket("OK");
|
||||
break;
|
||||
case 'i': // Step the remote target by a single clock cycle
|
||||
case 'I': // Signal, then cycle step
|
||||
// not supported
|
||||
sendPacket("");
|
||||
break;
|
||||
case 'k': // Kill request. Stop process/system
|
||||
agent.kill();
|
||||
break;
|
||||
case 'm': // Read length addressable memory units
|
||||
readMem(packet);
|
||||
break;
|
||||
case 'M': // Write length addressable memory units
|
||||
writeMem(packet);
|
||||
break;
|
||||
case 'p': // Read the value of register
|
||||
readReg(packet);
|
||||
break;
|
||||
case 'P': // Write register
|
||||
writeReg(packet);
|
||||
break;
|
||||
case 'q': // General query packets
|
||||
query(packet);
|
||||
break;
|
||||
case 'Q': // General set packets
|
||||
set(packet);
|
||||
break;
|
||||
case 'r': // Reset the entire system. Deprecated (use 'R' instead)
|
||||
break;
|
||||
case 'R': // Restart the program being debugged.
|
||||
restart();
|
||||
break;
|
||||
case 's': // Single step
|
||||
step(EXCEPT_NONE);
|
||||
break;
|
||||
case 'S': // Step with signal
|
||||
step();
|
||||
break;
|
||||
case 't': // Search backwards. unsupported
|
||||
break;
|
||||
case 'T': // Find out if the thread is alive
|
||||
sendPacket("OK");
|
||||
break;
|
||||
case 'v': // 'v' packets to control execution
|
||||
vpacket(packet);
|
||||
break;
|
||||
case 'X': // Write binary data to memory
|
||||
writeMemBin(packet);
|
||||
break;
|
||||
case 'z': // Remove a breakpoint/watchpoint.
|
||||
removeMatchpoint(packet);
|
||||
break;
|
||||
case 'Z': // Insert a breakpoint/watchpoint.
|
||||
insertMatchpoint(packet);
|
||||
break;
|
||||
case 3:
|
||||
interrupt();
|
||||
break;
|
||||
default:
|
||||
// Unknown commands are ignored
|
||||
WARN_LOG(COMMON, "Unknown gdb command: %s", packet.c_str());
|
||||
break;;
|
||||
}
|
||||
} catch (const Error& e) {
|
||||
ERROR_LOG(COMMON, "%s", e.what());
|
||||
closesocket(clientSocket);
|
||||
clientSocket = INVALID_SOCKET;
|
||||
attached = false;
|
||||
}
|
||||
}
|
||||
|
||||
void reportException()
|
||||
{
|
||||
char s[4];
|
||||
sprintf(s, "S%02X", agent.currentException());
|
||||
sendPacket(s);
|
||||
}
|
||||
|
||||
void sendContinue(const std::string& pkt)
|
||||
{
|
||||
if (pkt[0] != 'c') {
|
||||
WARN_LOG(COMMON, "Continue with signal not supported");
|
||||
return;
|
||||
}
|
||||
|
||||
if (pkt == "c")
|
||||
agent.doContinue();
|
||||
else
|
||||
{
|
||||
// Get the pc at which to resume
|
||||
u32 addr;
|
||||
if (sscanf(pkt.c_str(), "c%x", &addr) != 1)
|
||||
{
|
||||
WARN_LOG(COMMON, "Continue address invalid %s", pkt.c_str());
|
||||
return;
|
||||
}
|
||||
agent.doContinue(addr);
|
||||
}
|
||||
}
|
||||
|
||||
void readAllRegs()
|
||||
{
|
||||
u32 *regs;
|
||||
int c = agent.readAllRegs(®s);
|
||||
std::string outpkt;
|
||||
for (int i = 0; i < c; i++)
|
||||
outpkt += pack(regs[i]);
|
||||
sendPacket(outpkt);
|
||||
}
|
||||
|
||||
void writeAllRegs(const std::string& pkt)
|
||||
{
|
||||
std::vector<u32> regs;
|
||||
for (auto it = pkt.begin() + 1; it <= pkt.end() - 8; it += 8)
|
||||
regs.push_back(unpack(&*it, 8));
|
||||
|
||||
agent.writeAllRegs(regs);
|
||||
sendPacket("OK");
|
||||
}
|
||||
|
||||
void readMem(const std::string& pkt)
|
||||
{
|
||||
u32 addr;
|
||||
u32 len;
|
||||
if (sscanf(pkt.c_str(), "m%x,%x:", &addr, &len) != 2)
|
||||
{
|
||||
WARN_LOG(COMMON, "readMem: invalid packet %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
return;
|
||||
}
|
||||
const u8 *mem = agent.readMem(addr, len);
|
||||
std::string outpkt;
|
||||
for (u32 i = 0; i < len; i++)
|
||||
{
|
||||
char s[3];
|
||||
sprintf(s,"%02x", mem[i]);
|
||||
outpkt += s;
|
||||
}
|
||||
sendPacket(outpkt);
|
||||
}
|
||||
|
||||
void writeMem(const std::string& pkt)
|
||||
{
|
||||
u32 addr;
|
||||
u32 len;
|
||||
if (sscanf(pkt.c_str(), "M%x,%x:", &addr, &len) != 2)
|
||||
{
|
||||
WARN_LOG(COMMON, "writeMem: invalid packet %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
return;
|
||||
}
|
||||
std::vector<u8> data(len);
|
||||
const char *p = &pkt[pkt.find(':')] + 1;
|
||||
for (u32 i = 0; i < len; i++, p += 2)
|
||||
{
|
||||
u32 b;
|
||||
sscanf(p,"%2x", &b);
|
||||
data[i] = (u8)b;
|
||||
}
|
||||
agent.writeMem(addr, data);
|
||||
sendPacket("OK");
|
||||
}
|
||||
|
||||
void writeMemBin(const std::string& pkt)
|
||||
{
|
||||
u32 addr;
|
||||
u32 len;
|
||||
if (sscanf(pkt.c_str(), "X%x,%x:", &addr, &len) != 2)
|
||||
{
|
||||
WARN_LOG(COMMON, "writeMemBin invalid command: %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
return;
|
||||
}
|
||||
const char *p = &pkt[pkt.find(':')] + 1;
|
||||
std::vector<u8> data;
|
||||
data.reserve(pkt.length() - (p - &pkt[0]));
|
||||
for (; p <= &pkt.back(); p++)
|
||||
{
|
||||
u8 b = *p;
|
||||
if (b == '}')
|
||||
{
|
||||
b = *++p ^ 0x20;
|
||||
}
|
||||
data.push_back(b);
|
||||
}
|
||||
agent.writeMem(addr, data);
|
||||
sendPacket("OK");
|
||||
}
|
||||
|
||||
void readReg(const std::string& pkt)
|
||||
{
|
||||
u32 regNum;
|
||||
if (sscanf(pkt.c_str(), "p%x", ®Num) != 1)
|
||||
{
|
||||
WARN_LOG(COMMON, "readReg: invalid packet %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
return;
|
||||
}
|
||||
u32 v = agent.readReg(regNum);
|
||||
sendPacket(pack(v));
|
||||
}
|
||||
|
||||
void writeReg(const std::string& pkt)
|
||||
{
|
||||
u32 regNum;
|
||||
char vstr[9];
|
||||
if (sscanf(pkt.c_str(), "P%x=%8s", ®Num, vstr) != 2)
|
||||
{
|
||||
WARN_LOG(COMMON, "writeReg: invalid packet %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
return;
|
||||
}
|
||||
agent.writeReg(regNum, unpack(vstr, 8));
|
||||
sendPacket("OK");
|
||||
}
|
||||
|
||||
void query(const std::string& pkt)
|
||||
{
|
||||
if (pkt == "qC")
|
||||
// Return the current thread ID. 0 is "any thread"
|
||||
sendPacket("QC0.01");
|
||||
else if (pkt.rfind("qCRC", 0) == 0)
|
||||
{
|
||||
WARN_LOG(COMMON, "CRC compute not supported %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
}
|
||||
else if (pkt == "qfThreadInfo")
|
||||
// Obtain a list of all active thread IDs (first call)
|
||||
sendPacket("m0");
|
||||
else if (pkt == "qsThreadInfo")
|
||||
// Obtain a list of all active thread IDs (subsequent calls -> 'l' == end of list)
|
||||
sendPacket("l");
|
||||
else if (pkt.rfind("qGetTLSAddr:", 0) == 0)
|
||||
// Fetch the address associated with thread local storage
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qL", 0) == 0)
|
||||
// Obtain thread information. deprecated
|
||||
sendPacket("qM001");
|
||||
else if (pkt == "qOffsets")
|
||||
// Get section offsets. Not supported
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qP", 0) == 0)
|
||||
// Returns information on thread. deprecated
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qRcmd,", 0) == 0)
|
||||
{
|
||||
std::string customCmd;
|
||||
for (const char *p = pkt.c_str() + 6; *p != '\0'; p += 2)
|
||||
customCmd += (char)unpack(p, 2);
|
||||
DEBUG_LOG(COMMON, "query: custom command %s", customCmd.c_str());
|
||||
if (customCmd == "reset")
|
||||
restart();
|
||||
else if (customCmd == "stack")
|
||||
{
|
||||
u32 len;
|
||||
const u32 *data = agent.getStack(len);
|
||||
len /= 4;
|
||||
|
||||
char reply[len * 9 * 2 + 1];
|
||||
char *r = reply;
|
||||
for (u32 i = 0; i < len; i++)
|
||||
{
|
||||
char n[10];
|
||||
sprintf(n, "%08x ", *data++);
|
||||
for (char *p = n; *p != 0; p++)
|
||||
{
|
||||
*r++ = packnb((*p >> 4) & 0xf);
|
||||
*r++ = packnb(*p & 0xf);
|
||||
}
|
||||
}
|
||||
*r = 0;
|
||||
sendPacket(reply);
|
||||
}
|
||||
else
|
||||
sendPacket("");
|
||||
}
|
||||
else if (pkt.rfind("qSupported", 0) == 0)
|
||||
// Tell the remote stub about features supported by GDB,
|
||||
// and query the stub for features it supports
|
||||
sendPacket("PacketSize=10000");
|
||||
else if (pkt.rfind("qSymbol:", 0) == 0)
|
||||
// Notify the target that GDB is prepared to serve symbol lookup requests
|
||||
sendPacket("OK");
|
||||
else if (pkt.rfind("qThreadExtraInfo,", 0) == 0)
|
||||
{
|
||||
// Obtain from the target OS a printable string description of thread attributes
|
||||
char s[19];
|
||||
sprintf(s, "%02x%02x%02x%02x%02x%02x%02x%02x%02x", 'R', 'u', 'n', 'n', 'a', 'b', 'l', 'e', 0);
|
||||
sendPacket(std::string(s, 18));
|
||||
}
|
||||
else if (pkt.rfind("qXfer:", 0) == 0)
|
||||
// Read uninterpreted bytes from the target’s special data area identified by the keyword object
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qAttached", 0) == 0)
|
||||
// Return an indication of whether the remote server attached to an existing process
|
||||
// or created a new process
|
||||
sendPacket("1"); // existing process
|
||||
else if (pkt.rfind("qTfV", 0) == 0)
|
||||
// request data about trace state variables
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qTfP", 0) == 0)
|
||||
// request data about tracepoints
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("qTStatus", 0) == 0)
|
||||
// Ask the stub if there is a trace experiment running right now
|
||||
sendPacket("");
|
||||
else
|
||||
WARN_LOG(COMMON, "query not supported %s", pkt.c_str());
|
||||
}
|
||||
|
||||
void set(const std::string& pkt)
|
||||
{
|
||||
if (pkt.rfind("QPassSignals:", 0) == 0)
|
||||
// Passing signals not supported
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("QTDP", 0) == 0
|
||||
|| pkt.rfind("QFrame", 0) == 0
|
||||
|| pkt.rfind("QTStart", 0) == 0
|
||||
|| pkt.rfind("QTStop", 0) == 0
|
||||
|| pkt.rfind("QTinit", 0) == 0
|
||||
|| pkt.rfind("QTro", 0) == 0)
|
||||
// No tracepoint feature supported
|
||||
sendPacket("");
|
||||
else
|
||||
WARN_LOG(COMMON, "set not supported %s", pkt.c_str());
|
||||
}
|
||||
|
||||
void vpacket(const std::string& pkt)
|
||||
{
|
||||
if (pkt.rfind("vAttach;", 0) == 0)
|
||||
sendPacket("S05");
|
||||
else if (pkt.rfind("vCont?", 0) == 0)
|
||||
// not supported
|
||||
sendPacket("vCont;s;c");
|
||||
else if (pkt.rfind("vCont", 0) == 0)
|
||||
// not supported
|
||||
WARN_LOG(COMMON, "vCont not supported %s", pkt.c_str());
|
||||
else if (pkt.rfind("vFile:", 0) == 0)
|
||||
// not supported
|
||||
sendPacket("");
|
||||
else if (pkt.rfind("vFlashErase:", 0) == 0)
|
||||
// not supported
|
||||
sendPacket("E01");
|
||||
else if (pkt.rfind("vFlashWrite:", 0) == 0)
|
||||
// not supported
|
||||
sendPacket("E01");
|
||||
else if (pkt.rfind("vFlashDone:", 0) == 0)
|
||||
// not supported
|
||||
sendPacket("E01");
|
||||
else if (pkt.rfind("vRun;", 0) == 0)
|
||||
{
|
||||
if (pkt != "vRun;")
|
||||
WARN_LOG(COMMON, "unexpected vRun args ignored: %s", pkt.c_str());
|
||||
agent.restart();
|
||||
sendPacket("S05");
|
||||
}
|
||||
else if (pkt.rfind("vKill", 0) == 0)
|
||||
{
|
||||
sendPacket("OK");
|
||||
agent.kill();
|
||||
}
|
||||
else if (pkt.rfind("vMustReplyEmpty", 0) == 0)
|
||||
// Reply empty packet
|
||||
sendPacket("");
|
||||
else
|
||||
WARN_LOG(COMMON, "unknown v packet: %s", pkt.c_str());
|
||||
}
|
||||
|
||||
void restart()
|
||||
{
|
||||
agent.restart();
|
||||
}
|
||||
|
||||
void step(u32 what = 0)
|
||||
{
|
||||
agent.step();
|
||||
sendPacket("S05");
|
||||
}
|
||||
|
||||
void insertMatchpoint(const std::string& pkt)
|
||||
{
|
||||
u32 type;
|
||||
u32 addr;
|
||||
u32 len;
|
||||
if (sscanf(pkt.c_str(), "Z%1d,%x,%1d", &type, &addr, &len) != 3) {
|
||||
WARN_LOG(COMMON, "insertMatchpoint: unknown packet: %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
}
|
||||
switch (type) {
|
||||
case 0: // soft bp
|
||||
if (agent.insertMatchpoint(0, addr, len))
|
||||
sendPacket("OK");
|
||||
else
|
||||
sendPacket("E01");
|
||||
break;
|
||||
case 1: // hardware bp
|
||||
sendPacket("");
|
||||
break;
|
||||
case 2: // write watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
case 3: // read watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
case 4: // access watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
default:
|
||||
sendPacket("");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void removeMatchpoint(const std::string& pkt)
|
||||
{
|
||||
u32 type;
|
||||
u32 addr;
|
||||
u32 len;
|
||||
if (sscanf(pkt.c_str(), "z%1d,%x,%1d", &type, &addr, &len) != 3) {
|
||||
WARN_LOG(COMMON, "removeMatchpoint: unknown packet: %s", pkt.c_str());
|
||||
sendPacket("E01");
|
||||
}
|
||||
switch (type) {
|
||||
case 0: // soft bp
|
||||
if (agent.removeMatchpoint(0, addr, len))
|
||||
sendPacket("OK");
|
||||
else
|
||||
sendPacket("E01");
|
||||
break;
|
||||
case 1: // hardware bp
|
||||
sendPacket("");
|
||||
break;
|
||||
case 2: // write watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
case 3: // read watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
case 4: // access watchpoint
|
||||
sendPacket("");
|
||||
break;
|
||||
default:
|
||||
sendPacket("");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void interrupt()
|
||||
{
|
||||
u32 signal = agent.interrupt();
|
||||
char s[10];
|
||||
sprintf(s, "S%02x", signal);
|
||||
sendPacket(s);
|
||||
}
|
||||
|
||||
char recvChar()
|
||||
{
|
||||
char c;
|
||||
int rc = ::recv(clientSocket, &c, 1, 0);
|
||||
if (rc <= 0)
|
||||
throw Error("gdb: I/O error");
|
||||
return c;
|
||||
}
|
||||
|
||||
void sendChar(char c)
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(outMutex);
|
||||
int rc = ::send(clientSocket, &c, 1, 0);
|
||||
if (rc <= 0)
|
||||
throw Error("gdb: I/O error");
|
||||
}
|
||||
|
||||
u8 unpack(char c)
|
||||
{
|
||||
c = std::tolower(c);
|
||||
if (c <= '9')
|
||||
return c - '0';
|
||||
else
|
||||
return c - 'a' + 10;
|
||||
}
|
||||
|
||||
char packnb(u8 b)
|
||||
{
|
||||
if (b < 10)
|
||||
return '0' + b;
|
||||
else
|
||||
return 'a' + b - 10;
|
||||
}
|
||||
|
||||
std::string packb(u8 v)
|
||||
{
|
||||
std::string s(1, packnb((v >> 4) & 0xf));
|
||||
s += packnb(v & 0xf);
|
||||
return s;
|
||||
}
|
||||
|
||||
std::string pack(u32 v)
|
||||
{
|
||||
return packb(v & 0xff) + packb((v >> 8) & 0xff)
|
||||
+ packb((v >> 16) & 0xff) + packb((v >> 24) & 0xff);
|
||||
}
|
||||
|
||||
u32 unpack(const char *s, int l)
|
||||
{
|
||||
u32 r = 0;
|
||||
for (int i = 0; i < l && *s != '\0'; i += 2, s += 2)
|
||||
{
|
||||
r |= (unpack(s[0]) << 4 | unpack(s[1])) << (i * 4);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
std::string recvPacket()
|
||||
{
|
||||
std::string pkt;
|
||||
// look for start character ('$') or BREAK
|
||||
char c = recvChar();
|
||||
if (c == 3)
|
||||
return std::string("\03");
|
||||
if (c != '$')
|
||||
return pkt;
|
||||
|
||||
// read until '#'
|
||||
u8 checksum = 0;
|
||||
while (!stopRequested)
|
||||
{
|
||||
c = recvChar();
|
||||
if (c == '$')
|
||||
{
|
||||
checksum = 0;
|
||||
pkt.clear();
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c == '#')
|
||||
break;
|
||||
|
||||
checksum += (u8)c;
|
||||
pkt.push_back(c);
|
||||
}
|
||||
if (stopRequested)
|
||||
{
|
||||
pkt.clear();
|
||||
return pkt;
|
||||
}
|
||||
u8 recvchk = unpack(recvChar()) << 4;
|
||||
recvchk |= unpack(recvChar());
|
||||
|
||||
// If the checksums don't match print a warning, and put the
|
||||
// negative ack back to the client. Otherwise put a positive ack.
|
||||
if (checksum != recvchk)
|
||||
{
|
||||
sendChar('-'); // Failed checksum
|
||||
return "";
|
||||
}
|
||||
else
|
||||
{
|
||||
sendChar('+'); // Successful transfer
|
||||
return pkt;
|
||||
}
|
||||
}
|
||||
|
||||
void sendPacket(const std::string& pkt)
|
||||
{ DEBUG_LOG(NETWORK, "gdb: sending pkt");
|
||||
std::unique_lock<std::mutex> lock(outMutex);
|
||||
std::string data{'$'};
|
||||
u8 checksum = 0;
|
||||
for (char c : pkt)
|
||||
{
|
||||
if (c == '$' || c == '#' || c == '*' || c == '}')
|
||||
{
|
||||
c ^= 0x20;
|
||||
checksum += (u8)'}';
|
||||
data.push_back('}');
|
||||
}
|
||||
checksum += (u8)c;
|
||||
data.push_back(c);
|
||||
}
|
||||
data.push_back('#');
|
||||
char s[9];
|
||||
sprintf(s, "%02x", checksum);
|
||||
data += s;
|
||||
DEBUG_LOG(NETWORK, "gdb: sent %s", data.c_str());
|
||||
int ret = ::send(clientSocket, data.c_str(), data.length(), 0);
|
||||
if (ret < (int)data.length())
|
||||
throw Error("I/O error");
|
||||
}
|
||||
|
||||
bool stopRequested = false;
|
||||
bool attached = false;
|
||||
bool postDebugTrapNeeded = false;
|
||||
sock_t serverSocket = INVALID_SOCKET;
|
||||
sock_t clientSocket = INVALID_SOCKET;
|
||||
std::thread thread;
|
||||
std::mutex outMutex;
|
||||
public:
|
||||
DebugAgent agent;
|
||||
};
|
||||
|
||||
static GdbServer gdbServer;
|
||||
|
||||
void init()
|
||||
{
|
||||
gdbServer.init();
|
||||
}
|
||||
|
||||
void term()
|
||||
{
|
||||
gdbServer.term();
|
||||
}
|
||||
|
||||
void debugTrap(u32 event)
|
||||
{
|
||||
gdbServer.debugTrap(event);
|
||||
}
|
||||
|
||||
void subroutineCall()
|
||||
{
|
||||
gdbServer.agent.subroutineCall();
|
||||
}
|
||||
|
||||
void subroutineReturn()
|
||||
{
|
||||
gdbServer.agent.subroutineReturn();
|
||||
}
|
||||
|
||||
static void emuEventCallback(Event event)
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case Event::Resume:
|
||||
if (!gdbServer.isRunning())
|
||||
gdbServer.run();
|
||||
break;
|
||||
case Event::Terminate:
|
||||
gdbServer.stop();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@@ -1,43 +0,0 @@
|
||||
/*
|
||||
Copyright 2021 flyinghead
|
||||
|
||||
This file is part of Flycast.
|
||||
|
||||
Flycast is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Flycast is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Flycast. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
namespace debugger {
|
||||
|
||||
// exception thrown in response to trap
|
||||
struct Stop { };
|
||||
|
||||
#ifdef GDB_SERVER
|
||||
|
||||
void init();
|
||||
void term();
|
||||
void run();
|
||||
void debugTrap(u32 event);
|
||||
void subroutineCall();
|
||||
void subroutineReturn();
|
||||
|
||||
#else
|
||||
static inline void init() {}
|
||||
static inline void term() {}
|
||||
static inline void run() {}
|
||||
static inline void debugTrap(u32 event) {}
|
||||
static inline void subroutineCall() {}
|
||||
static inline void subroutineReturn() {}
|
||||
#endif
|
||||
}
|
||||
Submodule core/deps/SDL deleted from 178ae70a29.
+13
-23
@@ -11,6 +11,7 @@ unsigned long temp_value;
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
unsigned long ask_type(FILE *fsource, long header_position)
|
||||
{
|
||||
|
||||
@@ -41,8 +42,8 @@ unsigned long track_mode;
|
||||
void CDI_read_track (FILE *fsource, image_s *image, track_s *track)
|
||||
{
|
||||
|
||||
unsigned char TRACK_START_MARK[10] = { 0, 0, 0x01, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
unsigned char current_start_mark[10];
|
||||
char TRACK_START_MARK[10] = { 0, 0, 0x01, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF };
|
||||
char current_start_mark[10];
|
||||
|
||||
fread(&temp_value, 4, 1, fsource);
|
||||
if (temp_value != 0)
|
||||
@@ -79,9 +80,7 @@ void CDI_read_track (FILE *fsource, image_s *image, track_s *track)
|
||||
case 0 : track->sector_size = 2048; break;
|
||||
case 1 : track->sector_size = 2336; break;
|
||||
case 2 : track->sector_size = 2352; break;
|
||||
case 4 : track->sector_size = 2448; break;
|
||||
default: printf("Unsupported sector size. value %ld\n", track->sector_size_value);
|
||||
break;
|
||||
default: printf("Unsupported sector size");
|
||||
}
|
||||
|
||||
if (track->mode > 2) printf( "Unsupported format: Track mode not supported");
|
||||
@@ -109,28 +108,19 @@ void CDI_get_tracks (FILE *fsource, image_s *image)
|
||||
fread(&image->tracks, 2, 1, fsource);
|
||||
}
|
||||
|
||||
bool CDI_init (FILE *fsource, image_s *image, const char *fsourcename)
|
||||
void CDI_init (FILE *fsource, image_s *image, char *fsourcename)
|
||||
{
|
||||
fseek(fsource, 0, SEEK_END);
|
||||
image->length = ftell(fsource);
|
||||
fseek(fsource, 0L, SEEK_END);
|
||||
image->length = ftell(fsource);
|
||||
|
||||
if (image->length < 8)
|
||||
{
|
||||
printf("%s: Image file is too short\n", fsourcename);
|
||||
return false;
|
||||
}
|
||||
if (image->length < 8) printf( "Image file is too short");
|
||||
|
||||
fseek(fsource, image->length-8, SEEK_SET);
|
||||
fread(&image->version, 4, 1, fsource);
|
||||
fread(&image->header_offset, 4, 1, fsource);
|
||||
fseek(fsource, image->length-8, SEEK_SET);
|
||||
fread(&image->version, 4, 1, fsource);
|
||||
fread(&image->header_offset, 4, 1, fsource);
|
||||
|
||||
if ((image->version != CDI_V2 && image->version != CDI_V3 && image->version != CDI_V35)
|
||||
|| image->header_offset == 0)
|
||||
{
|
||||
printf("%s: Bad image format\n", fsourcename);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
// if (errno != 0) printf( fsourcename);
|
||||
if (image->header_offset == 0) printf( "Bad image format");
|
||||
}
|
||||
|
||||
void CDI_get_sessions (FILE *fsource, image_s *image)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef __CDI_H__
|
||||
#define __CDI_H__
|
||||
|
||||
|
||||
|
||||
/* Basic structures */
|
||||
|
||||
typedef struct image_s
|
||||
@@ -37,10 +39,11 @@ typedef struct track_s
|
||||
#define CDI_V35 0x80000006
|
||||
|
||||
unsigned long ask_type(FILE *fsource, long header_position);
|
||||
bool CDI_init(FILE *fsource, image_s *image, const char *fsourcename);
|
||||
void CDI_get_sessions(FILE *fsource, image_s *image);
|
||||
void CDI_get_tracks(FILE *fsource, image_s *image);
|
||||
void CDI_read_track(FILE *fsource, image_s *image, track_s *track);
|
||||
void CDI_skip_next_session(FILE *fsource, image_s *image);
|
||||
void CDI_init (FILE *fsource, image_s *image, char *fsourcename);
|
||||
void CDI_get_sessions (FILE *fsource, image_s *image);
|
||||
void CDI_get_tracks (FILE *fsource, image_s *image);
|
||||
void CDI_read_track (FILE *fsource, image_s *image, track_s *track);
|
||||
void CDI_skip_next_session (FILE *fsource, image_s *image);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,350 @@
|
||||
/***************************************************************************
|
||||
|
||||
chd.h
|
||||
|
||||
MAME Compressed Hunks of Data file format
|
||||
|
||||
****************************************************************************
|
||||
|
||||
Copyright Aaron Giles
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name 'MAME' nor the names of its contributors may be
|
||||
used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
|
||||
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __CHD_H__
|
||||
#define __CHD_H__
|
||||
|
||||
#include "coretypes.h"
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Compressed Hunks of Data header format. All numbers are stored in
|
||||
Motorola (big-endian) byte ordering. The header is 76 (V1) or 80 (V2)
|
||||
bytes long.
|
||||
|
||||
V1 header:
|
||||
|
||||
[ 0] char tag[8]; // 'MComprHD'
|
||||
[ 8] UINT32 length; // length of header (including tag and length fields)
|
||||
[ 12] UINT32 version; // drive format version
|
||||
[ 16] UINT32 flags; // flags (see below)
|
||||
[ 20] UINT32 compression; // compression type
|
||||
[ 24] UINT32 hunksize; // 512-byte sectors per hunk
|
||||
[ 28] UINT32 totalhunks; // total # of hunks represented
|
||||
[ 32] UINT32 cylinders; // number of cylinders on hard disk
|
||||
[ 36] UINT32 heads; // number of heads on hard disk
|
||||
[ 40] UINT32 sectors; // number of sectors on hard disk
|
||||
[ 44] UINT8 md5[16]; // MD5 checksum of raw data
|
||||
[ 60] UINT8 parentmd5[16]; // MD5 checksum of parent file
|
||||
[ 76] (V1 header length)
|
||||
|
||||
V2 header:
|
||||
|
||||
[ 0] char tag[8]; // 'MComprHD'
|
||||
[ 8] UINT32 length; // length of header (including tag and length fields)
|
||||
[ 12] UINT32 version; // drive format version
|
||||
[ 16] UINT32 flags; // flags (see below)
|
||||
[ 20] UINT32 compression; // compression type
|
||||
[ 24] UINT32 hunksize; // seclen-byte sectors per hunk
|
||||
[ 28] UINT32 totalhunks; // total # of hunks represented
|
||||
[ 32] UINT32 cylinders; // number of cylinders on hard disk
|
||||
[ 36] UINT32 heads; // number of heads on hard disk
|
||||
[ 40] UINT32 sectors; // number of sectors on hard disk
|
||||
[ 44] UINT8 md5[16]; // MD5 checksum of raw data
|
||||
[ 60] UINT8 parentmd5[16]; // MD5 checksum of parent file
|
||||
[ 76] UINT32 seclen; // number of bytes per sector
|
||||
[ 80] (V2 header length)
|
||||
|
||||
V3 header:
|
||||
|
||||
[ 0] char tag[8]; // 'MComprHD'
|
||||
[ 8] UINT32 length; // length of header (including tag and length fields)
|
||||
[ 12] UINT32 version; // drive format version
|
||||
[ 16] UINT32 flags; // flags (see below)
|
||||
[ 20] UINT32 compression; // compression type
|
||||
[ 24] UINT32 totalhunks; // total # of hunks represented
|
||||
[ 28] UINT64 logicalbytes; // logical size of the data (in bytes)
|
||||
[ 36] UINT64 metaoffset; // offset to the first blob of metadata
|
||||
[ 44] UINT8 md5[16]; // MD5 checksum of raw data
|
||||
[ 60] UINT8 parentmd5[16]; // MD5 checksum of parent file
|
||||
[ 76] UINT32 hunkbytes; // number of bytes per hunk
|
||||
[ 80] UINT8 sha1[20]; // SHA1 checksum of raw data
|
||||
[100] UINT8 parentsha1[20];// SHA1 checksum of parent file
|
||||
[120] (V3 header length)
|
||||
|
||||
V4 header:
|
||||
|
||||
[ 0] char tag[8]; // 'MComprHD'
|
||||
[ 8] UINT32 length; // length of header (including tag and length fields)
|
||||
[ 12] UINT32 version; // drive format version
|
||||
[ 16] UINT32 flags; // flags (see below)
|
||||
[ 20] UINT32 compression; // compression type
|
||||
[ 24] UINT32 totalhunks; // total # of hunks represented
|
||||
[ 28] UINT64 logicalbytes; // logical size of the data (in bytes)
|
||||
[ 36] UINT64 metaoffset; // offset to the first blob of metadata
|
||||
[ 44] UINT32 hunkbytes; // number of bytes per hunk
|
||||
[ 48] UINT8 sha1[20]; // combined raw+meta SHA1
|
||||
[ 68] UINT8 parentsha1[20];// combined raw+meta SHA1 of parent
|
||||
[ 88] UINT8 rawsha1[20]; // raw data SHA1
|
||||
[108] (V4 header length)
|
||||
|
||||
Flags:
|
||||
0x00000001 - set if this drive has a parent
|
||||
0x00000002 - set if this drive allows writes
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
CONSTANTS
|
||||
***************************************************************************/
|
||||
|
||||
/* header information */
|
||||
#define CHD_HEADER_VERSION 4
|
||||
#define CHD_V1_HEADER_SIZE 76
|
||||
#define CHD_V2_HEADER_SIZE 80
|
||||
#define CHD_V3_HEADER_SIZE 120
|
||||
#define CHD_V4_HEADER_SIZE 108
|
||||
#define CHD_MAX_HEADER_SIZE CHD_V4_HEADER_SIZE
|
||||
|
||||
/* checksumming information */
|
||||
#define CHD_MD5_BYTES 16
|
||||
#define CHD_SHA1_BYTES 20
|
||||
|
||||
/* CHD global flags */
|
||||
#define CHDFLAGS_HAS_PARENT 0x00000001
|
||||
#define CHDFLAGS_IS_WRITEABLE 0x00000002
|
||||
#define CHDFLAGS_UNDEFINED 0xfffffffc
|
||||
|
||||
/* compression types */
|
||||
#define CHDCOMPRESSION_NONE 0
|
||||
#define CHDCOMPRESSION_ZLIB 1
|
||||
#define CHDCOMPRESSION_ZLIB_PLUS 2
|
||||
#define CHDCOMPRESSION_AV 3
|
||||
|
||||
/* A/V codec configuration parameters */
|
||||
#define AV_CODEC_COMPRESS_CONFIG 1
|
||||
#define AV_CODEC_DECOMPRESS_CONFIG 2
|
||||
|
||||
/* metadata parameters */
|
||||
#define CHDMETATAG_WILDCARD 0
|
||||
#define CHD_METAINDEX_APPEND ((UINT32)-1)
|
||||
|
||||
/* metadata flags */
|
||||
#define CHD_MDFLAGS_CHECKSUM 0x01 /* indicates data is checksummed */
|
||||
|
||||
/* standard hard disk metadata */
|
||||
#define HARD_DISK_METADATA_TAG 0x47444444 /* 'GDDD' */
|
||||
#define HARD_DISK_METADATA_FORMAT "CYLS:%d,HEADS:%d,SECS:%d,BPS:%d"
|
||||
|
||||
/* hard disk identify information */
|
||||
#define HARD_DISK_IDENT_METADATA_TAG 0x49444e54 /* 'IDNT' */
|
||||
|
||||
/* hard disk key information */
|
||||
#define HARD_DISK_KEY_METADATA_TAG 0x4b455920 /* 'KEY ' */
|
||||
|
||||
/* pcmcia CIS information */
|
||||
#define PCMCIA_CIS_METADATA_TAG 0x43495320 /* 'CIS ' */
|
||||
|
||||
/* standard CD-ROM metadata */
|
||||
#define CDROM_OLD_METADATA_TAG 0x43484344 /* 'CHCD' */
|
||||
#define CDROM_TRACK_METADATA_TAG 0x43485452 /* 'CHTR' */
|
||||
#define CDROM_TRACK_METADATA_FORMAT "TRACK:%d TYPE:%s SUBTYPE:%s FRAMES:%d"
|
||||
#define CDROM_TRACK_METADATA2_TAG 0x43485432 /* 'CHT2' */
|
||||
#define CDROM_TRACK_METADATA2_FORMAT "TRACK:%d TYPE:%s SUBTYPE:%s FRAMES:%d PREGAP:%d PGTYPE:%s PGSUB:%s POSTGAP:%d"
|
||||
|
||||
/* standard A/V metadata */
|
||||
#define AV_METADATA_TAG 0x41564156 /* 'AVAV' */
|
||||
#define AV_METADATA_FORMAT "FPS:%d.%06d WIDTH:%d HEIGHT:%d INTERLACED:%d CHANNELS:%d SAMPLERATE:%d"
|
||||
|
||||
/* A/V laserdisc frame metadata */
|
||||
#define AV_LD_METADATA_TAG 0x41564C44 /* 'AVLD' */
|
||||
|
||||
/* CHD open values */
|
||||
#define CHD_OPEN_READ 1
|
||||
#define CHD_OPEN_READWRITE 2
|
||||
|
||||
/* error types */
|
||||
enum _chd_error
|
||||
{
|
||||
CHDERR_NONE,
|
||||
CHDERR_NO_INTERFACE,
|
||||
CHDERR_OUT_OF_MEMORY,
|
||||
CHDERR_INVALID_FILE,
|
||||
CHDERR_INVALID_PARAMETER,
|
||||
CHDERR_INVALID_DATA,
|
||||
CHDERR_FILE_NOT_FOUND,
|
||||
CHDERR_REQUIRES_PARENT,
|
||||
CHDERR_FILE_NOT_WRITEABLE,
|
||||
CHDERR_READ_ERROR,
|
||||
CHDERR_WRITE_ERROR,
|
||||
CHDERR_CODEC_ERROR,
|
||||
CHDERR_INVALID_PARENT,
|
||||
CHDERR_HUNK_OUT_OF_RANGE,
|
||||
CHDERR_DECOMPRESSION_ERROR,
|
||||
CHDERR_COMPRESSION_ERROR,
|
||||
CHDERR_CANT_CREATE_FILE,
|
||||
CHDERR_CANT_VERIFY,
|
||||
CHDERR_NOT_SUPPORTED,
|
||||
CHDERR_METADATA_NOT_FOUND,
|
||||
CHDERR_INVALID_METADATA_SIZE,
|
||||
CHDERR_UNSUPPORTED_VERSION,
|
||||
CHDERR_VERIFY_INCOMPLETE,
|
||||
CHDERR_INVALID_METADATA,
|
||||
CHDERR_INVALID_STATE,
|
||||
CHDERR_OPERATION_PENDING,
|
||||
CHDERR_NO_ASYNC_OPERATION,
|
||||
CHDERR_UNSUPPORTED_FORMAT
|
||||
};
|
||||
typedef enum _chd_error chd_error;
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
/* opaque types */
|
||||
typedef struct _chd_file chd_file;
|
||||
|
||||
|
||||
/* extract header structure (NOT the on-disk header structure) */
|
||||
typedef struct _chd_header chd_header;
|
||||
struct _chd_header
|
||||
{
|
||||
UINT32 length; /* length of header data */
|
||||
UINT32 version; /* drive format version */
|
||||
UINT32 flags; /* flags field */
|
||||
UINT32 compression; /* compression type */
|
||||
UINT32 hunkbytes; /* number of bytes per hunk */
|
||||
UINT32 totalhunks; /* total # of hunks represented */
|
||||
UINT64 logicalbytes; /* logical size of the data */
|
||||
UINT64 metaoffset; /* offset in file of first metadata */
|
||||
UINT8 md5[CHD_MD5_BYTES]; /* overall MD5 checksum */
|
||||
UINT8 parentmd5[CHD_MD5_BYTES]; /* overall MD5 checksum of parent */
|
||||
UINT8 sha1[CHD_SHA1_BYTES]; /* overall SHA1 checksum */
|
||||
UINT8 rawsha1[CHD_SHA1_BYTES]; /* SHA1 checksum of raw data */
|
||||
UINT8 parentsha1[CHD_SHA1_BYTES]; /* overall SHA1 checksum of parent */
|
||||
|
||||
UINT32 obsolete_cylinders; /* obsolete field -- do not use! */
|
||||
UINT32 obsolete_sectors; /* obsolete field -- do not use! */
|
||||
UINT32 obsolete_heads; /* obsolete field -- do not use! */
|
||||
UINT32 obsolete_hunksize; /* obsolete field -- do not use! */
|
||||
};
|
||||
|
||||
|
||||
/* structure for returning information about a verification pass */
|
||||
typedef struct _chd_verify_result chd_verify_result;
|
||||
struct _chd_verify_result
|
||||
{
|
||||
UINT8 md5[CHD_MD5_BYTES]; /* overall MD5 checksum */
|
||||
UINT8 sha1[CHD_SHA1_BYTES]; /* overall SHA1 checksum */
|
||||
UINT8 rawsha1[CHD_SHA1_BYTES]; /* SHA1 checksum of raw data */
|
||||
UINT8 metasha1[CHD_SHA1_BYTES]; /* SHA1 checksum of metadata */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
FUNCTION PROTOTYPES
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
/* ----- CHD file management ----- */
|
||||
|
||||
/* create a new CHD file fitting the given description */
|
||||
chd_error chd_create(const char *filename, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 compression, chd_file *parent);
|
||||
|
||||
/* same as chd_create(), but accepts an already-opened core_file object */
|
||||
chd_error chd_create_file(core_file *file, UINT64 logicalbytes, UINT32 hunkbytes, UINT32 compression, chd_file *parent);
|
||||
|
||||
/* open an existing CHD file */
|
||||
chd_error chd_open(const wchar *filename, int mode, chd_file *parent, chd_file **chd);
|
||||
|
||||
|
||||
/* close a CHD file */
|
||||
void chd_close(chd_file *chd);
|
||||
|
||||
/* return the associated core_file */
|
||||
core_file *chd_core_file(chd_file *chd);
|
||||
|
||||
/* return an error string for the given CHD error */
|
||||
const char *chd_error_string(chd_error err);
|
||||
|
||||
|
||||
|
||||
/* ----- CHD header management ----- */
|
||||
|
||||
/* return a pointer to the extracted CHD header data */
|
||||
const chd_header *chd_get_header(chd_file *chd);
|
||||
|
||||
|
||||
|
||||
|
||||
/* ----- core data read/write ----- */
|
||||
|
||||
/* read one hunk from the CHD file */
|
||||
chd_error chd_read(chd_file *chd, UINT32 hunknum, void *buffer);
|
||||
|
||||
|
||||
|
||||
/* ----- metadata management ----- */
|
||||
|
||||
/* get indexed metadata of a particular sort */
|
||||
chd_error chd_get_metadata(chd_file *chd, UINT32 searchtag, UINT32 searchindex, void *output, UINT32 outputlen, UINT32 *resultlen, UINT32 *resulttag, UINT8 *resultflags);
|
||||
|
||||
|
||||
|
||||
|
||||
/* ----- verification management ----- */
|
||||
|
||||
/* begin verifying a CHD */
|
||||
chd_error chd_verify_begin(chd_file *chd);
|
||||
|
||||
/* verify a single hunk of data */
|
||||
chd_error chd_verify_hunk(chd_file *chd);
|
||||
|
||||
/* finish verifying a CHD, returning the computed MD5 and SHA1 */
|
||||
chd_error chd_verify_finish(chd_file *chd, chd_verify_result *result);
|
||||
|
||||
|
||||
|
||||
/* ----- codec interfaces ----- */
|
||||
|
||||
/* set internal codec parameters */
|
||||
chd_error chd_codec_config(chd_file *chd, int param, void *config);
|
||||
|
||||
/* return a string description of a codec */
|
||||
const char *chd_get_codec_name(UINT32 codec);
|
||||
|
||||
|
||||
#endif /* __CHD_H__ */
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,20 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
typedef u64 UINT64;
|
||||
typedef u32 UINT32;
|
||||
typedef u16 UINT16;
|
||||
typedef u8 UINT8;
|
||||
|
||||
typedef s64 INT64;
|
||||
typedef s32 INT32;
|
||||
typedef s16 INT16;
|
||||
typedef s8 INT8;
|
||||
|
||||
#ifndef INLINE
|
||||
#define INLINE inline
|
||||
#endif
|
||||
|
||||
#define core_file FILE
|
||||
|
||||
#define ARRAY_LENGTH(x) (sizeof(x)/sizeof(x[0]))
|
||||
@@ -0,0 +1,239 @@
|
||||
/*
|
||||
* This code implements the MD5 message-digest algorithm.
|
||||
* The algorithm is due to Ron Rivest. This code was
|
||||
* written by Colin Plumb in 1993, no copyright is claimed.
|
||||
* This code is in the public domain; do with it what you wish.
|
||||
*
|
||||
* Equivalent code is available from RSA Data Security, Inc.
|
||||
* This code has been tested against that, and is equivalent,
|
||||
* except that you don't need to include two pages of legalese
|
||||
* with every copy.
|
||||
*
|
||||
* To compute the message digest of a chunk of bytes, declare an
|
||||
* MD5Context structure, pass it to MD5Init, call MD5Update as
|
||||
* needed on buffers full of bytes, and then call MD5Final, which
|
||||
* will fill a supplied 16-byte array with the digest.
|
||||
*
|
||||
* Changed so as no longer to depend on Colin Plumb's `usual.h' header
|
||||
* definitions; now uses stuff from dpkg's config.h.
|
||||
* - Ian Jackson <[email protected]>.
|
||||
* Still in the public domain.
|
||||
*/
|
||||
|
||||
#include <string.h> /* for memcpy() */
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
#ifndef LSB_FIRST
|
||||
void
|
||||
byteSwap(UWORD32 *buf, unsigned words)
|
||||
{
|
||||
md5byte *p = (md5byte *)buf;
|
||||
|
||||
do {
|
||||
*buf++ = (UWORD32)((unsigned)p[3] << 8 | p[2]) << 16 |
|
||||
((unsigned)p[1] << 8 | p[0]);
|
||||
p += 4;
|
||||
} while (--words);
|
||||
}
|
||||
#else
|
||||
#define byteSwap(buf,words)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
|
||||
* initialization constants.
|
||||
*/
|
||||
void
|
||||
MD5Init(struct MD5Context *ctx)
|
||||
{
|
||||
ctx->buf[0] = 0x67452301;
|
||||
ctx->buf[1] = 0xefcdab89;
|
||||
ctx->buf[2] = 0x98badcfe;
|
||||
ctx->buf[3] = 0x10325476;
|
||||
|
||||
ctx->bytes[0] = 0;
|
||||
ctx->bytes[1] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update context to reflect the concatenation of another buffer full
|
||||
* of bytes.
|
||||
*/
|
||||
void
|
||||
MD5Update(struct MD5Context *ctx, md5byte const *buf, unsigned len)
|
||||
{
|
||||
UWORD32 t;
|
||||
|
||||
/* Update byte count */
|
||||
|
||||
t = ctx->bytes[0];
|
||||
if ((ctx->bytes[0] = t + len) < t)
|
||||
ctx->bytes[1]++; /* Carry from low to high */
|
||||
|
||||
t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */
|
||||
if (t > len) {
|
||||
memcpy((md5byte *)ctx->in + 64 - t, buf, len);
|
||||
return;
|
||||
}
|
||||
/* First chunk is an odd size */
|
||||
memcpy((md5byte *)ctx->in + 64 - t, buf, t);
|
||||
byteSwap(ctx->in, 16);
|
||||
MD5Transform(ctx->buf, ctx->in);
|
||||
buf += t;
|
||||
len -= t;
|
||||
|
||||
/* Process data in 64-byte chunks */
|
||||
while (len >= 64) {
|
||||
memcpy(ctx->in, buf, 64);
|
||||
byteSwap(ctx->in, 16);
|
||||
MD5Transform(ctx->buf, ctx->in);
|
||||
buf += 64;
|
||||
len -= 64;
|
||||
}
|
||||
|
||||
/* Handle any remaining bytes of data. */
|
||||
memcpy(ctx->in, buf, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* Final wrapup - pad to 64-byte boundary with the bit pattern
|
||||
* 1 0* (64-bit count of bits processed, MSB-first)
|
||||
*/
|
||||
void
|
||||
MD5Final(md5byte digest[16], struct MD5Context *ctx)
|
||||
{
|
||||
int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */
|
||||
md5byte *p = (md5byte *)ctx->in + count;
|
||||
|
||||
/* Set the first char of padding to 0x80. There is always room. */
|
||||
*p++ = 0x80;
|
||||
|
||||
/* Bytes of padding needed to make 56 bytes (-8..55) */
|
||||
count = 56 - 1 - count;
|
||||
|
||||
if (count < 0) { /* Padding forces an extra block */
|
||||
memset(p, 0, count + 8);
|
||||
byteSwap(ctx->in, 16);
|
||||
MD5Transform(ctx->buf, ctx->in);
|
||||
p = (md5byte *)ctx->in;
|
||||
count = 56;
|
||||
}
|
||||
memset(p, 0, count);
|
||||
byteSwap(ctx->in, 14);
|
||||
|
||||
/* Append length in bits and transform */
|
||||
ctx->in[14] = ctx->bytes[0] << 3;
|
||||
ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
|
||||
MD5Transform(ctx->buf, ctx->in);
|
||||
|
||||
byteSwap(ctx->buf, 4);
|
||||
memcpy(digest, ctx->buf, 16);
|
||||
memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
|
||||
}
|
||||
|
||||
#ifndef ASM_MD5
|
||||
|
||||
/* The four core functions - F1 is optimized somewhat */
|
||||
|
||||
/* #define F1(x, y, z) (x & y | ~x & z) */
|
||||
#define F1(x, y, z) (z ^ (x & (y ^ z)))
|
||||
#define F2(x, y, z) F1(z, x, y)
|
||||
#define F3(x, y, z) (x ^ y ^ z)
|
||||
#define F4(x, y, z) (y ^ (x | ~z))
|
||||
|
||||
/* This is the central step in the MD5 algorithm. */
|
||||
#define MD5STEP(f,w,x,y,z,in,s) \
|
||||
(w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
|
||||
|
||||
/*
|
||||
* The core of the MD5 algorithm, this alters an existing MD5 hash to
|
||||
* reflect the addition of 16 longwords of new data. MD5Update blocks
|
||||
* the data and converts bytes into longwords for this routine.
|
||||
*/
|
||||
void
|
||||
MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
|
||||
{
|
||||
register UWORD32 a, b, c, d;
|
||||
|
||||
a = buf[0];
|
||||
b = buf[1];
|
||||
c = buf[2];
|
||||
d = buf[3];
|
||||
|
||||
MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
|
||||
MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
|
||||
MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
|
||||
MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
|
||||
MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
|
||||
|
||||
MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
|
||||
MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
|
||||
MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
|
||||
MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
|
||||
MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
|
||||
|
||||
MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
|
||||
MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
|
||||
MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
|
||||
MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
|
||||
MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
|
||||
|
||||
MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
|
||||
MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
|
||||
MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
|
||||
MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
|
||||
MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
|
||||
|
||||
buf[0] += a;
|
||||
buf[1] += b;
|
||||
buf[2] += c;
|
||||
buf[3] += d;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* This is the header file for the MD5 message-digest algorithm.
|
||||
* The algorithm is due to Ron Rivest. This code was
|
||||
* written by Colin Plumb in 1993, no copyright is claimed.
|
||||
* This code is in the public domain; do with it what you wish.
|
||||
*
|
||||
* Equivalent code is available from RSA Data Security, Inc.
|
||||
* This code has been tested against that, and is equivalent,
|
||||
* except that you don't need to include two pages of legalese
|
||||
* with every copy.
|
||||
*
|
||||
* To compute the message digest of a chunk of bytes, declare an
|
||||
* MD5Context structure, pass it to MD5Init, call MD5Update as
|
||||
* needed on buffers full of bytes, and then call MD5Final, which
|
||||
* will fill a supplied 16-byte array with the digest.
|
||||
*
|
||||
* Changed so as no longer to depend on Colin Plumb's `usual.h'
|
||||
* header definitions; now uses stuff from dpkg's config.h
|
||||
* - Ian Jackson <[email protected]>.
|
||||
* Still in the public domain.
|
||||
*/
|
||||
|
||||
#ifndef MD5_H
|
||||
#define MD5_H
|
||||
|
||||
typedef unsigned int UWORD32;
|
||||
|
||||
#define md5byte unsigned char
|
||||
|
||||
struct MD5Context {
|
||||
UWORD32 buf[4];
|
||||
UWORD32 bytes[2];
|
||||
UWORD32 in[16];
|
||||
};
|
||||
|
||||
void MD5Init(struct MD5Context *context);
|
||||
void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
|
||||
void MD5Final(unsigned char digest[16], struct MD5Context *context);
|
||||
void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]);
|
||||
|
||||
#endif /* !MD5_H */
|
||||
|
||||
@@ -0,0 +1,387 @@
|
||||
/* sha1.h
|
||||
*
|
||||
* The sha1 hash function.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright 2001 Peter Gutmann, Andrew Kuchling, Niels Moeller
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle library is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle library; see the file COPYING.LIB. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
* MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "sha1.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
static unsigned int READ_UINT32(const UINT8* data)
|
||||
{
|
||||
return ((UINT32)data[0] << 24) |
|
||||
((UINT32)data[1] << 16) |
|
||||
((UINT32)data[2] << 8) |
|
||||
((UINT32)data[3]);
|
||||
}
|
||||
|
||||
static void WRITE_UINT32(unsigned char* data, UINT32 val)
|
||||
{
|
||||
data[0] = (val >> 24) & 0xFF;
|
||||
data[1] = (val >> 16) & 0xFF;
|
||||
data[2] = (val >> 8) & 0xFF;
|
||||
data[3] = (val >> 0) & 0xFF;
|
||||
}
|
||||
|
||||
|
||||
/* A block, treated as a sequence of 32-bit words. */
|
||||
#define SHA1_DATA_LENGTH 16
|
||||
|
||||
/* The SHA f()-functions. The f1 and f3 functions can be optimized to
|
||||
save one boolean operation each - thanks to Rich Schroeppel,
|
||||
[email protected] for discovering this */
|
||||
|
||||
/* #define f1(x,y,z) ( ( x & y ) | ( ~x & z ) ) Rounds 0-19 */
|
||||
#define f1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) /* Rounds 0-19 */
|
||||
#define f2(x,y,z) ( x ^ y ^ z ) /* Rounds 20-39 */
|
||||
/* #define f3(x,y,z) ( ( x & y ) | ( x & z ) | ( y & z ) ) Rounds 40-59 */
|
||||
#define f3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) /* Rounds 40-59 */
|
||||
#define f4(x,y,z) ( x ^ y ^ z ) /* Rounds 60-79 */
|
||||
|
||||
/* The SHA Mysterious Constants */
|
||||
|
||||
#define K1 0x5A827999L /* Rounds 0-19 */
|
||||
#define K2 0x6ED9EBA1L /* Rounds 20-39 */
|
||||
#define K3 0x8F1BBCDCL /* Rounds 40-59 */
|
||||
#define K4 0xCA62C1D6L /* Rounds 60-79 */
|
||||
|
||||
/* SHA initial values */
|
||||
|
||||
#define h0init 0x67452301L
|
||||
#define h1init 0xEFCDAB89L
|
||||
#define h2init 0x98BADCFEL
|
||||
#define h3init 0x10325476L
|
||||
#define h4init 0xC3D2E1F0L
|
||||
|
||||
/* 32-bit rotate left - kludged with shifts */
|
||||
#ifdef _MSC_VER
|
||||
#define ROTL(n,X) _lrotl(X, n)
|
||||
#else
|
||||
#define ROTL(n,X) ( ( (X) << (n) ) | ( (X) >> ( 32 - (n) ) ) )
|
||||
#endif
|
||||
|
||||
/* The initial expanding function. The hash function is defined over an
|
||||
80-word expanded input array W, where the first 16 are copies of the input
|
||||
data, and the remaining 64 are defined by
|
||||
|
||||
W[ i ] = W[ i - 16 ] ^ W[ i - 14 ] ^ W[ i - 8 ] ^ W[ i - 3 ]
|
||||
|
||||
This implementation generates these values on the fly in a circular
|
||||
buffer - thanks to Colin Plumb, [email protected] for this
|
||||
optimization.
|
||||
|
||||
The updated SHA changes the expanding function by adding a rotate of 1
|
||||
bit. Thanks to Jim Gillogly, [email protected], and an anonymous contributor
|
||||
for this information */
|
||||
|
||||
#define expand(W,i) ( W[ i & 15 ] = \
|
||||
ROTL( 1, ( W[ i & 15 ] ^ W[ (i - 14) & 15 ] ^ \
|
||||
W[ (i - 8) & 15 ] ^ W[ (i - 3) & 15 ] ) ) )
|
||||
|
||||
|
||||
/* The prototype SHA sub-round. The fundamental sub-round is:
|
||||
|
||||
a' = e + ROTL( 5, a ) + f( b, c, d ) + k + data;
|
||||
b' = a;
|
||||
c' = ROTL( 30, b );
|
||||
d' = c;
|
||||
e' = d;
|
||||
|
||||
but this is implemented by unrolling the loop 5 times and renaming the
|
||||
variables ( e, a, b, c, d ) = ( a', b', c', d', e' ) each iteration.
|
||||
This code is then replicated 20 times for each of the 4 functions, using
|
||||
the next 20 values from the W[] array each time */
|
||||
|
||||
#define subRound(a, b, c, d, e, f, k, data) \
|
||||
( e += ROTL( 5, a ) + f( b, c, d ) + k + data, b = ROTL( 30, b ) )
|
||||
|
||||
/* Initialize the SHA values */
|
||||
|
||||
void
|
||||
sha1_init(struct sha1_ctx *ctx)
|
||||
{
|
||||
/* Set the h-vars to their initial values */
|
||||
ctx->digest[ 0 ] = h0init;
|
||||
ctx->digest[ 1 ] = h1init;
|
||||
ctx->digest[ 2 ] = h2init;
|
||||
ctx->digest[ 3 ] = h3init;
|
||||
ctx->digest[ 4 ] = h4init;
|
||||
|
||||
/* Initialize bit count */
|
||||
ctx->count_low = ctx->count_high = 0;
|
||||
|
||||
/* Initialize buffer */
|
||||
ctx->index = 0;
|
||||
}
|
||||
|
||||
/* Perform the SHA transformation. Note that this code, like MD5, seems to
|
||||
break some optimizing compilers due to the complexity of the expressions
|
||||
and the size of the basic block. It may be necessary to split it into
|
||||
sections, e.g. based on the four subrounds
|
||||
|
||||
Note that this function destroys the data area */
|
||||
|
||||
static void
|
||||
sha1_transform(UINT32 *state, UINT32 *data)
|
||||
{
|
||||
UINT32 A, B, C, D, E; /* Local vars */
|
||||
|
||||
/* Set up first buffer and local data buffer */
|
||||
A = state[0];
|
||||
B = state[1];
|
||||
C = state[2];
|
||||
D = state[3];
|
||||
E = state[4];
|
||||
|
||||
/* Heavy mangling, in 4 sub-rounds of 20 interations each. */
|
||||
subRound( A, B, C, D, E, f1, K1, data[ 0] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[ 1] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[ 2] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[ 3] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[ 4] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[ 5] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[ 6] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[ 7] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[ 8] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[ 9] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[10] );
|
||||
subRound( E, A, B, C, D, f1, K1, data[11] );
|
||||
subRound( D, E, A, B, C, f1, K1, data[12] );
|
||||
subRound( C, D, E, A, B, f1, K1, data[13] );
|
||||
subRound( B, C, D, E, A, f1, K1, data[14] );
|
||||
subRound( A, B, C, D, E, f1, K1, data[15] );
|
||||
subRound( E, A, B, C, D, f1, K1, expand( data, 16 ) );
|
||||
subRound( D, E, A, B, C, f1, K1, expand( data, 17 ) );
|
||||
subRound( C, D, E, A, B, f1, K1, expand( data, 18 ) );
|
||||
subRound( B, C, D, E, A, f1, K1, expand( data, 19 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 20 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 21 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 22 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 23 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 24 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 25 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 26 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 27 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 28 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 29 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 30 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 31 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 32 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 33 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 34 ) );
|
||||
subRound( A, B, C, D, E, f2, K2, expand( data, 35 ) );
|
||||
subRound( E, A, B, C, D, f2, K2, expand( data, 36 ) );
|
||||
subRound( D, E, A, B, C, f2, K2, expand( data, 37 ) );
|
||||
subRound( C, D, E, A, B, f2, K2, expand( data, 38 ) );
|
||||
subRound( B, C, D, E, A, f2, K2, expand( data, 39 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 40 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 41 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 42 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 43 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 44 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 45 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 46 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 47 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 48 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 49 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 50 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 51 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 52 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 53 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 54 ) );
|
||||
subRound( A, B, C, D, E, f3, K3, expand( data, 55 ) );
|
||||
subRound( E, A, B, C, D, f3, K3, expand( data, 56 ) );
|
||||
subRound( D, E, A, B, C, f3, K3, expand( data, 57 ) );
|
||||
subRound( C, D, E, A, B, f3, K3, expand( data, 58 ) );
|
||||
subRound( B, C, D, E, A, f3, K3, expand( data, 59 ) );
|
||||
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 60 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 61 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 62 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 63 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 64 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 65 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 66 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 67 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 68 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 69 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 70 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 71 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 72 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 73 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 74 ) );
|
||||
subRound( A, B, C, D, E, f4, K4, expand( data, 75 ) );
|
||||
subRound( E, A, B, C, D, f4, K4, expand( data, 76 ) );
|
||||
subRound( D, E, A, B, C, f4, K4, expand( data, 77 ) );
|
||||
subRound( C, D, E, A, B, f4, K4, expand( data, 78 ) );
|
||||
subRound( B, C, D, E, A, f4, K4, expand( data, 79 ) );
|
||||
|
||||
/* Build message digest */
|
||||
state[0] += A;
|
||||
state[1] += B;
|
||||
state[2] += C;
|
||||
state[3] += D;
|
||||
state[4] += E;
|
||||
}
|
||||
|
||||
static void
|
||||
sha1_block(struct sha1_ctx *ctx, const UINT8 *block)
|
||||
{
|
||||
UINT32 data[SHA1_DATA_LENGTH];
|
||||
int i;
|
||||
|
||||
/* Update block count */
|
||||
if (!++ctx->count_low)
|
||||
++ctx->count_high;
|
||||
|
||||
/* Endian independent conversion */
|
||||
for (i = 0; i<SHA1_DATA_LENGTH; i++, block += 4)
|
||||
data[i] = READ_UINT32(block);
|
||||
|
||||
sha1_transform(ctx->digest, data);
|
||||
}
|
||||
|
||||
void
|
||||
sha1_update(struct sha1_ctx *ctx,
|
||||
unsigned length, const UINT8 *buffer)
|
||||
{
|
||||
if (ctx->index)
|
||||
{ /* Try to fill partial block */
|
||||
unsigned left = SHA1_DATA_SIZE - ctx->index;
|
||||
if (length < left)
|
||||
{
|
||||
memcpy(ctx->block + ctx->index, buffer, length);
|
||||
ctx->index += length;
|
||||
return; /* Finished */
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(ctx->block + ctx->index, buffer, left);
|
||||
sha1_block(ctx, ctx->block);
|
||||
buffer += left;
|
||||
length -= left;
|
||||
}
|
||||
}
|
||||
while (length >= SHA1_DATA_SIZE)
|
||||
{
|
||||
sha1_block(ctx, buffer);
|
||||
buffer += SHA1_DATA_SIZE;
|
||||
length -= SHA1_DATA_SIZE;
|
||||
}
|
||||
ctx->index = length;
|
||||
if (length)
|
||||
/* Buffer leftovers */
|
||||
memcpy(ctx->block, buffer, length);
|
||||
}
|
||||
|
||||
/* Final wrapup - pad to SHA1_DATA_SIZE-byte boundary with the bit pattern
|
||||
1 0* (64-bit count of bits processed, MSB-first) */
|
||||
|
||||
void
|
||||
sha1_final(struct sha1_ctx *ctx)
|
||||
{
|
||||
UINT32 data[SHA1_DATA_LENGTH];
|
||||
int i;
|
||||
int words;
|
||||
|
||||
i = ctx->index;
|
||||
|
||||
/* Set the first char of padding to 0x80. This is safe since there is
|
||||
always at least one byte free */
|
||||
|
||||
assert(i < SHA1_DATA_SIZE);
|
||||
ctx->block[i++] = 0x80;
|
||||
|
||||
/* Fill rest of word */
|
||||
for( ; i & 3; i++)
|
||||
ctx->block[i] = 0;
|
||||
|
||||
/* i is now a multiple of the word size 4 */
|
||||
words = i >> 2;
|
||||
for (i = 0; i < words; i++)
|
||||
data[i] = READ_UINT32(ctx->block + 4*i);
|
||||
|
||||
if (words > (SHA1_DATA_LENGTH-2))
|
||||
{ /* No room for length in this block. Process it and
|
||||
* pad with another one */
|
||||
for (i = words ; i < SHA1_DATA_LENGTH; i++)
|
||||
data[i] = 0;
|
||||
sha1_transform(ctx->digest, data);
|
||||
for (i = 0; i < (SHA1_DATA_LENGTH-2); i++)
|
||||
data[i] = 0;
|
||||
}
|
||||
else
|
||||
for (i = words ; i < SHA1_DATA_LENGTH - 2; i++)
|
||||
data[i] = 0;
|
||||
|
||||
/* There are 512 = 2^9 bits in one block */
|
||||
data[SHA1_DATA_LENGTH-2] = (ctx->count_high << 9) | (ctx->count_low >> 23);
|
||||
data[SHA1_DATA_LENGTH-1] = (ctx->count_low << 9) | (ctx->index << 3);
|
||||
sha1_transform(ctx->digest, data);
|
||||
}
|
||||
|
||||
void
|
||||
sha1_digest(const struct sha1_ctx *ctx,
|
||||
unsigned length,
|
||||
UINT8 *digest)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned words;
|
||||
unsigned leftover;
|
||||
|
||||
assert(length <= SHA1_DIGEST_SIZE);
|
||||
|
||||
words = length / 4;
|
||||
leftover = length % 4;
|
||||
|
||||
for (i = 0; i < words; i++, digest += 4)
|
||||
WRITE_UINT32(digest, ctx->digest[i]);
|
||||
|
||||
if (leftover)
|
||||
{
|
||||
UINT32 word;
|
||||
unsigned j = leftover;
|
||||
|
||||
assert(i < _SHA1_DIGEST_LENGTH);
|
||||
|
||||
word = ctx->digest[i];
|
||||
|
||||
switch (leftover)
|
||||
{
|
||||
default:
|
||||
/* this is just here to keep the compiler happy; it can never happen */
|
||||
case 3:
|
||||
digest[--j] = (word >> 8) & 0xff;
|
||||
/* Fall through */
|
||||
case 2:
|
||||
digest[--j] = (word >> 16) & 0xff;
|
||||
/* Fall through */
|
||||
case 1:
|
||||
digest[--j] = (word >> 24) & 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
/* sha1.h
|
||||
*
|
||||
* The sha1 hash function.
|
||||
*/
|
||||
|
||||
/* nettle, low-level cryptographics library
|
||||
*
|
||||
* Copyright 2001 Niels Moeller
|
||||
*
|
||||
* The nettle library is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation; either version 2.1 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* The nettle library is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the nettle library; see the file COPYING.LIB. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||
* MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#ifndef NETTLE_SHA1_H_INCLUDED
|
||||
#define NETTLE_SHA1_H_INCLUDED
|
||||
|
||||
#include "../chdr/coretypes.h"
|
||||
|
||||
|
||||
|
||||
#define SHA1_DIGEST_SIZE 20
|
||||
#define SHA1_DATA_SIZE 64
|
||||
|
||||
/* Digest is kept internally as 4 32-bit words. */
|
||||
#define _SHA1_DIGEST_LENGTH 5
|
||||
|
||||
struct sha1_ctx
|
||||
{
|
||||
UINT32 digest[_SHA1_DIGEST_LENGTH]; /* Message digest */
|
||||
UINT32 count_low, count_high; /* 64-bit block count */
|
||||
UINT8 block[SHA1_DATA_SIZE]; /* SHA1 data buffer */
|
||||
unsigned int index; /* index into buffer */
|
||||
};
|
||||
|
||||
void
|
||||
sha1_init(struct sha1_ctx *ctx);
|
||||
|
||||
void
|
||||
sha1_update(struct sha1_ctx *ctx,
|
||||
unsigned length,
|
||||
const UINT8 *data);
|
||||
|
||||
void
|
||||
sha1_final(struct sha1_ctx *ctx);
|
||||
|
||||
void
|
||||
sha1_digest(const struct sha1_ctx *ctx,
|
||||
unsigned length,
|
||||
UINT8 *digest);
|
||||
|
||||
#endif /* NETTLE_SHA1_H_INCLUDED */
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,15 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
|
||||
cmake_policy(VERSION 3.2)
|
||||
|
||||
set(GLM_VERSION "0.9.9")
|
||||
project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
|
||||
enable_testing()
|
||||
|
||||
add_subdirectory(glm)
|
||||
add_library(glm::glm ALIAS glm)
|
||||
|
||||
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
add_subdirectory(test)
|
||||
|
||||
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
@@ -1,54 +0,0 @@
|
||||
================================================================================
|
||||
OpenGL Mathematics (GLM)
|
||||
--------------------------------------------------------------------------------
|
||||
GLM is licensed under The Happy Bunny License or MIT License
|
||||
|
||||
================================================================================
|
||||
The Happy Bunny License (Modified MIT License)
|
||||
--------------------------------------------------------------------------------
|
||||
Copyright (c) 2005 - G-Truc Creation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
Restrictions:
|
||||
By making use of the Software for military purposes, you choose to make a
|
||||
Bunny unhappy.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
================================================================================
|
||||
The MIT License
|
||||
--------------------------------------------------------------------------------
|
||||
Copyright (c) 2005 - G-Truc Creation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -1,493 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// #define GLM_CXX98_EXCEPTIONS</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// #define GLM_CXX98_RTTI</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_CXX11_RVALUE_REFERENCES</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// Rvalue references - GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html</span></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// GLM_CXX11_TRAILING_RETURN</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// Rvalue references for *this - GCC not supported</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Initialization of class objects by rvalues - GCC any</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html</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">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// Non-static data member initializers - GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// Variadic templates - GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf</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="comment">//</span></div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// Extending variadic template template parameters - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf</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="comment">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// Initializer lists - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// #define GLM_CXX11_STATIC_ASSERT</span></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// Static assertions - GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html</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="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="comment">// auto-typed variables - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf</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="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="comment">// Multi-declarator auto - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf</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">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="comment">// Removal of auto as a storage-class specifier - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm</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="comment">// #define GLM_CXX11_AUTO_TYPE</span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// New function declarator syntax - GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm</span></div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="comment">// #define GLM_CXX11_LAMBDAS</span></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// New wording for C++0x lambdas - GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf</span></div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="comment">// #define GLM_CXX11_DECLTYPE</span></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// Declared type of an expression - GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf</span></div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// Right angle brackets - GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html</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="comment">//</span></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// Default template arguments for function templates DR226 GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226</span></div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="comment">// Solving the SFINAE problem for expressions DR339 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html</span></div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="comment">// Template aliases N2258 GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">// Extern templates N1987 Yes</span></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm</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> <span class="comment">// #define GLM_CXX11_NULLPTR</span></div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">// Null pointer constant N2431 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf</span></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment">// #define GLM_CXX11_STRONG_ENUMS</span></div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="comment">// Strongly-typed enums N2347 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf</span></div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment">// Forward declarations for enums N2764 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf</span></div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// Generalized attributes N2761 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf</span></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// Generalized constant expressions N2235 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// Alignment support N2341 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// Delegating constructors N1986 GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf</span></div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Inheriting constructors N2540 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm</span></div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment">// Explicit conversion operators N2437 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// New character types N2249 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html</span></div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment">// Unicode string literals N2442 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// Raw string literals N2442 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</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">//</span></div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment">// Universal character name literals N2170 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html</span></div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment">// #define GLM_CXX11_USER_LITERALS</span></div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment">// User-defined literals N2765 GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf</span></div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment">// Standard Layout Types N2342 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm</span></div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>
|
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment">// Defaulted and deleted functions N2346 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm</span></div>
|
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// Extended friend declarations N1791 GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf</span></div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div>
|
||||
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// Extending sizeof N2253 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html</span></div>
|
||||
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// Inline namespaces N2535 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm</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> <span class="comment">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
|
||||
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// Unrestricted unions N2544 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</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="comment">// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment">// Local and unnamed types as template arguments N2657 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm</span></div>
|
||||
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
|
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">// #define GLM_CXX11_RANGE_FOR</span></div>
|
||||
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// Range-based for N2930 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html</span></div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7</span></div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm</span></div>
|
||||
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm</span></div>
|
||||
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm</span></div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
|
||||
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// Minimal support for garbage collection and reachability-based leak detection N2670 No</span></div>
|
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm</span></div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
|
||||
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// #define GLM_CXX11_NOEXCEPT</span></div>
|
||||
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="comment">// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only)</span></div>
|
||||
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html</span></div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div>
|
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="comment">// Defining move special member functions N3053 GCC 4.6</span></div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html</span></div>
|
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="comment">// Sequence points N2239 Yes</span></div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
|
||||
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="comment">// Atomic operations N2427 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</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="comment">//</span></div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// Strong Compare and Exchange N2748 GCC 4.5</span></div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html</span></div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
|
||||
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment">// Bidirectional Fences N2752 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm</span></div>
|
||||
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div>
|
||||
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="comment">// Memory model N2429 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm</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="comment">//</span></div>
|
||||
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">// Data-dependency ordering: atomics and memory model N2664 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm</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">// Propagating exceptions N2179 GCC 4.4</span></div>
|
||||
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html</span></div>
|
||||
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div>
|
||||
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="comment">// Abandoning a process and at_quick_exit N2440 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm</span></div>
|
||||
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
||||
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">// Allow atomics use in signal handlers N2547 Yes</span></div>
|
||||
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm</span></div>
|
||||
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div>
|
||||
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// Thread-local storage N2659 GCC 4.8</span></div>
|
||||
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</span></div>
|
||||
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div>
|
||||
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="comment">// Dynamic initialization and destruction with concurrency N2660 GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm</span></div>
|
||||
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div>
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="comment">// __func__ predefined identifier N2340 GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm</span></div>
|
||||
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div>
|
||||
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// C99 preprocessor N1653 GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm</span></div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div>
|
||||
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="comment">// long long N1811 GCC 4.3</span></div>
|
||||
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</span></div>
|
||||
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
|
||||
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">// Extended integral types N1988 Yes</span></div>
|
||||
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf</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">#if(GLM_COMPILER & GLM_COMPILER_GCC)</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"># define GLM_CXX11_STATIC_ASSERT</span></div>
|
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div>
|
||||
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor">#elif(GLM_COMPILER & GLM_COMPILER_CLANG)</span></div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"># if(__has_feature(cxx_exceptions))</span></div>
|
||||
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"># define GLM_CXX98_EXCEPTIONS</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"># if(__has_feature(cxx_rtti))</span></div>
|
||||
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"># define GLM_CXX98_RTTI</span></div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"># if(__has_feature(cxx_access_control_sfinae))</span></div>
|
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"># define GLM_CXX11_ACCESS_CONTROL_SFINAE</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="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"># if(__has_feature(cxx_alias_templates))</span></div>
|
||||
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"># define GLM_CXX11_ALIAS_TEMPLATE</span></div>
|
||||
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"># endif</span></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> <span class="preprocessor"># if(__has_feature(cxx_alignas))</span></div>
|
||||
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"># define GLM_CXX11_ALIGNAS</span></div>
|
||||
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div>
|
||||
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"># if(__has_feature(cxx_attributes))</span></div>
|
||||
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"># define GLM_CXX11_ATTRIBUTES</span></div>
|
||||
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"># endif</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="preprocessor"># if(__has_feature(cxx_constexpr))</span></div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"># define GLM_CXX11_CONSTEXPR</span></div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div>
|
||||
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"># if(__has_feature(cxx_decltype))</span></div>
|
||||
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"># define GLM_CXX11_DECLTYPE</span></div>
|
||||
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div>
|
||||
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"># if(__has_feature(cxx_default_function_template_args))</span></div>
|
||||
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"># define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS</span></div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div>
|
||||
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"># if(__has_feature(cxx_defaulted_functions))</span></div>
|
||||
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"># define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>
|
||||
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"># endif</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="preprocessor"># if(__has_feature(cxx_delegating_constructors))</span></div>
|
||||
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"># define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>
|
||||
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div>
|
||||
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"># if(__has_feature(cxx_deleted_functions))</span></div>
|
||||
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"># define GLM_CXX11_DELETED_FUNCTIONS</span></div>
|
||||
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div>
|
||||
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"># if(__has_feature(cxx_explicit_conversions))</span></div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"># define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>
|
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"># if(__has_feature(cxx_generalized_initializers))</span></div>
|
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"># define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div>
|
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"># if(__has_feature(cxx_implicit_moves))</span></div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"># define GLM_CXX11_IMPLICIT_MOVES</span></div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"># if(__has_feature(cxx_inheriting_constructors))</span></div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"># define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>
|
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"># if(__has_feature(cxx_inline_namespaces))</span></div>
|
||||
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"># define GLM_CXX11_INLINE_NAMESPACES</span></div>
|
||||
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div>
|
||||
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"># if(__has_feature(cxx_lambdas))</span></div>
|
||||
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"># define GLM_CXX11_LAMBDAS</span></div>
|
||||
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
|
||||
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"># if(__has_feature(cxx_local_type_template_args))</span></div>
|
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"># define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>
|
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div>
|
||||
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"># if(__has_feature(cxx_noexcept))</span></div>
|
||||
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"># define GLM_CXX11_NOEXCEPT</span></div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"># endif</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"># if(__has_feature(cxx_nonstatic_member_init))</span></div>
|
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"># define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>
|
||||
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div>
|
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"># if(__has_feature(cxx_nullptr))</span></div>
|
||||
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"># define GLM_CXX11_NULLPTR</span></div>
|
||||
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"># endif</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="preprocessor"># if(__has_feature(cxx_override_control))</span></div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"># define GLM_CXX11_OVERRIDE_CONTROL</span></div>
|
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
|
||||
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"># if(__has_feature(cxx_reference_qualified_functions))</span></div>
|
||||
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"># define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>
|
||||
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div>
|
||||
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"># if(__has_feature(cxx_range_for))</span></div>
|
||||
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"># define GLM_CXX11_RANGE_FOR</span></div>
|
||||
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div>
|
||||
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"># if(__has_feature(cxx_raw_string_literals))</span></div>
|
||||
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"># define GLM_CXX11_RAW_STRING_LITERALS</span></div>
|
||||
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div>
|
||||
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"># if(__has_feature(cxx_rvalue_references))</span></div>
|
||||
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"># define GLM_CXX11_RVALUE_REFERENCES</span></div>
|
||||
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"># endif</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"># if(__has_feature(cxx_static_assert))</span></div>
|
||||
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"># define GLM_CXX11_STATIC_ASSERT</span></div>
|
||||
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
|
||||
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"># if(__has_feature(cxx_auto_type))</span></div>
|
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"># define GLM_CXX11_AUTO_TYPE</span></div>
|
||||
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div>
|
||||
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"># if(__has_feature(cxx_strong_enums))</span></div>
|
||||
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"># define GLM_CXX11_STRONG_ENUMS</span></div>
|
||||
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"># endif</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"># if(__has_feature(cxx_trailing_return))</span></div>
|
||||
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"># define GLM_CXX11_TRAILING_RETURN</span></div>
|
||||
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div>
|
||||
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"># if(__has_feature(cxx_unicode_literals))</span></div>
|
||||
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"># define GLM_CXX11_UNICODE_LITERALS</span></div>
|
||||
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div>
|
||||
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"># if(__has_feature(cxx_unrestricted_unions))</span></div>
|
||||
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"># define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>
|
||||
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
|
||||
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"># if(__has_feature(cxx_user_literals))</span></div>
|
||||
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"># define GLM_CXX11_USER_LITERALS</span></div>
|
||||
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div>
|
||||
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"># if(__has_feature(cxx_variadic_templates))</span></div>
|
||||
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"># define GLM_CXX11_VARIADIC_TEMPLATES</span></div>
|
||||
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div>
|
||||
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="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>
|
||||
@@ -1,121 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include <cmath></span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#ifdef max</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#undef max</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifdef min</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#undef min</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifdef isnan</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#undef isnan</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#ifdef isinf</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#undef isinf</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="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef log2</span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#undef log2</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><!-- 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>
|
||||
@@ -1,182 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "../common.hpp"</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span>detail</div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> {</div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T></div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  GLM_FUNC_QUALIFIER T mod289(T <span class="keyword">const</span>& x)</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="keywordflow">return</span> x - <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">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="l00012"></a><span class="lineno"> 12</span>  }</div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="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 permute(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> mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);</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, qualifier Q></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> <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></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class="keyword">const</span>& r)</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> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</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> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> <span class="keyword">const</span>& r)</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="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(0.85373472095314) * r;</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  }</div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> <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> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(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, qualifier Q></div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> <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> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(1.79284291400159) - <span class="keyword">static_cast<</span>T<span class="keyword">></span>(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, qualifier Q></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> <span class="keyword">const</span>& t)</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 * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</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, qualifier Q></div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> <span class="keyword">const</span>& t)</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  {</div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</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, qualifier Q></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> <span class="keyword">const</span>& t)</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="keywordflow">return</span> (t * t * t) * (t * (t * <span class="keyword">static_cast<</span>T<span class="keyword">></span>(6) - static_cast<T>(15)) + static_cast<T>(10));</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">//namespace detail</span></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> }<span class="comment">//namespace glm</span></div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div>
|
||||
<div class="ttc" id="a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d"><div class="ttname"><a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > 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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,905 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="keyword">namespace </span>detail</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">// Internal class for implementing swizzle operators</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keywordtype">int</span> N></div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">struct </span>_swizzle_base0</div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  {</div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">protected</span>:</div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</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="l00012"></a><span class="lineno"> 12</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="l00013"></a><span class="lineno"> 13</span> </div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="comment">// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</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="l00016"></a><span class="lineno"> 16</span>  <span class="comment">// elem()</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  <span class="keywordtype">char</span> _buffer[1];</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="keywordtype">int</span> N, <span class="keyword">typename</span> T, qualifier Q, <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="l00021"></a><span class="lineno"> 21</span>  <span class="keyword">struct </span>_swizzle_base1 : <span class="keyword">public</span> _swizzle_base0<T, N></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>  };</div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q, <span class="keywordtype">int</span> E0, <span class="keywordtype">int</span> E1, <span class="keywordtype">bool</span> Aligned></div>
|
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <span class="keyword">struct </span>_swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 2></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>  GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vec<2, T, Q>(this->elem(E0), this->elem(E1)); }</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> </div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q, <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="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">struct </span>_swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 3></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  };</div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q, <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="l00038"></a><span class="lineno"> 38</span>  <span class="keyword">struct </span>_swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : <span class="keyword">public</span> _swizzle_base0<T, 4></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>  GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  };</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="comment">// Internal class for implementing swizzle operators</span></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="comment">/*</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="comment"> Template parameters:</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"> T = type of scalar values (e.g. float, double)</span></div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="comment"> N = number of components in the vector (e.g. 3)</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</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="l00050"></a><span class="lineno"> 50</span> <span class="comment"></span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</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="l00052"></a><span class="lineno"> 52</span> <span class="comment"> containing duplicate elements so that they cannot be used as r-values).</span></div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="comment"> */</span></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, qualifier Q, <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="l00055"></a><span class="lineno"> 55</span>  <span class="keyword">struct </span>_swizzle_base2 : <span class="keyword">public</span> _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value></div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">struct </span>op_equal</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="keywordtype">void</span> operator() (T& <a class="code" href="a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t)<span class="keyword"> const</span>{ e = t; }</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">struct </span>op_minus</div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  {</div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t)<span class="keyword"> const</span>{ e -= t; }</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  };</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">struct </span>op_plus</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>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t)<span class="keyword"> const</span>{ e += t; }</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  };</div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">struct </span>op_mul</div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t)<span class="keyword"> const</span>{ e *= t; }</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>  <span class="keyword">struct </span>op_div</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator() (T& <a class="code" href="a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139">e</a>, T& t)<span class="keyword"> const</span>{ e /= t; }</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>  <span class="keyword">public</span>:</div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (<span class="keyword">const</span> T& t)</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="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  (*<span class="keyword">this</span>)[i] = t;</div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> *<span class="keyword">this</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> </div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> <span class="keyword">const</span>& that)</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>  _apply_op(that, op_equal());</div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> *<span class="keyword">this</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> </div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator -= (vec<N, T, Q> <span class="keyword">const</span>& that)</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_minus());</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 += (vec<N, T, Q> <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>  _apply_op(that, op_plus());</div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator *= (vec<N, T, Q> <span class="keyword">const</span>& that)</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>  _apply_op(that, op_mul());</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> </div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> operator /= (vec<N, T, Q> <span class="keyword">const</span>& that)</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>  _apply_op(that, op_div());</div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GLM_FUNC_QUALIFIER T& operator[](<span class="keywordtype">size_t</span> i)</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="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</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>  GLM_FUNC_QUALIFIER T operator[](<span class="keywordtype">size_t</span> i)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="keyword"> </span>{</div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">protected</span>:</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keyword">template</span><<span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_QUALIFIER <span class="keywordtype">void</span> _apply_op(vec<N, T, Q> <span class="keyword">const</span>& that, <span class="keyword">const</span> U& op)</div>
|
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">// Make a copy of the data in this == &that.</span></div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">// The copier should optimize out the copy in cases where the function is</span></div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="comment">// properly inlined and the copy is not necessary.</span></div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  T t[N];</div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
|
||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  t[i] = that[i];</div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < N; ++i)</div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  op( (*<span class="keyword">this</span>)[i], t[i] );</div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  }</div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  };</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Specialization for swizzles containing duplicate elements. These cannot be modified.</span></div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, qualifier Q, <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="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">struct </span>_swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : <span class="keyword">public</span> _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value></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="keyword">struct </span>Stub {};</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>  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="l00149"></a><span class="lineno"> 149</span> </div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GLM_FUNC_QUALIFIER T operator[] (<span class="keywordtype">size_t</span> i)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword"> </span>{</div>
|
||||
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>
|
||||
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> this->elem(offset_dst[i]);</div>
|
||||
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  }</div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  };</div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> N, <span class="keyword">typename</span> T, qualifier Q, <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="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">struct </span>_swizzle : <span class="keyword">public</span> _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)></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="keyword">typedef</span> _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;</div>
|
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
|
||||
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">using</span> base_type::operator=;</div>
|
||||
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  GLM_FUNC_QUALIFIER <span class="keyword">operator</span> vec<N, T, Q> () <span class="keyword">const</span> { <span class="keywordflow">return</span> (*<span class="keyword">this</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> </div>
|
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="comment">// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros</span></div>
|
||||
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">#define GLM_SWIZZLE_TEMPLATE1 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3></span></div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor">#define GLM_SWIZZLE_TEMPLATE2 template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3></span></div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor">#define GLM_SWIZZLE_TYPE1 _swizzle<N, T, Q, E0, E1, E2, E3></span></div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#define GLM_SWIZZLE_TYPE2 _swizzle<N, T, Q, F0, F1, F2, F3></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="comment">//</span></div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="comment">// Wrapper for a binary operator (e.g. u.yy + v.zy)</span></div>
|
||||
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor">#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \</span></div>
|
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE2 \</span></div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& 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"> return a() OPERAND b(); \</span></div>
|
||||
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& 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> <span class="preprocessor"> return a() OPERAND b; \</span></div>
|
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b) \</span></div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> return a OPERAND b(); \</span></div>
|
||||
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
|
||||
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00196"></a><span class="lineno"> 196</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="l00197"></a><span class="lineno"> 197</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor">#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \</span></div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& 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> <span class="preprocessor"> return a() OPERAND b; \</span></div>
|
||||
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> GLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \</span></div>
|
||||
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"> return a OPERAND b(); \</span></div>
|
||||
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
|
||||
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="comment">// Macro for wrapping a function taking one argument (e.g. abs())</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="preprocessor">#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \</span></div>
|
||||
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> return FUNCTION(a()); \</span></div>
|
||||
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> }</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">// Macro for wrapping a function taking two vector arguments (e.g. dot()).</span></div>
|
||||
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor">#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \</span></div>
|
||||
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE2 \</span></div>
|
||||
<div class="line"><a name="l00225"></a><span class="lineno"> 225</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="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"> return FUNCTION(a(), b()); \</span></div>
|
||||
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00230"></a><span class="lineno"> 230</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="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"> return FUNCTION(a(), b()); \</span></div>
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00235"></a><span class="lineno"> 235</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="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor"> return FUNCTION(a(), b); \</span></div>
|
||||
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</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="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> return FUNCTION(a, b()); \</span></div>
|
||||
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div>
|
||||
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00246"></a><span class="lineno"> 246</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="l00247"></a><span class="lineno"> 247</span> <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor">#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \</span></div>
|
||||
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE2 \</span></div>
|
||||
<div class="line"><a name="l00250"></a><span class="lineno"> 250</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="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"> return FUNCTION(a(), b(), c); \</span></div>
|
||||
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00255"></a><span class="lineno"> 255</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="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"> return FUNCTION(a(), b(), c); \</span></div>
|
||||
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</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="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> return FUNCTION(a(), b, c); \</span></div>
|
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> } \</span></div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> GLM_SWIZZLE_TEMPLATE1 \</span></div>
|
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</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="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"> return FUNCTION(a, b(), c); \</span></div>
|
||||
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> }</span></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> }<span class="comment">//namespace detail</span></div>
|
||||
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> }<span class="comment">//namespace glm</span></div>
|
||||
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div>
|
||||
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
||||
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> {</div>
|
||||
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">namespace </span>detail</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>  GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>
|
||||
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)</div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>
|
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>
|
||||
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)</div>
|
||||
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  }</div>
|
||||
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="comment">// Swizzles are distinct types from the unswizzled type. The below macros will</span></div>
|
||||
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// provide template specializations for the swizzle types for the given functions</span></div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</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="l00289"></a><span class="lineno"> 289</span>  <span class="comment">// the function.</span></div>
|
||||
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="comment">//</span></div>
|
||||
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="comment">// The alternative is to use the operator()() when calling the function in order</span></div>
|
||||
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// to explicitly convert the swizzled type to the unswizzled type.</span></div>
|
||||
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">//</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="comment">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs);</span></div>
|
||||
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos);</span></div>
|
||||
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh);</span></div>
|
||||
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all);</span></div>
|
||||
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any);</span></div>
|
||||
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div>
|
||||
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot);</span></div>
|
||||
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross);</span></div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step);</span></div>
|
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);</span></div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> }</div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div>
|
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor">#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \</span></div>
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };</span></div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div>
|
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor">#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \</span></div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor"> struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };</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">#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \</span></div>
|
||||
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };</span></div>
|
||||
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div>
|
||||
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor">#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \</span></div>
|
||||
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };</span></div>
|
||||
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div>
|
||||
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor">#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \</span></div>
|
||||
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };</span></div>
|
||||
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div>
|
||||
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor">#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \</span></div>
|
||||
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"> struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };</span></div>
|
||||
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div>
|
||||
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor">#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \</span></div>
|
||||
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };</span></div>
|
||||
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> </div>
|
||||
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor">#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \</span></div>
|
||||
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };</span></div>
|
||||
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div>
|
||||
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \</span></div>
|
||||
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \</span></div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \</span></div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \</span></div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \</span></div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="preprocessor"> struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };</span></div>
|
||||
<div class="ttc" id="a00290_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139"><div class="ttname"><a href="a00290.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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,781 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor"> vec<2, T, Q> A ## B() CONST \</span></div>
|
||||
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor"> return vec<2, T, Q>(this->A, this->B); \</span></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor"> }</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="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor"> vec<3, T, Q> A ## B ## C() CONST \</span></div>
|
||||
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor"> return vec<3, T, Q>(this->A, this->B, this->C); \</span></div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor"> vec<4, T, Q> A ## B ## C ## D() CONST \</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor"> return vec<4, T, Q>(this->A, this->B, this->C, this->D); \</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor"> }</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">#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"> template<typename T> \</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"> vec<L, T, Q> vec<L, T, Q>::A ## B() CONST \</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"> return vec<2, T, Q>(this->A, this->B); \</span></div>
|
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor"> template<typename T> \</span></div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor"> vec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST \</span></div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor"> return vec<3, T, Q>(this->A, this->B, this->C); \</span></div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"> template<typename T> \</span></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor"> vec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST \</span></div>
|
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor"> { \</span></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor"> return vec<4, T, Q>(this->A, this->B, this->C, this->D); \</span></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor"> }</span></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define GLM_MUTABLE</span></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \</span></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)</span></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \</span></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \</span></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \</span></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)</span></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \</span></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \</span></div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \</span></div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \</span></div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \</span></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)</span></div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)</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">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \</span></div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \</span></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \</span></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)</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_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \</span></div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \</span></div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \</span></div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \</span></div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \</span></div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \</span></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \</span></div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \</span></div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \</span></div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \</span></div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \</span></div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)</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">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)</span></div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)</span></div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>
|
||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div>
|
||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \</span></div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \</span></div>
|
||||
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \</span></div>
|
||||
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)</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="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \</span></div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \</span></div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \</span></div>
|
||||
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)</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="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)</span></div>
|
||||
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)</span></div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
|
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \</span></div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)</span></div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
|
||||
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \</span></div>
|
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \</span></div>
|
||||
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \</span></div>
|
||||
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)</span></div>
|
||||
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \</span></div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \</span></div>
|
||||
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \</span></div>
|
||||
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \</span></div>
|
||||
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \</span></div>
|
||||
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \</span></div>
|
||||
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \</span></div>
|
||||
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \</span></div>
|
||||
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)</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_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)</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="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)</span></div>
|
||||
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>
|
||||
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div>
|
||||
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \</span></div>
|
||||
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \</span></div>
|
||||
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \</span></div>
|
||||
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)</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">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \</span></div>
|
||||
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \</span></div>
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \</span></div>
|
||||
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \</span></div>
|
||||
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \</span></div>
|
||||
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \</span></div>
|
||||
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \</span></div>
|
||||
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \</span></div>
|
||||
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \</span></div>
|
||||
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \</span></div>
|
||||
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \</span></div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \</span></div>
|
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \</span></div>
|
||||
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \</span></div>
|
||||
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \</span></div>
|
||||
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)</span></div>
|
||||
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div>
|
||||
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \</span></div>
|
||||
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \</span></div>
|
||||
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \</span></div>
|
||||
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \</span></div>
|
||||
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \</span></div>
|
||||
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \</span></div>
|
||||
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \</span></div>
|
||||
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \</span></div>
|
||||
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \</span></div>
|
||||
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \</span></div>
|
||||
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \</span></div>
|
||||
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \</span></div>
|
||||
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \</span></div>
|
||||
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \</span></div>
|
||||
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \</span></div>
|
||||
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \</span></div>
|
||||
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \</span></div>
|
||||
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \</span></div>
|
||||
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)</span></div>
|
||||
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div>
|
||||
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \</span></div>
|
||||
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \</span></div>
|
||||
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \</span></div>
|
||||
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \</span></div>
|
||||
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \</span></div>
|
||||
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \</span></div>
|
||||
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \</span></div>
|
||||
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \</span></div>
|
||||
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \</span></div>
|
||||
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \</span></div>
|
||||
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \</span></div>
|
||||
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \</span></div>
|
||||
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \</span></div>
|
||||
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \</span></div>
|
||||
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \</span></div>
|
||||
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \</span></div>
|
||||
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \</span></div>
|
||||
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \</span></div>
|
||||
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \</span></div>
|
||||
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \</span></div>
|
||||
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \</span></div>
|
||||
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \</span></div>
|
||||
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \</span></div>
|
||||
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \</span></div>
|
||||
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \</span></div>
|
||||
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \</span></div>
|
||||
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \</span></div>
|
||||
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \</span></div>
|
||||
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \</span></div>
|
||||
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \</span></div>
|
||||
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \</span></div>
|
||||
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \</span></div>
|
||||
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \</span></div>
|
||||
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \</span></div>
|
||||
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \</span></div>
|
||||
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \</span></div>
|
||||
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \</span></div>
|
||||
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \</span></div>
|
||||
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \</span></div>
|
||||
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \</span></div>
|
||||
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \</span></div>
|
||||
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \</span></div>
|
||||
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \</span></div>
|
||||
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \</span></div>
|
||||
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \</span></div>
|
||||
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \</span></div>
|
||||
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \</span></div>
|
||||
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \</span></div>
|
||||
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \</span></div>
|
||||
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \</span></div>
|
||||
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \</span></div>
|
||||
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \</span></div>
|
||||
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \</span></div>
|
||||
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \</span></div>
|
||||
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \</span></div>
|
||||
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \</span></div>
|
||||
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \</span></div>
|
||||
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \</span></div>
|
||||
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \</span></div>
|
||||
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \</span></div>
|
||||
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \</span></div>
|
||||
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \</span></div>
|
||||
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \</span></div>
|
||||
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \</span></div>
|
||||
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \</span></div>
|
||||
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \</span></div>
|
||||
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \</span></div>
|
||||
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \</span></div>
|
||||
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \</span></div>
|
||||
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \</span></div>
|
||||
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \</span></div>
|
||||
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \</span></div>
|
||||
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \</span></div>
|
||||
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \</span></div>
|
||||
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \</span></div>
|
||||
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \</span></div>
|
||||
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \</span></div>
|
||||
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \</span></div>
|
||||
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \</span></div>
|
||||
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \</span></div>
|
||||
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \</span></div>
|
||||
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \</span></div>
|
||||
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \</span></div>
|
||||
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \</span></div>
|
||||
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \</span></div>
|
||||
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \</span></div>
|
||||
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \</span></div>
|
||||
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \</span></div>
|
||||
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \</span></div>
|
||||
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \</span></div>
|
||||
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \</span></div>
|
||||
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \</span></div>
|
||||
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \</span></div>
|
||||
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \</span></div>
|
||||
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \</span></div>
|
||||
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \</span></div>
|
||||
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \</span></div>
|
||||
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \</span></div>
|
||||
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \</span></div>
|
||||
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \</span></div>
|
||||
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \</span></div>
|
||||
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \</span></div>
|
||||
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \</span></div>
|
||||
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \</span></div>
|
||||
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \</span></div>
|
||||
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \</span></div>
|
||||
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \</span></div>
|
||||
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \</span></div>
|
||||
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \</span></div>
|
||||
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \</span></div>
|
||||
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \</span></div>
|
||||
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \</span></div>
|
||||
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \</span></div>
|
||||
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \</span></div>
|
||||
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \</span></div>
|
||||
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \</span></div>
|
||||
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \</span></div>
|
||||
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \</span></div>
|
||||
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \</span></div>
|
||||
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)</span></div>
|
||||
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div>
|
||||
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \</span></div>
|
||||
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>
|
||||
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div>
|
||||
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="preprocessor">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \</span></div>
|
||||
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \</span></div>
|
||||
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \</span></div>
|
||||
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> <span class="preprocessor"> GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)</span></div>
|
||||
<div class="line"><a name="l00682"></a><span class="lineno"> 682</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>
|
||||
@@ -1,262 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: _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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.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">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="keyword">namespace </span><a class="code" href="a00236.html">glm</a>{</div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="keyword">namespace </span>detail</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">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>  <span class="keyword">struct </span>functor1{};</div>
|
||||
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div>
|
||||
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">struct </span>functor1<vec, 1, R, T, Q></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>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> <span class="keyword">const</span>& v)</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="keywordflow">return</span> vec<1, R, Q>(Func(v.x));</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>  };</div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  <span class="keyword">struct </span>functor1<vec, 2, R, T, Q></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>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> <span class="keyword">const</span>& v)</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> vec<2, R, Q>(Func(v.x), Func(v.y));</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> </div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">struct </span>functor1<vec, 3, R, T, Q></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  {</div>
|
||||
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> <span class="keyword">const</span>& v)</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="keywordflow">return</span> vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));</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> </div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> R, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="keyword">struct </span>functor1<vec, 4, R, T, Q></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>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> <span class="keyword">const</span>& v)</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> vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));</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> </div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">struct </span>functor2{};</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">struct </span>functor2<vec, 1, T, Q></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  {</div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> <span class="keyword">const</span>& a, vec<1, T, Q> <span class="keyword">const</span>& b)</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> vec<1, T, Q>(Func(a.x, b.x));</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> </div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">struct </span>functor2<vec, 2, T, Q></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  {</div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> <span class="keyword">const</span>& a, vec<2, T, Q> <span class="keyword">const</span>& b)</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="keywordflow">return</span> vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));</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> </div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">struct </span>functor2<vec, 3, T, Q></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>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> <span class="keyword">const</span>& a, vec<3, T, Q> <span class="keyword">const</span>& b)</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> vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  };</div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">struct </span>functor2<vec, 4, T, Q></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> <span class="keyword">const</span>& a, vec<4, T, Q> <span class="keyword">const</span>& b)</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> vec<4, T, Q>(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="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> </div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">struct </span>functor2_vec_sca{};</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">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 1, T, Q></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>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> <span class="keyword">const</span>& a, T b)</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="keywordflow">return</span> vec<1, T, Q>(Func(a.x, b));</div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  };</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="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 2, T, 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>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> <span class="keyword">const</span>& a, T b)</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="keywordflow">return</span> vec<2, T, Q>(Func(a.x, b), Func(a.y, b));</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> </div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 3, T, Q></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>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));</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> </div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keyword">template</span><<span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q> <span class="keyword">class </span>vec, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keyword">struct </span>functor2_vec_sca<vec, 4, T, Q></div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> <span class="keyword">const</span>& a, T b)</div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  {</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">return</span> vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));</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> </div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keyword">struct </span>functor2_vec_int {};</div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">struct </span>functor2_vec_int<1, T, Q></div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div>
|
||||
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<1, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<1, T, Q> <span class="keyword">const</span>& a, vec<1, int, Q> <span class="keyword">const</span>& b)</div>
|
||||
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  {</div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> vec<1, int, Q>(Func(a.x, b.x));</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="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">struct </span>functor2_vec_int<2, T, Q></div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<2, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<2, T, Q> <span class="keyword">const</span>& a, vec<2, int, Q> <span class="keyword">const</span>& b)</div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">return</span> vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  }</div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  };</div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">struct </span>functor2_vec_int<3, T, Q></div>
|
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  {</div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<3, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<3, T, Q> <span class="keyword">const</span>& a, vec<3, int, Q> <span class="keyword">const</span>& b)</div>
|
||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div>
|
||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  }</div>
|
||||
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  };</div>
|
||||
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div>
|
||||
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">struct </span>functor2_vec_int<4, T, Q></div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_QUALIFIER <span class="keyword">static</span> vec<4, int, Q> call(<span class="keywordtype">int</span> (*Func) (T x, <span class="keywordtype">int</span> y), vec<4, T, Q> <span class="keyword">const</span>& a, vec<4, int, Q> <span class="keyword">const</span>& b)</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="keywordflow">return</span> vec<4, int, Q>(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="l00159"></a><span class="lineno"> 159</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">//namespace detail</span></div>
|
||||
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> }<span class="comment">//namespace glm</span></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,205 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00308.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="a00308.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="a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga7d9c8785230c8db60f72ec8975f1ba45"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga5c6758bc50aa7fbe700f87123a045aad">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)</td></tr>
|
||||
<tr class="memdesc:ga5c6758bc50aa7fbe700f87123a045aad"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga5c6758bc50aa7fbe700f87123a045aad">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga5c6758bc50aa7fbe700f87123a045aad"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga0d169d6ce26b03248df175f39005d77f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga0d169d6ce26b03248df175f39005d77f">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b)</td></tr>
|
||||
<tr class="memdesc:ga0d169d6ce26b03248df175f39005d77f"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga0d169d6ce26b03248df175f39005d77f">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga0d169d6ce26b03248df175f39005d77f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga4086269afabcb81dd7ded33cb3448653"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4086269afabcb81dd7ded33cb3448653">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)</td></tr>
|
||||
<tr class="memdesc:ga4086269afabcb81dd7ded33cb3448653"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga4086269afabcb81dd7ded33cb3448653">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga4086269afabcb81dd7ded33cb3448653"><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="a00308.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="a00308.html#gaec891e363d91abbf3a4443cf2f652209">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaec891e363d91abbf3a4443cf2f652209"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)</td></tr>
|
||||
<tr class="memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c">More...</a><br /></td></tr>
|
||||
<tr class="separator:gab84fdc35016a31e8cd0cbb8296bddf7c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c)</td></tr>
|
||||
<tr class="memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba">More...</a><br /></td></tr>
|
||||
<tr class="separator:gadd2a2002f4f2144bbc39eb2336dd2fba"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga19f59d1141a51a3b2108a9807af78f7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga19f59d1141a51a3b2108a9807af78f7f">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c)</td></tr>
|
||||
<tr class="memdesc:ga19f59d1141a51a3b2108a9807af78f7f"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#ga19f59d1141a51a3b2108a9807af78f7f">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga19f59d1141a51a3b2108a9807af78f7f"><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="a00308.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="a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga3038ffcb43eaa6af75897a99a5047ccc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6">associatedMax</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)</td></tr>
|
||||
<tr class="memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d">associatedMax</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)</td></tr>
|
||||
<tr class="memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga11477c2c4b5b0bfd1b72b29df3725a9d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)</td></tr>
|
||||
<tr class="memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="mdescLeft"> </td><td class="mdescRight">Maximum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">More...</a><br /></td></tr>
|
||||
<tr class="separator:gab9c3dd74cac899d2c625b5767ea3b3fb"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gacc01bd272359572fc28437ae214a02df"><td class="memTemplParams" colspan="2">template<typename T , typename U , qualifier Q> </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="a00308.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="a00308.html#gacc01bd272359572fc28437ae214a02df">More...</a><br /></td></tr>
|
||||
<tr class="separator:gacc01bd272359572fc28437ae214a02df"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gac2f0dff90948f2e44386a5eafd941d1c">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b)</td></tr>
|
||||
<tr class="memdesc:gac2f0dff90948f2e44386a5eafd941d1c"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#gac2f0dff90948f2e44386a5eafd941d1c">More...</a><br /></td></tr>
|
||||
<tr class="separator:gac2f0dff90948f2e44386a5eafd941d1c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gacfec519c820331d023ef53a511749319"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#gacfec519c820331d023ef53a511749319">associatedMin</a> (T x, const vec< L, U, Q > &a, T y, const vec< L, U, Q > &b)</td></tr>
|
||||
<tr class="memdesc:gacfec519c820331d023ef53a511749319"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#gacfec519c820331d023ef53a511749319">More...</a><br /></td></tr>
|
||||
<tr class="separator:gacfec519c820331d023ef53a511749319"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga4757c7cab2d809124a8525d0a9deeb37"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga4757c7cab2d809124a8525d0a9deeb37">associatedMin</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b)</td></tr>
|
||||
<tr class="memdesc:ga4757c7cab2d809124a8525d0a9deeb37"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 2 variables and returns 2 associated variable values. <a href="a00308.html#ga4757c7cab2d809124a8525d0a9deeb37">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga4757c7cab2d809124a8525d0a9deeb37"><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="a00308.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="a00308.html#gad0aa8f86259a26d839d34a3577a923fc">More...</a><br /></td></tr>
|
||||
<tr class="separator:gad0aa8f86259a26d839d34a3577a923fc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c)</td></tr>
|
||||
<tr class="memdesc:ga723e5411cebc7ffbd5c81ffeec61127d"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 3 variables and returns 3 associated variable values. <a href="a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga723e5411cebc7ffbd5c81ffeec61127d"><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="a00308.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="a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga432224ebe2085eaa2b63a077ecbbbff6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga66b08118bc88f0494bcacb7cdb940556"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga66b08118bc88f0494bcacb7cdb940556">associatedMin</a> (vec< L, T, Q > const &x, vec< L, U, Q > const &a, vec< L, T, Q > const &y, vec< L, U, Q > const &b, vec< L, T, Q > const &z, vec< L, U, Q > const &c, vec< L, T, Q > const &w, vec< L, U, Q > const &d)</td></tr>
|
||||
<tr class="memdesc:ga66b08118bc88f0494bcacb7cdb940556"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga66b08118bc88f0494bcacb7cdb940556">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga66b08118bc88f0494bcacb7cdb940556"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68">associatedMin</a> (T x, vec< L, U, Q > const &a, T y, vec< L, U, Q > const &b, T z, vec< L, U, Q > const &c, T w, vec< L, U, Q > const &d)</td></tr>
|
||||
<tr class="memdesc:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga78c28fde1a7080fb7420bd88e68c6c68"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename U , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2db7e351994baee78540a562d4bb6d3b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, U, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a> (vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)</td></tr>
|
||||
<tr class="memdesc:ga2db7e351994baee78540a562d4bb6d3b"><td class="mdescLeft"> </td><td class="mdescRight">Minimum comparison between 4 variables and returns 4 associated variable values. <a href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2db7e351994baee78540a562d4bb6d3b"><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="a00308.html">GLM_GTX_associated_min_max</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
||||
<dd>
|
||||
gtx_extented_min_max (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>
|
||||
@@ -1,250 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Dependency:</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_associated_min_max is an experimental 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="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># else</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> <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="a00236.html">glm</a></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(T x, U a, T y, U b);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<2, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b);</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  T x, <span class="keyword">const</span> vec<L, U, Q>& a,</div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  T y, <span class="keyword">const</span> vec<L, U, Q>& b);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b);</div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
|
||||
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  T z, U c);</div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c);</div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  T z, U c,</div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  T w, U d);</div>
|
||||
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  vec<L, T, Q> <span class="keyword">const</span>& w, vec<L, U, Q> <span class="keyword">const</span>& d);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  T w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">associatedMin</a>(</div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c,</div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  vec<L, T, Q> <span class="keyword">const</span>& w, U d);</div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(T x, U a, T y, U b);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL vec<2, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b);</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b);</div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  T z, U c);</div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div>
|
||||
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c);</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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c);</div>
|
||||
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div>
|
||||
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
||||
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c);</div>
|
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div>
|
||||
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> U></div>
|
||||
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  GLM_FUNC_DECL U <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  T x, U a,</div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  T y, U b,</div>
|
||||
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  T z, U c,</div>
|
||||
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  T w, U d);</div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div>
|
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  vec<L, T, Q> <span class="keyword">const</span>& z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
||||
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  vec<L, T, Q> <span class="keyword">const</span>& w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
||||
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div>
|
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  T x, vec<L, U, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  T y, vec<L, U, Q> <span class="keyword">const</span>& b,</div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  T z, vec<L, U, Q> <span class="keyword">const</span>& c,</div>
|
||||
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  T w, vec<L, U, Q> <span class="keyword">const</span>& d);</div>
|
||||
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span> </div>
|
||||
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL vec<L, U, Q> <a class="code" href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">associatedMax</a>(</div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  vec<L, T, Q> <span class="keyword">const</span>& x, U a,</div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  vec<L, T, Q> <span class="keyword">const</span>& y, U b,</div>
|
||||
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  vec<L, T, Q> <span class="keyword">const</span>& z, U c,</div>
|
||||
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  vec<L, T, Q> <span class="keyword">const</span>& w, U d);</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 "associated_min_max.inl"</span></div>
|
||||
<div class="ttc" id="a00308_html_gab9c3dd74cac899d2c625b5767ea3b3fb"><div class="ttname"><a href="a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb">glm::associatedMax</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, U, Q > associatedMax(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > 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="a00308_html_ga2db7e351994baee78540a562d4bb6d3b"><div class="ttname"><a href="a00308.html#ga2db7e351994baee78540a562d4bb6d3b">glm::associatedMin</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, U, Q > associatedMin(vec< L, T, Q > const &x, U a, vec< L, T, Q > const &y, U b, vec< L, T, Q > const &z, U c, vec< L, T, Q > const &w, U d)</div><div class="ttdoc">Minimum comparison between 4 variables and returns 4 associated variable values. </div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,149 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00309.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="a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05">highestBitValue</a> (genIUType Value)</td></tr>
|
||||
<tr class="separator:ga0dcc8fe7c3d3ad60dea409281efa3d05"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga898ef075ccf809a1e480faab48fe96bf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a> (vec< L, T, Q > const &value)</td></tr>
|
||||
<tr class="memdesc:ga898ef075ccf809a1e480faab48fe96bf"><td class="mdescLeft"> </td><td class="mdescRight">Find the highest bit set to 1 in a integer variable and return its value. <a href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga898ef075ccf809a1e480faab48fe96bf"><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="a00309.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="a00309.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="a00309.html#ga8cda2459871f574a0aecbe702ac93291">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8cda2459871f574a0aecbe702ac93291"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2bbded187c5febfefc1e524ba31b3fab"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a> (vec< L, T, Q > const &value)</td></tr>
|
||||
<tr class="memdesc:ga2bbded187c5febfefc1e524ba31b3fab"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just higher the input value. <a href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2bbded187c5febfefc1e524ba31b3fab"><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="a00309.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="a00309.html#ga3de7df63c589325101a2817a56f8e29d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga3de7df63c589325101a2817a56f8e29d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf78ddcc4152c051b2a21e68fecb10980"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a> (vec< L, T, Q > const &value)</td></tr>
|
||||
<tr class="memdesc:gaf78ddcc4152c051b2a21e68fecb10980"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is just lower the input value. <a href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaf78ddcc4152c051b2a21e68fecb10980"><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="a00309.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="a00309.html#ga5f65973a5d2ea38c719e6a663149ead9">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga5f65973a5d2ea38c719e6a663149ead9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="memTemplItemLeft" align="right" valign="top">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a> (vec< L, T, Q > const &value)</td></tr>
|
||||
<tr class="memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b"><td class="mdescLeft"> </td><td class="mdescRight">Return the power of two number which value is the closet to the input value. <a href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">More...</a><br /></td></tr>
|
||||
<tr class="separator:gac87e65d11e16c3d6b91c3bcfaef7da0b"><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="a00309.html">GLM_GTX_bit</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,154 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_bit is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_bit extension included")</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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="a00236.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="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">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="a00309.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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">highestBitValue</a>(vec<L, T, Q> <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="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">powerOfTwoAbove</a>(vec<L, T, Q> <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="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">powerOfTwoBelow</a>(vec<L, T, Q> <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="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  GLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">powerOfTwoNearest</a>(vec<L, T, Q> <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="a00309_html_ga898ef075ccf809a1e480faab48fe96bf"><div class="ttname"><a href="a00309.html#ga898ef075ccf809a1e480faab48fe96bf">glm::highestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > highestBitValue(vec< L, T, Q > 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="a00309_html_gaf78ddcc4152c051b2a21e68fecb10980"><div class="ttname"><a href="a00309.html#gaf78ddcc4152c051b2a21e68fecb10980">glm::powerOfTwoBelow</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoBelow(vec< L, T, Q > 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="a00309_html_ga2bbded187c5febfefc1e524ba31b3fab"><div class="ttname"><a href="a00309.html#ga2bbded187c5febfefc1e524ba31b3fab">glm::powerOfTwoAbove</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoAbove(vec< L, T, Q > 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="a00309_html_gac87e65d11e16c3d6b91c3bcfaef7da0b"><div class="ttname"><a href="a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b">glm::powerOfTwoNearest</a></div><div class="ttdeci">GLM_DEPRECATED GLM_FUNC_DECL vec< L, T, Q > powerOfTwoNearest(vec< L, T, Q > const &value)</div><div class="ttdoc">Return the power of two number which value is the closet to the input value. </div></div>
|
||||
<div class="ttc" id="a00309_html_ga2ff6568089f3a9b67f5c30918855fc6f"><div class="ttname"><a href="a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f">glm::lowestBitValue</a></div><div class="ttdeci">GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value)</div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,223 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.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="a00288.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:ga091d934233a2e121df91b8c7230357c8"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga091d934233a2e121df91b8c7230357c8">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a> x)</td></tr>
|
||||
<tr class="memdesc:ga091d934233a2e121df91b8c7230357c8"><td class="mdescLeft"> </td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga091d934233a2e121df91b8c7230357c8">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga091d934233a2e121df91b8c7230357c8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a> x)</td></tr>
|
||||
<tr class="memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="mdescLeft"> </td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga7d1cc24dfbcdd932c3a2abbb76235f98"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL <a class="el" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a> (<a class="el" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a> x)</td></tr>
|
||||
<tr class="memdesc:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="mdescLeft"> </td><td class="mdescRight">Deinterleaves the bits of x. <a href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8dbb8c87092f33bd815dd8a840be5d60"><td class="memSeparator" colspan="2"> </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="a00288.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="a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga46f9295abe3b5c7658f5b13c7f819f0a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a> (vec< L, T, Q > const &Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1"><td class="mdescLeft"> </td><td class="mdescRight">Set to 1 a range of bits. <a href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga3e96dd1f0a4bc892f063251ed118c0c1"><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="a00288.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="a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga697b86998b7d74ee0a69d8e9f8819fee"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a> (vec< L, T, Q > const &Value, int FirstBit, int BitCount)</td></tr>
|
||||
<tr class="memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2"><td class="mdescLeft"> </td><td class="mdescRight">Set to 0 a range of bits. <a href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga0d16c9acef4be79ea9b47c082a0cf7c2"><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="a00288.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="a00288.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="a00288.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="a00288.html#ga9a4976a529aec2cee56525e1165da484">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga9a4976a529aec2cee56525e1165da484"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4a76bbca39c40153f3203d0a1926e142"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint16 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga4a76bbca39c40153f3203d0a1926e142">bitfieldInterleave</a> (u8vec2 const &v)</td></tr>
|
||||
<tr class="memdesc:ga4a76bbca39c40153f3203d0a1926e142"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga4a76bbca39c40153f3203d0a1926e142">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga4a76bbca39c40153f3203d0a1926e142"><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="a00288.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="a00288.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="a00288.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="a00288.html#ga94f3646a5667f4be56f8dcf3310e963f">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga94f3646a5667f4be56f8dcf3310e963f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga406c4ee56af4ca37a73f449f154eca3e"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint32 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga406c4ee56af4ca37a73f449f154eca3e">bitfieldInterleave</a> (u16vec2 const &v)</td></tr>
|
||||
<tr class="memdesc:ga406c4ee56af4ca37a73f449f154eca3e"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga406c4ee56af4ca37a73f449f154eca3e">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga406c4ee56af4ca37a73f449f154eca3e"><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="a00288.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="a00288.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="a00288.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="a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint64 </td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78">bitfieldInterleave</a> (u32vec2 const &v)</td></tr>
|
||||
<tr class="memdesc:ga8cb17574d60abd6ade84bc57c10e8f78"><td class="mdescLeft"> </td><td class="mdescRight">Interleaves the bits of x and y. <a href="a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8cb17574d60abd6ade84bc57c10e8f78"><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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.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="a00288.html#ga2eb49678a344ce1495bdb5586d9896b9">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2eb49678a344ce1495bdb5586d9896b9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gae186317091b1a39214ebf79008d44a1e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a> (vec< L, T, Q > const &In, int Shift)</td></tr>
|
||||
<tr class="memdesc:gae186317091b1a39214ebf79008d44a1e"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the left. <a href="a00288.html#gae186317091b1a39214ebf79008d44a1e">More...</a><br /></td></tr>
|
||||
<tr class="separator:gae186317091b1a39214ebf79008d44a1e"><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="a00288.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="a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a> (vec< L, T, Q > const &In, int Shift)</td></tr>
|
||||
<tr class="memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><td class="mdescLeft"> </td><td class="mdescRight">Rotate all bits to the right. <a href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88"><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="a00288.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="a00288.html#gad7eba518a0b71662114571ee76939f8a">More...</a><br /></td></tr>
|
||||
<tr class="separator:gad7eba518a0b71662114571ee76939f8a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2e64e3b922a296033b825311e7f5fff1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a> (vec< L, T, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga2e64e3b922a296033b825311e7f5fff1"><td class="mdescLeft"> </td><td class="mdescRight">Build a mask of 'count' bits. <a href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2e64e3b922a296033b825311e7f5fff1"><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="a00288.html">GLM_GTC_bitfield</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
||||
<dd>
|
||||
<a class="el" href="a00288.html" title="Include <glm/gtc/bitfield.hpp> to use the features of this extension. ">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>
|
||||
@@ -1,212 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.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">#include "../detail/setup.hpp"</span></div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// Dependencies</span></div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "../ext/scalar_int_sized.hpp"</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "../ext/scalar_uint_sized.hpp"</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include "../detail/qualifier.hpp"</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "../detail/_vectorize.hpp"</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "<a class="code" href="a00174.html">type_precision.hpp</a>"</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <limits></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_ENABLE && !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_GTC_bitfield 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="a00236.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> genIUType></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a>(genIUType Bits);</div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">mask</a>(vec<L, T, Q> <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="l00054"></a><span class="lineno"> 54</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">bitfieldRotateRight</a>(vec<L, T, Q> <span class="keyword">const</span>& In, <span class="keywordtype">int</span> Shift);</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a>(genIUType In, <span class="keywordtype">int</span> Shift);</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#gae186317091b1a39214ebf79008d44a1e">bitfieldRotateLeft</a>(vec<L, T, Q> <span class="keyword">const</span>& In, <span class="keywordtype">int</span> Shift);</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> genIUType></div>
|
||||
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">bitfieldFillOne</a>(vec<L, T, Q> <span class="keyword">const</span>& Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
|
||||
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div>
|
||||
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genIUType></div>
|
||||
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  GLM_FUNC_DECL genIUType <a class="code" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a>(genIUType Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">bitfieldFillZero</a>(vec<L, T, Q> <span class="keyword">const</span>& Value, <span class="keywordtype">int</span> FirstBit, <span class="keywordtype">int</span> BitCount);</div>
|
||||
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  GLM_FUNC_DECL int16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y);</div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y);</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  GLM_FUNC_DECL uint16 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">u8vec2</a> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  GLM_FUNC_DECL <a class="code" href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a> x);</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 int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y);</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 uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y);</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 uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">u16vec2</a> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div>
|
||||
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  GLM_FUNC_DECL <a class="code" href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a> x);</div>
|
||||
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div>
|
||||
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y);</div>
|
||||
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div>
|
||||
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y);</div>
|
||||
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div>
|
||||
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(<a class="code" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">u32vec2</a> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div>
|
||||
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  GLM_FUNC_DECL <a class="code" href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a> <a class="code" href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">bitfieldDeinterleave</a>(<a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a> x);</div>
|
||||
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  GLM_FUNC_DECL int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z);</div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div>
|
||||
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z);</div>
|
||||
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div>
|
||||
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z);</div>
|
||||
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z);</div>
|
||||
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
||||
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int32 x, int32 y, int32 z);</div>
|
||||
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div>
|
||||
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint32 x, uint32 y, uint32 z);</div>
|
||||
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL int32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int8 x, int8 y, int8 z, int8 w);</div>
|
||||
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
|
||||
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  GLM_FUNC_DECL uint32 <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z, uint8 w);</div>
|
||||
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div>
|
||||
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  GLM_FUNC_DECL <a class="code" href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">int64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(int16 x, int16 y, int16 z, int16 w);</div>
|
||||
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div>
|
||||
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  GLM_FUNC_DECL <a class="code" href="a00263.html#gab630f76c26b50298187f7889104d4b9c">uint64</a> <a class="code" href="a00288.html#gafca8768671a14c8016facccb66a89f26">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z, uint16 w);</div>
|
||||
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span> } <span class="comment">//namespace glm</span></div>
|
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
||||
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#include "bitfield.inl"</span></div>
|
||||
<div class="ttc" id="a00263_html_ga1134b580f8da4de94ca6b1de4d37975e"><div class="ttname"><a href="a00263.html#ga1134b580f8da4de94ca6b1de4d37975e">glm::uint32</a></div><div class="ttdeci">detail::uint32 uint32</div><div class="ttdoc">32 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00064">scalar_uint_sized.hpp:64</a></div></div>
|
||||
<div class="ttc" id="a00288_html_gafca8768671a14c8016facccb66a89f26"><div class="ttname"><a href="a00288.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="a00288_html_ga8dbb8c87092f33bd815dd8a840be5d60"><div class="ttname"><a href="a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60">glm::bitfieldDeinterleave</a></div><div class="ttdeci">GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)</div><div class="ttdoc">Deinterleaves the bits of x. </div></div>
|
||||
<div class="ttc" id="a00288_html_ga0d16c9acef4be79ea9b47c082a0cf7c2"><div class="ttname"><a href="a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2">glm::bitfieldFillZero</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > bitfieldFillZero(vec< L, T, Q > const &Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 0 a range of bits. </div></div>
|
||||
<div class="ttc" id="a00263_html_ga05f6b0ae8f6a6e135b0e290c25fe0e4e"><div class="ttname"><a href="a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e">glm::uint16</a></div><div class="ttdeci">detail::uint16 uint16</div><div class="ttdoc">16 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00061">scalar_uint_sized.hpp:61</a></div></div>
|
||||
<div class="ttc" id="a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611"><div class="ttname"><a href="a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611">glm::u8vec2</a></div><div class="ttdeci">vec< 2, u8, defaultp > u8vec2</div><div class="ttdoc">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00340">fwd.hpp:340</a></div></div>
|
||||
<div class="ttc" id="a00288_html_gae186317091b1a39214ebf79008d44a1e"><div class="ttname"><a href="a00288.html#gae186317091b1a39214ebf79008d44a1e">glm::bitfieldRotateLeft</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateLeft(vec< L, T, Q > const &In, int Shift)</div><div class="ttdoc">Rotate all bits to the left. </div></div>
|
||||
<div class="ttc" id="a00288_html_ga2e64e3b922a296033b825311e7f5fff1"><div class="ttname"><a href="a00288.html#ga2e64e3b922a296033b825311e7f5fff1">glm::mask</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > mask(vec< L, T, Q > const &v)</div><div class="ttdoc">Build a mask of 'count' bits. </div></div>
|
||||
<div class="ttc" id="a00263_html_gab630f76c26b50298187f7889104d4b9c"><div class="ttname"><a href="a00263.html#gab630f76c26b50298187f7889104d4b9c">glm::uint64</a></div><div class="ttdeci">detail::uint64 uint64</div><div class="ttdoc">64 bit unsigned integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00151_source.html#l00067">scalar_uint_sized.hpp:67</a></div></div>
|
||||
<div class="ttc" id="a00288_html_ga3e96dd1f0a4bc892f063251ed118c0c1"><div class="ttname"><a href="a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1">glm::bitfieldFillOne</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > bitfieldFillOne(vec< L, T, Q > const &Value, int FirstBit, int BitCount)</div><div class="ttdoc">Set to 1 a range of bits. </div></div>
|
||||
<div class="ttc" id="a00174_html"><div class="ttname"><a href="a00174.html">type_precision.hpp</a></div><div class="ttdoc">GLM_GTC_type_precision </div></div>
|
||||
<div class="ttc" id="a00260_html_gaff5189f97f9e842d9636a0f240001b2e"><div class="ttname"><a href="a00260.html#gaff5189f97f9e842d9636a0f240001b2e">glm::int64</a></div><div class="ttdeci">detail::int64 int64</div><div class="ttdoc">64 bit signed integer type. </div><div class="ttdef"><b>Definition:</b> <a href="a00146_source.html#l00067">scalar_int_sized.hpp:67</a></div></div>
|
||||
<div class="ttc" id="a00304_html_ga2a266e46ee218d0c680f12b35c500cc0"><div class="ttname"><a href="a00304.html#ga2a266e46ee218d0c680f12b35c500cc0">glm::u32vec2</a></div><div class="ttdeci">vec< 2, u32, defaultp > u32vec2</div><div class="ttdoc">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00380">fwd.hpp:380</a></div></div>
|
||||
<div class="ttc" id="a00288_html_ga590488e1fc00a6cfe5d3bcaf93fbfe88"><div class="ttname"><a href="a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88">glm::bitfieldRotateRight</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > bitfieldRotateRight(vec< L, T, Q > const &In, int Shift)</div><div class="ttdoc">Rotate all bits to the right. </div></div>
|
||||
<div class="ttc" id="a00304_html_ga2a78447eb9d66a114b193f4a25899c16"><div class="ttname"><a href="a00304.html#ga2a78447eb9d66a114b193f4a25899c16">glm::u16vec2</a></div><div class="ttdeci">vec< 2, u16, defaultp > u16vec2</div><div class="ttdoc">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class="ttdef"><b>Definition:</b> <a href="a00035_source.html#l00360">fwd.hpp:360</a></div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,124 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00310.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:ga36529c278ef716986151d58d151d697d"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga36529c278ef716986151d58d151d697d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga36529c278ef716986151d58d151d697d">closestPointOnLine</a> (vec< 3, T, Q > const &point, vec< 3, T, Q > const &a, vec< 3, T, Q > const &b)</td></tr>
|
||||
<tr class="memdesc:ga36529c278ef716986151d58d151d697d"><td class="mdescLeft"> </td><td class="mdescRight">Find the point on a straight line which is the closet of a point. <a href="a00310.html#ga36529c278ef716986151d58d151d697d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga36529c278ef716986151d58d151d697d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a> (vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)</td></tr>
|
||||
<tr class="memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><td class="mdescLeft"> </td><td class="mdescRight">2d lines work as well <br /></td></tr>
|
||||
<tr class="separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><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="a00310.html">GLM_GTX_closest_point</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,133 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</a></li> </ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">closest_point.hpp</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<a href="a00010.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div>
|
||||
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// Dependency:</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "../glm.hpp"</span></div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_closest_point is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_closest_point extension included")</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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="a00236.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, qualifier Q></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& point,</div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  vec<3, T, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  vec<3, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<2, T, Q> <a class="code" href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">closestPointOnLine</a>(</div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  vec<2, T, Q> <span class="keyword">const</span>& point,</div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  vec<2, T, Q> <span class="keyword">const</span>& a,</div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  vec<2, T, Q> <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="a00310_html_ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0"><div class="ttname"><a href="a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0">glm::closestPointOnLine</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 2, T, Q > closestPointOnLine(vec< 2, T, Q > const &point, vec< 2, T, Q > const &a, vec< 2, T, Q > const &b)</div><div class="ttdoc">2d lines work as well </div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,137 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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_encoding.hpp File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a class="el" href="a00311.html">GLM_GTX_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:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad12f4f65022b2c80e33fcba2ced0dc48"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a> (vec< 3, T, Q > const &ColorD65XYZ)</td></tr>
|
||||
<tr class="memdesc:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="mdescLeft"> </td><td class="mdescRight">Convert a D65 YUV color to D50 YUV. <br /></td></tr>
|
||||
<tr class="separator:gad12f4f65022b2c80e33fcba2ced0dc48"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga5265386fc3ac29e4c580d37ed470859c"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga5265386fc3ac29e4c580d37ed470859c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a> (vec< 3, T, Q > const &ColorD65XYZ)</td></tr>
|
||||
<tr class="memdesc:ga5265386fc3ac29e4c580d37ed470859c"><td class="mdescLeft"> </td><td class="mdescRight">Convert a D65 YUV color to linear sRGB. <br /></td></tr>
|
||||
<tr class="separator:ga5265386fc3ac29e4c580d37ed470859c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga1522ba180e3d83d554a734056da031f9"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga1522ba180e3d83d554a734056da031f9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a> (vec< 3, T, Q > const &ColorLinearSRGB)</td></tr>
|
||||
<tr class="memdesc:ga1522ba180e3d83d554a734056da031f9"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear sRGB color to D50 YUV. <br /></td></tr>
|
||||
<tr class="separator:ga1522ba180e3d83d554a734056da031f9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf9e130d9d4ccf51cc99317de7449f369"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf9e130d9d4ccf51cc99317de7449f369"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a> (vec< 3, T, Q > const &ColorLinearSRGB)</td></tr>
|
||||
<tr class="memdesc:gaf9e130d9d4ccf51cc99317de7449f369"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear sRGB color to D65 YUV. <br /></td></tr>
|
||||
<tr class="separator:gaf9e130d9d4ccf51cc99317de7449f369"><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="a00311.html">GLM_GTX_color_encoding</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
||||
<dd>
|
||||
<a class="el" href="a00311.html" title="Include <glm/gtx/color_encoding.hpp> to use the features of this extension. ">GLM_GTX_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>
|
||||
@@ -1,139 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.html">gtx</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/qualifier.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_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTC_color_encoding is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor"># pragma message("GLM: GLM_GTC_color_encoding 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> <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="a00236.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="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">convertLinearSRGBToD65XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorLinearSRGB);</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, qualifier Q></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#ga1522ba180e3d83d554a734056da031f9">convertLinearSRGBToD50XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorLinearSRGB);</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, qualifier Q></div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">convertD65XYZToLinearSRGB</a>(vec<3, T, Q> <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="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">convertD65XYZToD50XYZ</a>(vec<3, T, Q> <span class="keyword">const</span>& ColorD65XYZ);</div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> } <span class="comment">//namespace glm</span></div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#include "color_encoding.inl"</span></div>
|
||||
<div class="ttc" id="a00311_html_ga5265386fc3ac29e4c580d37ed470859c"><div class="ttname"><a href="a00311.html#ga5265386fc3ac29e4c580d37ed470859c">glm::convertD65XYZToLinearSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToLinearSRGB(vec< 3, T, Q > const &ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to linear sRGB. </div></div>
|
||||
<div class="ttc" id="a00311_html_ga1522ba180e3d83d554a734056da031f9"><div class="ttname"><a href="a00311.html#ga1522ba180e3d83d554a734056da031f9">glm::convertLinearSRGBToD50XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD50XYZ(vec< 3, T, Q > const &ColorLinearSRGB)</div><div class="ttdoc">Convert a linear sRGB color to D50 YUV. </div></div>
|
||||
<div class="ttc" id="a00311_html_gaf9e130d9d4ccf51cc99317de7449f369"><div class="ttname"><a href="a00311.html#gaf9e130d9d4ccf51cc99317de7449f369">glm::convertLinearSRGBToD65XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > convertLinearSRGBToD65XYZ(vec< 3, T, Q > const &ColorLinearSRGB)</div><div class="ttdoc">Convert a linear sRGB color to D65 YUV. </div></div>
|
||||
<div class="ttc" id="a00311_html_gad12f4f65022b2c80e33fcba2ced0dc48"><div class="ttname"><a href="a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48">glm::convertD65XYZToD50XYZ</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > convertD65XYZToD50XYZ(vec< 3, T, Q > const &ColorD65XYZ)</div><div class="ttdoc">Convert a D65 YUV color to D50 YUV. </div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,134 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.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="a00289.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:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga42239e7b3da900f7ef37cec7e2476579"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">convertLinearToSRGB</a> (vec< L, T, Q > const &ColorLinear)</td></tr>
|
||||
<tr class="memdesc:ga42239e7b3da900f7ef37cec7e2476579"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a standard gamma correction. <a href="a00289.html#ga42239e7b3da900f7ef37cec7e2476579">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga42239e7b3da900f7ef37cec7e2476579"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaace0a21167d13d26116c283009af57f6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a> (vec< L, T, Q > const &ColorLinear, T Gamma)</td></tr>
|
||||
<tr class="memdesc:gaace0a21167d13d26116c283009af57f6"><td class="mdescLeft"> </td><td class="mdescRight">Convert a linear color to sRGB color using a custom gamma correction. <a href="a00289.html#gaace0a21167d13d26116c283009af57f6">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaace0a21167d13d26116c283009af57f6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga16c798b7a226b2c3079dedc55083d187"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">convertSRGBToLinear</a> (vec< L, T, Q > const &ColorSRGB)</td></tr>
|
||||
<tr class="memdesc:ga16c798b7a226b2c3079dedc55083d187"><td class="mdescLeft"> </td><td class="mdescRight">Convert a sRGB color to linear color using a standard gamma correction. <a href="a00289.html#ga16c798b7a226b2c3079dedc55083d187">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga16c798b7a226b2c3079dedc55083d187"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplParams" colspan="2"><a class="anchor" id="gad1b91f27a9726c9cb403f9fee6e2e200"></a>
|
||||
template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gad1b91f27a9726c9cb403f9fee6e2e200"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a> (vec< L, T, Q > const &ColorSRGB, T Gamma)</td></tr>
|
||||
<tr class="memdesc:gad1b91f27a9726c9cb403f9fee6e2e200"><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:gad1b91f27a9726c9cb403f9fee6e2e200"><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="a00289.html">GLM_GTC_color_space</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</a> (dependence) </dd>
|
||||
<dd>
|
||||
<a class="el" href="a00289.html" title="Include <glm/gtc/color_space.hpp> to use the features of this extension. ">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>
|
||||
@@ -1,136 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_4c6bd29c73fa4e5a2509e1c15f846751.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/qualifier.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_ENABLE && !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="a00236.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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec<L, T, Q> <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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gaace0a21167d13d26116c283009af57f6">convertLinearToSRGB</a>(vec<L, T, Q> <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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec<L, T, Q> <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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">convertSRGBToLinear</a>(vec<L, T, Q> <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="a00289_html_gaace0a21167d13d26116c283009af57f6"><div class="ttname"><a href="a00289.html#gaace0a21167d13d26116c283009af57f6">glm::convertLinearToSRGB</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > convertLinearToSRGB(vec< L, T, Q > 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="a00289_html_gad1b91f27a9726c9cb403f9fee6e2e200"><div class="ttname"><a href="a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200">glm::convertSRGBToLinear</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > convertSRGBToLinear(vec< L, T, Q > 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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,139 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00312.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:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a> (vec< 3, T, Q > const &rgbValue)</td></tr>
|
||||
<tr class="memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from RGB color space to its color in HSV color space. <a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga789802bec2d4fe0f9741c731b4a8a7d8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gad028e0a4f1a9c812b39439b746295b34"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL T </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a> (vec< 3, T, Q > const &color)</td></tr>
|
||||
<tr class="memdesc:gad028e0a4f1a9c812b39439b746295b34"><td class="mdescLeft"> </td><td class="mdescRight">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. <a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">More...</a><br /></td></tr>
|
||||
<tr class="separator:gad028e0a4f1a9c812b39439b746295b34"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga5f9193be46f45f0655c05a0cdca006db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a> (vec< 3, T, Q > const &hsvValue)</td></tr>
|
||||
<tr class="memdesc:ga5f9193be46f45f0655c05a0cdca006db"><td class="mdescLeft"> </td><td class="mdescRight">Converts a color from HSV color space to its color in RGB color space. <a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga5f9193be46f45f0655c05a0cdca006db"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||
<tr class="memitem:ga01a97152b44e1550edcac60bd849e884"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga01a97152b44e1550edcac60bd849e884">saturation</a> (T const s)</td></tr>
|
||||
<tr class="memdesc:ga01a97152b44e1550edcac60bd849e884"><td class="mdescLeft"> </td><td class="mdescRight">Build a saturation matrix. <a href="a00312.html#ga01a97152b44e1550edcac60bd849e884">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga01a97152b44e1550edcac60bd849e884"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2156cea600e90148ece5bc96fd6db43a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">saturation</a> (T const s, vec< 3, T, Q > const &color)</td></tr>
|
||||
<tr class="memdesc:ga2156cea600e90148ece5bc96fd6db43a"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#ga2156cea600e90148ece5bc96fd6db43a">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2156cea600e90148ece5bc96fd6db43a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaba0eacee0736dae860e9371cc1ae4785"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">saturation</a> (T const s, vec< 4, T, Q > const &color)</td></tr>
|
||||
<tr class="memdesc:gaba0eacee0736dae860e9371cc1ae4785"><td class="mdescLeft"> </td><td class="mdescRight">Modify the saturation of a color. <a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaba0eacee0736dae860e9371cc1ae4785"><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="a00312.html">GLM_GTX_color_space</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,150 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_color_space is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_color_space extension included")</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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="a00236.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, qualifier Q></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">rgbColor</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">hsvColor</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<3, T, Q> <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 mat<4, 4, T, defaultp> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">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, qualifier Q></div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">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>  vec<3, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  GLM_FUNC_DECL vec<4, T, Q> <a class="code" href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">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>  vec<4, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  GLM_FUNC_DECL T <a class="code" href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">luminosity</a>(</div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  vec<3, T, Q> <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="a00312_html_gad028e0a4f1a9c812b39439b746295b34"><div class="ttname"><a href="a00312.html#gad028e0a4f1a9c812b39439b746295b34">glm::luminosity</a></div><div class="ttdeci">GLM_FUNC_DECL T luminosity(vec< 3, T, Q > const &color)</div><div class="ttdoc">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>
|
||||
<div class="ttc" id="a00312_html_gaba0eacee0736dae860e9371cc1ae4785"><div class="ttname"><a href="a00312.html#gaba0eacee0736dae860e9371cc1ae4785">glm::saturation</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 4, T, Q > saturation(T const s, vec< 4, T, Q > const &color)</div><div class="ttdoc">Modify the saturation of a color. </div></div>
|
||||
<div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > 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="a00312_html_ga789802bec2d4fe0f9741c731b4a8a7d8"><div class="ttname"><a href="a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8">glm::hsvColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > hsvColor(vec< 3, T, Q > 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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,131 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00313.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:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a> (vec< 3, T, Q > const &rgbColor)</td></tr>
|
||||
<tr class="memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCg color space. <a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga0606353ec2a9b9eaa84f1b02ec391bc5"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a> (vec< 3, T, Q > const &rgbColor)</td></tr>
|
||||
<tr class="memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from RGB color space to YCoCgR color space. <a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga0389772e44ca0fd2ba4a79bdd8efe898"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga163596b804c7241810b2534a99eb1343"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a> (vec< 3, T, Q > const &YCoCgColor)</td></tr>
|
||||
<tr class="memdesc:ga163596b804c7241810b2534a99eb1343"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCg color space to RGB color space. <a href="a00313.html#ga163596b804c7241810b2534a99eb1343">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga163596b804c7241810b2534a99eb1343"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplParams" colspan="2">template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf8d30574c8576838097d8e20c295384a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a> (vec< 3, T, Q > const &YCoCgColor)</td></tr>
|
||||
<tr class="memdesc:gaf8d30574c8576838097d8e20c295384a"><td class="mdescLeft"> </td><td class="mdescRight">Convert a color from YCoCgR color space to RGB color space. <a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaf8d30574c8576838097d8e20c295384a"><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="a00313.html">GLM_GTX_color_space_YCoCg</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,141 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_color_space_YCoCg extension included")</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># endif</span></div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <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="a00236.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, qualifier Q></div>
|
||||
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">rgb2YCoCg</a>(</div>
|
||||
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  vec<3, T, Q> <span class="keyword">const</span>& <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">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, qualifier Q></div>
|
||||
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#ga163596b804c7241810b2534a99eb1343">YCoCg2rgb</a>(</div>
|
||||
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  vec<3, T, Q> <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, qualifier Q></div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">rgb2YCoCgR</a>(</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  vec<3, T, Q> <span class="keyword">const</span>& <a class="code" href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">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, qualifier Q></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<3, T, Q> <a class="code" href="a00313.html#gaf8d30574c8576838097d8e20c295384a">YCoCgR2rgb</a>(</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  vec<3, T, Q> <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="a00313_html_gaf8d30574c8576838097d8e20c295384a"><div class="ttname"><a href="a00313.html#gaf8d30574c8576838097d8e20c295384a">glm::YCoCgR2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > YCoCgR2rgb(vec< 3, T, Q > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCgR color space to RGB color space. </div></div>
|
||||
<div class="ttc" id="a00313_html_ga163596b804c7241810b2534a99eb1343"><div class="ttname"><a href="a00313.html#ga163596b804c7241810b2534a99eb1343">glm::YCoCg2rgb</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > YCoCg2rgb(vec< 3, T, Q > const &YCoCgColor)</div><div class="ttdoc">Convert a color from YCoCg color space to RGB color space. </div></div>
|
||||
<div class="ttc" id="a00312_html_ga5f9193be46f45f0655c05a0cdca006db"><div class="ttname"><a href="a00312.html#ga5f9193be46f45f0655c05a0cdca006db">glm::rgbColor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgbColor(vec< 3, T, Q > 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="a00313_html_ga0606353ec2a9b9eaa84f1b02ec391bc5"><div class="ttname"><a href="a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5">glm::rgb2YCoCg</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCg(vec< 3, T, Q > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCg color space. </div></div>
|
||||
<div class="ttc" id="a00313_html_ga0389772e44ca0fd2ba4a79bdd8efe898"><div class="ttname"><a href="a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898">glm::rgb2YCoCgR</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 3, T, Q > rgb2YCoCgR(vec< 3, T, Q > const &rgbColor)</div><div class="ttdoc">Convert a color from RGB color space to YCoCgR color space. </div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,267 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li> </ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="summary">
|
||||
<a href="#func-members">Functions</a> </div>
|
||||
<div class="headertitle">
|
||||
<div class="title">common.hpp File Reference</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
|
||||
<p><a class="el" href="a00280.html">Core features</a>
|
||||
<a href="#details">More...</a></p>
|
||||
|
||||
<p><a href="a00015_source.html">Go to the source code of this file.</a></p>
|
||||
<table class="memberdecls">
|
||||
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||
Functions</h2></td></tr>
|
||||
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">abs</a> (genType x)</td></tr>
|
||||
<tr class="memdesc:ga439e60a72eadecfeda2df5449c613a64"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga439e60a72eadecfeda2df5449c613a64">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga439e60a72eadecfeda2df5449c613a64"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="mdescLeft"> </td><td class="mdescRight">Returns x if x >= 0; otherwise, it returns -x. <a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:gafb9d2a645a23aca12d4d6de0104b7657"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is greater than or equal to x. <a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">More...</a><br /></td></tr>
|
||||
<tr class="separator:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
|
||||
<tr class="memdesc:ga7cd77683da6361e297c56443fc70806d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga7cd77683da6361e297c56443fc70806d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafba2e0674deb5953878d89483cd6323d">clamp</a> (vec< L, T, Q > const &x, T minVal, T maxVal)</td></tr>
|
||||
<tr class="memdesc:gafba2e0674deb5953878d89483cd6323d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gafba2e0674deb5953878d89483cd6323d">More...</a><br /></td></tr>
|
||||
<tr class="separator:gafba2e0674deb5953878d89483cd6323d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)</td></tr>
|
||||
<tr class="memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="mdescLeft"> </td><td class="mdescRight">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. <a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
|
||||
<tr class="memdesc:ga1425c1c3160ec51214b03a0469a3013d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga1425c1c3160ec51214b03a0469a3013d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, int, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a> (vec< L, float, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed integer value representing the encoding of a floating-point value. <a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
|
||||
<tr class="memdesc:ga70e0271c34af52f3100c7960e18c3f2b"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga70e0271c34af52f3100c7960e18c3f2b">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, uint, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a> (vec< L, float, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="mdescLeft"> </td><td class="mdescRight">Returns a unsigned integer value representing the encoding of a floating-point value. <a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer that is less then or equal to x. <a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
|
||||
<tr class="memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="mdescLeft"> </td><td class="mdescRight">Computes and returns a * b + c. <a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">More...</a><br /></td></tr>
|
||||
<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
|
||||
<tr class="memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga2df623004f634b440d61e018d62c751b"><td class="mdescLeft"> </td><td class="mdescRight">Return x - floor(x). <a href="a00241.html#ga2df623004f634b440d61e018d62c751b">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2df623004f634b440d61e018d62c751b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:gaddf5ef73283c171730e0bcc11833fa81"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a> (genType x, int &exp)</td></tr>
|
||||
<tr class="memdesc:gaddf5ef73283c171730e0bcc11833fa81"><td class="mdescLeft"> </td><td class="mdescRight">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) <a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaddf5ef73283c171730e0bcc11833fa81"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
|
||||
<tr class="memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a> (vec< L, int, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. <a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga2885587c23a106301f20443896365b62"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga2885587c23a106301f20443896365b62">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga2885587c23a106301f20443896365b62"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga29ef934c00306490de837b4746b4e14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. <a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga29ef934c00306490de837b4746b4e14d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a> (genType const &x, int const &exp)</td></tr>
|
||||
<tr class="memdesc:gac3010e0a0c35a1b514540f2fb579c58c"><td class="mdescLeft"> </td><td class="mdescRight">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) <a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">More...</a><br /></td></tr>
|
||||
<tr class="separator:gac3010e0a0c35a1b514540f2fb579c58c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">max</a> (genType x, genType y)</td></tr>
|
||||
<tr class="memdesc:gae02d42887fc5570451f880e3c624b9ac"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gae02d42887fc5570451f880e3c624b9ac">More...</a><br /></td></tr>
|
||||
<tr class="separator:gae02d42887fc5570451f880e3c624b9ac"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">max</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
||||
<tr class="memdesc:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||
<tr class="memdesc:gac1fec0c3303b572a6d4697a637213870"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if x < y; otherwise, it returns x. <a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">More...</a><br /></td></tr>
|
||||
<tr class="separator:gac1fec0c3303b572a6d4697a637213870"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">min</a> (genType x, genType y)</td></tr>
|
||||
<tr class="memdesc:ga6cf8098827054a270ee36b18e30d471d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga6cf8098827054a270ee36b18e30d471d">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga6cf8098827054a270ee36b18e30d471d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">min</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
||||
<tr class="memdesc:gaa7d015eba1f9f48519251f4abe69b14d"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#gaa7d015eba1f9f48519251f4abe69b14d">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||
<tr class="memdesc:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="mdescLeft"> </td><td class="mdescRight">Returns y if y < x; otherwise, it returns x. <a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
|
||||
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>
|
||||
<tr class="memdesc:ga8e93f374aae27d1a88b921860351f8d4"><td class="mdescLeft"> </td><td class="mdescRight">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. <a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8e93f374aae27d1a88b921860351f8d4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||
<tr class="memdesc:ga9b197a452cd52db3c5c18bac72bd7798"><td class="mdescLeft"> </td><td class="mdescRight">Modulus. <a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
|
||||
<tr class="memdesc:ga85e33f139b8db1b39b590a5713b9e679"><td class="mdescLeft"> </td><td class="mdescRight">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). <a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">More...</a><br /></td></tr>
|
||||
<tr class="separator:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga76b81785045a057989a84d99aeeb1578"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x. <a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga76b81785045a057989a84d99aeeb1578"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga1e2e5cfff800056540e32f6c9b604b28"><td class="mdescLeft"> </td><td class="mdescRight">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. <a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
|
||||
<tr class="memdesc:ga562edf7eca082cc5b7a0aaf180436daf"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 < x < edge1. <a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
|
||||
<tr class="memdesc:ga015a1261ff23e12650211aa872863cce"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. <a href="a00241.html#ga015a1261ff23e12650211aa872863cce">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">step</a> (T edge, vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:ga8f9a911a48ef244b51654eaefc81c551"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#ga8f9a911a48ef244b51654eaefc81c551">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8f9a911a48ef244b51654eaefc81c551"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a> (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="mdescLeft"> </td><td class="mdescRight">Returns 0.0 if x < edge, otherwise it returns 1.0. <a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a> (vec< L, T, Q > const &x)</td></tr>
|
||||
<tr class="memdesc:gaf9375e3e06173271d49e6ffa3a334259"><td class="mdescLeft"> </td><td class="mdescRight">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. <a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">More...</a><br /></td></tr>
|
||||
<tr class="separator:gaf9375e3e06173271d49e6ffa3a334259"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
|
||||
<tr class="memdesc:gab2bae0d15dcdca6093f88f76b3975d97"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#gab2bae0d15dcdca6093f88f76b3975d97">More...</a><br /></td></tr>
|
||||
<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a> (vec< L, uint, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga97f46b5f7b42fe44482e13356eb394ae"><td class="mdescLeft"> </td><td class="mdescRight">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. <a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga97f46b5f7b42fe44482e13356eb394ae"><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="a00280.html">Core features</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
|
||||
|
||||
<p>Definition in file <a class="el" href="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>
|
||||
@@ -1,276 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.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="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div>
|
||||
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "detail/qualifier.hpp"</span></div>
|
||||
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "detail/_fixes.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="keyword">namespace </span><a class="code" href="a00236.html">glm</a></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div>
|
||||
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
|
||||
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(genType x);</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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a>(vec<L, T, Q> <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="l00053"></a><span class="lineno"> 53</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div>
|
||||
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(genType x);</div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div>
|
||||
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga2df623004f634b440d61e018d62c751b">fract</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div>
|
||||
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(genType x, genType y);</div>
|
||||
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div>
|
||||
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
||||
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div>
|
||||
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
||||
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div>
|
||||
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a>(genType x, genType& i);</div>
|
||||
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div>
|
||||
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(genType x, genType y);</div>
|
||||
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div>
|
||||
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
||||
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div>
|
||||
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
||||
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div>
|
||||
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(genType x, genType y);</div>
|
||||
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div>
|
||||
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T y);</div>
|
||||
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div>
|
||||
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gac1fec0c3303b572a6d4697a637213870">max</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y);</div>
|
||||
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div>
|
||||
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  GLM_FUNC_DECL GLM_CONSTEXPR genType <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(genType x, genType minVal, genType maxVal);</div>
|
||||
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div>
|
||||
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec<L, T, Q> <span class="keyword">const</span>& x, T minVal, T maxVal);</div>
|
||||
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div>
|
||||
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  GLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> <a class="code" href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& minVal, vec<L, T, Q> <span class="keyword">const</span>& maxVal);</div>
|
||||
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div>
|
||||
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genTypeT, <span class="keyword">typename</span> genTypeU></div>
|
||||
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  GLM_FUNC_DECL genTypeT <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>
|
||||
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div>
|
||||
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y, vec<L, U, Q> <span class="keyword">const</span>& a);</div>
|
||||
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div>
|
||||
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> U, qualifier Q></div>
|
||||
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(vec<L, T, Q> <span class="keyword">const</span>& x, vec<L, T, Q> <span class="keyword">const</span>& y, U a);</div>
|
||||
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div>
|
||||
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(genType edge, genType x);</div>
|
||||
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div>
|
||||
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(T edge, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div>
|
||||
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a>(vec<L, T, Q> <span class="keyword">const</span>& edge, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div>
|
||||
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(genType edge0, genType edge1, genType x);</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="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(T edge0, T edge1, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div>
|
||||
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a>(vec<L, T, Q> <span class="keyword">const</span>& edge0, vec<L, T, Q> <span class="keyword">const</span>& edge1, vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div>
|
||||
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00241.html#ga29ef934c00306490de837b4746b4e14d">isnan</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div>
|
||||
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00241.html#ga2885587c23a106301f20443896365b62">isinf</a>(vec<L, T, Q> <span class="keyword">const</span>& x);</div>
|
||||
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div>
|
||||
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  GLM_FUNC_DECL <span class="keywordtype">int</span> <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div>
|
||||
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
||||
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  GLM_FUNC_DECL vec<L, int, Q> <a class="code" href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a>(vec<L, float, Q> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div>
|
||||
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  GLM_FUNC_DECL uint <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(<span class="keywordtype">float</span> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div>
|
||||
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
||||
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  GLM_FUNC_DECL vec<L, uint, Q> <a class="code" href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a>(vec<L, float, Q> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div>
|
||||
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(<span class="keywordtype">int</span> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div>
|
||||
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
||||
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  GLM_FUNC_DECL vec<L, float, Q> <a class="code" href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a>(vec<L, int, Q> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div>
|
||||
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(uint <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div>
|
||||
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">template</span><length_t L, qualifier Q></div>
|
||||
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  GLM_FUNC_DECL vec<L, float, Q> <a class="code" href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a>(vec<L, uint, Q> <span class="keyword">const</span>& v);</div>
|
||||
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div>
|
||||
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a>(genType <span class="keyword">const</span>& a, genType <span class="keyword">const</span>& b, genType <span class="keyword">const</span>& c);</div>
|
||||
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span> </div>
|
||||
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(genType x, <span class="keywordtype">int</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
||||
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  </div>
|
||||
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">frexp</a>(vec<L, T, Q> <span class="keyword">const</span>& v, vec<L, int, Q>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
||||
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div>
|
||||
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genType></div>
|
||||
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  GLM_FUNC_DECL genType <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(genType <span class="keyword">const</span>& x, <span class="keywordtype">int</span> <span class="keyword">const</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
||||
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  </div>
|
||||
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keyword">template</span><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">ldexp</a>(vec<L, T, Q> <span class="keyword">const</span>& v, vec<L, int, Q> <span class="keyword">const</span>& <a class="code" href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">exp</a>);</div>
|
||||
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span> </div>
|
||||
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span> }<span class="comment">//namespace glm</span></div>
|
||||
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div>
|
||||
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor">#include "detail/func_common.inl"</span></div>
|
||||
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div>
|
||||
<div class="ttc" id="a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d"><div class="ttname"><a href="a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d">glm::floor</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > floor(vec< L, T, Q > 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="a00241_html_gad0f444d4b81cc53c3b6edf5aa25078c2"><div class="ttname"><a href="a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2">glm::fma</a></div><div class="ttdeci">GLM_FUNC_DECL genType fma(genType const &a, genType const &b, genType const &c)</div><div class="ttdoc">Computes and returns a * b + c. </div></div>
|
||||
<div class="ttc" id="a00241_html_gaf9375e3e06173271d49e6ffa3a334259"><div class="ttname"><a href="a00241.html#gaf9375e3e06173271d49e6ffa3a334259">glm::trunc</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > trunc(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga9b197a452cd52db3c5c18bac72bd7798"><div class="ttname"><a href="a00241.html#ga9b197a452cd52db3c5c18bac72bd7798">glm::mod</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > mod(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Modulus. </div></div>
|
||||
<div class="ttc" id="a00241_html_gaa0f2f12e9108b09e22a3f0b2008a0b5d"><div class="ttname"><a href="a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > clamp(vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &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="a00241_html_gafa03aca8c4713e1cc892aa92ca135a7e"><div class="ttname"><a href="a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e">glm::round</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > round(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga97f46b5f7b42fe44482e13356eb394ae"><div class="ttname"><a href="a00241.html#ga97f46b5f7b42fe44482e13356eb394ae">glm::uintBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, float, Q > uintBitsToFloat(vec< L, uint, Q > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga1e2e5cfff800056540e32f6c9b604b28"><div class="ttname"><a href="a00241.html#ga1e2e5cfff800056540e32f6c9b604b28">glm::sign</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > sign(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga2885587c23a106301f20443896365b62"><div class="ttname"><a href="a00241.html#ga2885587c23a106301f20443896365b62">glm::isinf</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > isinf(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga76b81785045a057989a84d99aeeb1578"><div class="ttname"><a href="a00241.html#ga76b81785045a057989a84d99aeeb1578">glm::roundEven</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > roundEven(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer to x. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga85e33f139b8db1b39b590a5713b9e679"><div class="ttname"><a href="a00241.html#ga85e33f139b8db1b39b590a5713b9e679">glm::modf</a></div><div class="ttdeci">GLM_FUNC_DECL genType modf(genType x, genType &i)</div><div class="ttdoc">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>
|
||||
<div class="ttc" id="a00241_html_gafb9d2a645a23aca12d4d6de0104b7657"><div class="ttname"><a href="a00241.html#gafb9d2a645a23aca12d4d6de0104b7657">glm::ceil</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > ceil(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga31f49ef9e7d1beb003160c5e009b0c48"><div class="ttname"><a href="a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48">glm::min</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > min(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Returns y if y < x; otherwise, it returns x. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><div class="ttname"><a href="a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">glm::intBitsToFloat</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, float, Q > intBitsToFloat(vec< L, int, Q > const &v)</div><div class="ttdoc">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga29ef934c00306490de837b4746b4e14d"><div class="ttname"><a href="a00241.html#ga29ef934c00306490de837b4746b4e14d">glm::isnan</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > isnan(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of...</div></div>
|
||||
<div class="ttc" id="a00242_html_ga071566cadc7505455e611f2a0353f4d4"><div class="ttname"><a href="a00242.html#ga071566cadc7505455e611f2a0353f4d4">glm::exp</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > exp(vec< L, T, Q > const &v)</div><div class="ttdoc">Returns the natural exponentiation of x, i.e., e^x. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga49418ba4c8a60fbbb5d57b705f3e26db"><div class="ttname"><a href="a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db">glm::floatBitsToUint</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, uint, Q > floatBitsToUint(vec< L, float, Q > const &v)</div><div class="ttdoc">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga562edf7eca082cc5b7a0aaf180436daf"><div class="ttname"><a href="a00241.html#ga562edf7eca082cc5b7a0aaf180436daf">glm::smoothstep</a></div><div class="ttdeci">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class="ttdoc">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga81d3abddd0ef0c8de579bc541ecadab6"><div class="ttname"><a href="a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6">glm::abs</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > abs(vec< L, T, Q > const &x)</div><div class="ttdoc">Returns x if x >= 0; otherwise, it returns -x. </div></div>
|
||||
<div class="ttc" id="a00241_html_gac1fec0c3303b572a6d4697a637213870"><div class="ttname"><a href="a00241.html#gac1fec0c3303b572a6d4697a637213870">glm::max</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > max(vec< L, T, Q > const &x, vec< L, T, Q > const &y)</div><div class="ttdoc">Returns y if x < y; otherwise, it returns x. </div></div>
|
||||
<div class="ttc" id="a00241_html_gaf4a5fc81619c7d3e8b22f53d4a098c7f"><div class="ttname"><a href="a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">glm::step</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > step(vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</div><div class="ttdoc">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga2df623004f634b440d61e018d62c751b"><div class="ttname"><a href="a00241.html#ga2df623004f634b440d61e018d62c751b">glm::fract</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > fract(vec< L, T, Q > const &x)</div><div class="ttdoc">Return x - floor(x). </div></div>
|
||||
<div class="ttc" id="a00241_html_gac3010e0a0c35a1b514540f2fb579c58c"><div class="ttname"><a href="a00241.html#gac3010e0a0c35a1b514540f2fb579c58c">glm::ldexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType ldexp(genType const &x, int const &exp)</div><div class="ttdoc">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>
|
||||
<div class="ttc" id="a00241_html_ga99f7d62f78ac5ea3b49bae715c9488ed"><div class="ttname"><a href="a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed">glm::floatBitsToInt</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, int, Q > floatBitsToInt(vec< L, float, Q > const &v)</div><div class="ttdoc">Returns a signed integer value representing the encoding of a floating-point value. </div></div>
|
||||
<div class="ttc" id="a00241_html_ga8e93f374aae27d1a88b921860351f8d4"><div class="ttname"><a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU 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="a00241_html_gaddf5ef73283c171730e0bcc11833fa81"><div class="ttname"><a href="a00241.html#gaddf5ef73283c171730e0bcc11833fa81">glm::frexp</a></div><div class="ttdeci">GLM_FUNC_DECL genType frexp(genType x, int &exp)</div><div class="ttdoc">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,131 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00314.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:gab7d89c14c48ad01f720fb5daf8813161"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gab7d89c14c48ad01f720fb5daf8813161"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">closeBounded</a> (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</td></tr>
|
||||
<tr class="memdesc:gab7d89c14c48ad01f720fb5daf8813161"><td class="mdescLeft"> </td><td class="mdescRight">Returns whether vector components values are within an interval. <a href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">More...</a><br /></td></tr>
|
||||
<tr class="separator:gab7d89c14c48ad01f720fb5daf8813161"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae5e80425df9833164ad469e83b475fb4"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gae5e80425df9833164ad469e83b475fb4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gae5e80425df9833164ad469e83b475fb4">fmod</a> (vec< L, T, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:gae5e80425df9833164ad469e83b475fb4"><td class="mdescLeft"> </td><td class="mdescRight">Similar to 'mod' but with a different rounding and integer support. <a href="a00314.html#gae5e80425df9833164ad469e83b475fb4">More...</a><br /></td></tr>
|
||||
<tr class="separator:gae5e80425df9833164ad469e83b475fb4"><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="a00314.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="a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga74aa7c7462245d83bd5a9edf9c6c2d91"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafd303042ba2ba695bf53b2315f53f93f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gafd303042ba2ba695bf53b2315f53f93f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">openBounded</a> (vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</td></tr>
|
||||
<tr class="memdesc:gafd303042ba2ba695bf53b2315f53f93f"><td class="mdescLeft"> </td><td class="mdescRight">Returns whether vector components values are within an interval. <a href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">More...</a><br /></td></tr>
|
||||
<tr class="separator:gafd303042ba2ba695bf53b2315f53f93f"><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="a00314.html">GLM_GTX_common</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,139 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_common is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_common 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> <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="a00236.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="a00314.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><length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00314.html#gae5e80425df9833164ad469e83b475fb4">fmod</a>(vec<L, T, Q> <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="l00060"></a><span class="lineno"> 60</span>  <span class="keyword">template</span> <length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">openBounded</a>(vec<L, T, Q> <span class="keyword">const</span>& Value, vec<L, T, Q> <span class="keyword">const</span>& Min, vec<L, T, Q> <span class="keyword">const</span>& Max);</div>
|
||||
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div>
|
||||
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">template</span> <length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  GLM_FUNC_DECL vec<L, bool, Q> <a class="code" href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">closeBounded</a>(vec<L, T, Q> <span class="keyword">const</span>& Value, vec<L, T, Q> <span class="keyword">const</span>& Min, vec<L, T, Q> <span class="keyword">const</span>& Max);</div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span> }<span class="comment">//namespace glm</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> <span class="preprocessor">#include "common.inl"</span></div>
|
||||
<div class="ttc" id="a00314_html_gae5e80425df9833164ad469e83b475fb4"><div class="ttname"><a href="a00314.html#gae5e80425df9833164ad469e83b475fb4">glm::fmod</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > fmod(vec< L, T, Q > const &v)</div><div class="ttdoc">Similar to 'mod' but with a different rounding and integer support. </div></div>
|
||||
<div class="ttc" id="a00314_html_gafd303042ba2ba695bf53b2315f53f93f"><div class="ttname"><a href="a00314.html#gafd303042ba2ba695bf53b2315f53f93f">glm::openBounded</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > openBounded(vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</div><div class="ttdoc">Returns whether vector components values are within an interval. </div></div>
|
||||
<div class="ttc" id="a00314_html_ga74aa7c7462245d83bd5a9edf9c6c2d91"><div class="ttname"><a href="a00314.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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
||||
<div class="ttc" id="a00314_html_gab7d89c14c48ad01f720fb5daf8813161"><div class="ttname"><a href="a00314.html#gab7d89c14c48ad01f720fb5daf8813161">glm::closeBounded</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, bool, Q > closeBounded(vec< L, T, Q > const &Value, vec< L, T, Q > const &Min, vec< L, T, Q > const &Max)</div><div class="ttdoc">Returns whether vector components values are within an interval. </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>
|
||||
@@ -1,443 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00315.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="a00315.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="a00315.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:gaa09ab65ec9c3c54305ff502e2b1fe6d9"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa09ab65ec9c3c54305ff502e2b1fe6d9"></a>
|
||||
typedef vec< 2, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9">bool2</a></td></tr>
|
||||
<tr class="memdesc:gaa09ab65ec9c3c54305ff502e2b1fe6d9"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gaa09ab65ec9c3c54305ff502e2b1fe6d9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gadb3703955e513632f98ba12fe051ba3e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gadb3703955e513632f98ba12fe051ba3e"></a>
|
||||
typedef mat< 2, 2, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gadb3703955e513632f98ba12fe051ba3e">bool2x2</a></td></tr>
|
||||
<tr class="memdesc:gadb3703955e513632f98ba12fe051ba3e"><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:gadb3703955e513632f98ba12fe051ba3e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga9ae6ee155d0f90cb1ae5b6c4546738a0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9ae6ee155d0f90cb1ae5b6c4546738a0"></a>
|
||||
typedef mat< 2, 3, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0">bool2x3</a></td></tr>
|
||||
<tr class="memdesc:ga9ae6ee155d0f90cb1ae5b6c4546738a0"><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:ga9ae6ee155d0f90cb1ae5b6c4546738a0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4d7fa65be8e8e4ad6d920b45c44e471f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4d7fa65be8e8e4ad6d920b45c44e471f"></a>
|
||||
typedef mat< 2, 4, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f">bool2x4</a></td></tr>
|
||||
<tr class="memdesc:ga4d7fa65be8e8e4ad6d920b45c44e471f"><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:ga4d7fa65be8e8e4ad6d920b45c44e471f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga99629f818737f342204071ef8296b2ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga99629f818737f342204071ef8296b2ed"></a>
|
||||
typedef vec< 3, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga99629f818737f342204071ef8296b2ed">bool3</a></td></tr>
|
||||
<tr class="memdesc:ga99629f818737f342204071ef8296b2ed"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga99629f818737f342204071ef8296b2ed"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac7d7311f7e0fa8b6163d96dab033a755"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac7d7311f7e0fa8b6163d96dab033a755"></a>
|
||||
typedef mat< 3, 2, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755">bool3x2</a></td></tr>
|
||||
<tr class="memdesc:gac7d7311f7e0fa8b6163d96dab033a755"><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:gac7d7311f7e0fa8b6163d96dab033a755"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga6c97b99aac3e302053ffb58aace9033c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6c97b99aac3e302053ffb58aace9033c"></a>
|
||||
typedef mat< 3, 3, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c">bool3x3</a></td></tr>
|
||||
<tr class="memdesc:ga6c97b99aac3e302053ffb58aace9033c"><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:ga6c97b99aac3e302053ffb58aace9033c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae7d6b679463d37d6c527d478fb470fdf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae7d6b679463d37d6c527d478fb470fdf"></a>
|
||||
typedef mat< 3, 4, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf">bool3x4</a></td></tr>
|
||||
<tr class="memdesc:gae7d6b679463d37d6c527d478fb470fdf"><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:gae7d6b679463d37d6c527d478fb470fdf"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga13c3200b82708f73faac6d7f09ec91a3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga13c3200b82708f73faac6d7f09ec91a3"></a>
|
||||
typedef vec< 4, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3">bool4</a></td></tr>
|
||||
<tr class="memdesc:ga13c3200b82708f73faac6d7f09ec91a3"><td class="mdescLeft"> </td><td class="mdescRight">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga13c3200b82708f73faac6d7f09ec91a3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga9ed830f52408b2f83c085063a3eaf1d0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9ed830f52408b2f83c085063a3eaf1d0"></a>
|
||||
typedef mat< 4, 2, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0">bool4x2</a></td></tr>
|
||||
<tr class="memdesc:ga9ed830f52408b2f83c085063a3eaf1d0"><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:ga9ed830f52408b2f83c085063a3eaf1d0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gad0f5dc7f22c2065b1b06d57f1c0658fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad0f5dc7f22c2065b1b06d57f1c0658fe"></a>
|
||||
typedef mat< 4, 3, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe">bool4x3</a></td></tr>
|
||||
<tr class="memdesc:gad0f5dc7f22c2065b1b06d57f1c0658fe"><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:gad0f5dc7f22c2065b1b06d57f1c0658fe"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga7d2a7d13986602ae2896bfaa394235d4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga7d2a7d13986602ae2896bfaa394235d4"></a>
|
||||
typedef mat< 4, 4, bool, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4">bool4x4</a></td></tr>
|
||||
<tr class="memdesc:ga7d2a7d13986602ae2896bfaa394235d4"><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:ga7d2a7d13986602ae2896bfaa394235d4"><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="a00315.html#ga20b861a9b6e2a300323671c57a02525b">double1</a></td></tr>
|
||||
<tr class="memdesc:ga20b861a9b6e2a300323671c57a02525b"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier 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="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a></td></tr>
|
||||
<tr class="memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier 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:ga31b729b04facccda73f07ed26958b3c2"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga31b729b04facccda73f07ed26958b3c2"></a>
|
||||
typedef vec< 2, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga31b729b04facccda73f07ed26958b3c2">double2</a></td></tr>
|
||||
<tr class="memdesc:ga31b729b04facccda73f07ed26958b3c2"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga31b729b04facccda73f07ed26958b3c2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae57d0201096834d25f2b91b319e7cdbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae57d0201096834d25f2b91b319e7cdbd"></a>
|
||||
typedef mat< 2, 2, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd">double2x2</a></td></tr>
|
||||
<tr class="memdesc:gae57d0201096834d25f2b91b319e7cdbd"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gae57d0201096834d25f2b91b319e7cdbd"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga3655bc324008553ca61f39952d0b2d08"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3655bc324008553ca61f39952d0b2d08"></a>
|
||||
typedef mat< 2, 3, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga3655bc324008553ca61f39952d0b2d08">double2x3</a></td></tr>
|
||||
<tr class="memdesc:ga3655bc324008553ca61f39952d0b2d08"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga3655bc324008553ca61f39952d0b2d08"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gacd33061fc64a7b2dcfd7322c49d9557a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gacd33061fc64a7b2dcfd7322c49d9557a"></a>
|
||||
typedef mat< 2, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a">double2x4</a></td></tr>
|
||||
<tr class="memdesc:gacd33061fc64a7b2dcfd7322c49d9557a"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gacd33061fc64a7b2dcfd7322c49d9557a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga3d8b9028a1053a44a98902cd1c389472"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga3d8b9028a1053a44a98902cd1c389472"></a>
|
||||
typedef vec< 3, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472">double3</a></td></tr>
|
||||
<tr class="memdesc:ga3d8b9028a1053a44a98902cd1c389472"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga3d8b9028a1053a44a98902cd1c389472"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga5ec08fc39c9d783dfcc488be240fe975"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga5ec08fc39c9d783dfcc488be240fe975"></a>
|
||||
typedef mat< 3, 2, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975">double3x2</a></td></tr>
|
||||
<tr class="memdesc:ga5ec08fc39c9d783dfcc488be240fe975"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga5ec08fc39c9d783dfcc488be240fe975"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4bad5bb20c6ddaecfe4006c93841d180"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4bad5bb20c6ddaecfe4006c93841d180"></a>
|
||||
typedef mat< 3, 3, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180">double3x3</a></td></tr>
|
||||
<tr class="memdesc:ga4bad5bb20c6ddaecfe4006c93841d180"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga4bad5bb20c6ddaecfe4006c93841d180"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2ef022e453d663d70aec414b2a80f756"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2ef022e453d663d70aec414b2a80f756"></a>
|
||||
typedef mat< 3, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga2ef022e453d663d70aec414b2a80f756">double3x4</a></td></tr>
|
||||
<tr class="memdesc:ga2ef022e453d663d70aec414b2a80f756"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga2ef022e453d663d70aec414b2a80f756"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf92f58af24f35617518aeb3d4f63fda6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf92f58af24f35617518aeb3d4f63fda6"></a>
|
||||
typedef vec< 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6">double4</a></td></tr>
|
||||
<tr class="memdesc:gaf92f58af24f35617518aeb3d4f63fda6"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gaf92f58af24f35617518aeb3d4f63fda6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gabca29ccceea53669618b751aae0ba83d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gabca29ccceea53669618b751aae0ba83d"></a>
|
||||
typedef mat< 4, 2, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gabca29ccceea53669618b751aae0ba83d">double4x2</a></td></tr>
|
||||
<tr class="memdesc:gabca29ccceea53669618b751aae0ba83d"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gabca29ccceea53669618b751aae0ba83d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafad66a02ccd360c86d6ab9ff9cfbc19c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafad66a02ccd360c86d6ab9ff9cfbc19c"></a>
|
||||
typedef mat< 4, 3, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c">double4x3</a></td></tr>
|
||||
<tr class="memdesc:gafad66a02ccd360c86d6ab9ff9cfbc19c"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gafad66a02ccd360c86d6ab9ff9cfbc19c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaab541bed2e788e4537852a2492860806"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaab541bed2e788e4537852a2492860806"></a>
|
||||
typedef mat< 4, 4, double, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaab541bed2e788e4537852a2492860806">double4x4</a></td></tr>
|
||||
<tr class="memdesc:gaab541bed2e788e4537852a2492860806"><td class="mdescLeft"> </td><td class="mdescRight">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gaab541bed2e788e4537852a2492860806"><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="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a></td></tr>
|
||||
<tr class="memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier 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="a00315.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a></td></tr>
|
||||
<tr class="memdesc:ga73720b8dc4620835b17f74d428f98c0c"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier 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:ga02d3c013982c183906c61d74aa3166ce"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga02d3c013982c183906c61d74aa3166ce"></a>
|
||||
typedef vec< 2, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga02d3c013982c183906c61d74aa3166ce">float2</a></td></tr>
|
||||
<tr class="memdesc:ga02d3c013982c183906c61d74aa3166ce"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga02d3c013982c183906c61d74aa3166ce"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga33d43ecbb60a85a1366ff83f8a0ec85f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga33d43ecbb60a85a1366ff83f8a0ec85f"></a>
|
||||
typedef mat< 2, 2, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f">float2x2</a></td></tr>
|
||||
<tr class="memdesc:ga33d43ecbb60a85a1366ff83f8a0ec85f"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga33d43ecbb60a85a1366ff83f8a0ec85f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga939b0cff15cee3030f75c1b2e36f89fe"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga939b0cff15cee3030f75c1b2e36f89fe"></a>
|
||||
typedef mat< 2, 3, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe">float2x3</a></td></tr>
|
||||
<tr class="memdesc:ga939b0cff15cee3030f75c1b2e36f89fe"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga939b0cff15cee3030f75c1b2e36f89fe"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gafec3cfd901ab334a92e0242b8f2269b4"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafec3cfd901ab334a92e0242b8f2269b4"></a>
|
||||
typedef mat< 2, 4, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4">float2x4</a></td></tr>
|
||||
<tr class="memdesc:gafec3cfd901ab334a92e0242b8f2269b4"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gafec3cfd901ab334a92e0242b8f2269b4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga821ff110fc8533a053cbfcc93e078cc0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga821ff110fc8533a053cbfcc93e078cc0"></a>
|
||||
typedef vec< 3, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0">float3</a></td></tr>
|
||||
<tr class="memdesc:ga821ff110fc8533a053cbfcc93e078cc0"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga821ff110fc8533a053cbfcc93e078cc0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa6c69f04ba95f3faedf95dae874de576"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa6c69f04ba95f3faedf95dae874de576"></a>
|
||||
typedef mat< 3, 2, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576">float3x2</a></td></tr>
|
||||
<tr class="memdesc:gaa6c69f04ba95f3faedf95dae874de576"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gaa6c69f04ba95f3faedf95dae874de576"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga6ceb5d38a58becdf420026e12a6562f3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga6ceb5d38a58becdf420026e12a6562f3"></a>
|
||||
typedef mat< 3, 3, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3">float3x3</a></td></tr>
|
||||
<tr class="memdesc:ga6ceb5d38a58becdf420026e12a6562f3"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga6ceb5d38a58becdf420026e12a6562f3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4d2679c321b793ca3784fe0315bb5332"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4d2679c321b793ca3784fe0315bb5332"></a>
|
||||
typedef mat< 3, 4, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332">float3x4</a></td></tr>
|
||||
<tr class="memdesc:ga4d2679c321b793ca3784fe0315bb5332"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga4d2679c321b793ca3784fe0315bb5332"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae2da7345087db3815a25d8837a727ef1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae2da7345087db3815a25d8837a727ef1"></a>
|
||||
typedef vec< 4, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gae2da7345087db3815a25d8837a727ef1">float4</a></td></tr>
|
||||
<tr class="memdesc:gae2da7345087db3815a25d8837a727ef1"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gae2da7345087db3815a25d8837a727ef1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga308b9af0c221145bcfe9bfc129d9098e"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga308b9af0c221145bcfe9bfc129d9098e"></a>
|
||||
typedef mat< 4, 2, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e">float4x2</a></td></tr>
|
||||
<tr class="memdesc:ga308b9af0c221145bcfe9bfc129d9098e"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga308b9af0c221145bcfe9bfc129d9098e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac0a51b4812038aa81d73ffcc37f741ac"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac0a51b4812038aa81d73ffcc37f741ac"></a>
|
||||
typedef mat< 4, 3, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac">float4x3</a></td></tr>
|
||||
<tr class="memdesc:gac0a51b4812038aa81d73ffcc37f741ac"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gac0a51b4812038aa81d73ffcc37f741ac"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gad3051649b3715d828a4ab92cdae7c3bf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad3051649b3715d828a4ab92cdae7c3bf"></a>
|
||||
typedef mat< 4, 4, float, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf">float4x4</a></td></tr>
|
||||
<tr class="memdesc:gad3051649b3715d828a4ab92cdae7c3bf"><td class="mdescLeft"> </td><td class="mdescRight">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gad3051649b3715d828a4ab92cdae7c3bf"><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="a00315.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="a00315.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:gafe3a8fd56354caafe24bfe1b1e3ad22a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gafe3a8fd56354caafe24bfe1b1e3ad22a"></a>
|
||||
typedef vec< 2, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a">int2</a></td></tr>
|
||||
<tr class="memdesc:gafe3a8fd56354caafe24bfe1b1e3ad22a"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gafe3a8fd56354caafe24bfe1b1e3ad22a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4e5ce477c15836b21e3c42daac68554d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4e5ce477c15836b21e3c42daac68554d"></a>
|
||||
typedef mat< 2, 2, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d">int2x2</a></td></tr>
|
||||
<tr class="memdesc:ga4e5ce477c15836b21e3c42daac68554d"><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:ga4e5ce477c15836b21e3c42daac68554d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga197ded5ad8354f6b6fb91189d7a269b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga197ded5ad8354f6b6fb91189d7a269b3"></a>
|
||||
typedef mat< 2, 3, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3">int2x3</a></td></tr>
|
||||
<tr class="memdesc:ga197ded5ad8354f6b6fb91189d7a269b3"><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:ga197ded5ad8354f6b6fb91189d7a269b3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga2749d59a7fddbac44f34ba78e57ef807"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga2749d59a7fddbac44f34ba78e57ef807"></a>
|
||||
typedef mat< 2, 4, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807">int2x4</a></td></tr>
|
||||
<tr class="memdesc:ga2749d59a7fddbac44f34ba78e57ef807"><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:ga2749d59a7fddbac44f34ba78e57ef807"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga909c38a425f215a50c847145d7da09f0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga909c38a425f215a50c847145d7da09f0"></a>
|
||||
typedef vec< 3, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga909c38a425f215a50c847145d7da09f0">int3</a></td></tr>
|
||||
<tr class="memdesc:ga909c38a425f215a50c847145d7da09f0"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:ga909c38a425f215a50c847145d7da09f0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaa4cbe16a92cf3664376c7a2fc5126aa8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaa4cbe16a92cf3664376c7a2fc5126aa8"></a>
|
||||
typedef mat< 3, 2, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8">int3x2</a></td></tr>
|
||||
<tr class="memdesc:gaa4cbe16a92cf3664376c7a2fc5126aa8"><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:gaa4cbe16a92cf3664376c7a2fc5126aa8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga15c9649286f0bf431bdf9b3509580048"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga15c9649286f0bf431bdf9b3509580048"></a>
|
||||
typedef mat< 3, 3, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga15c9649286f0bf431bdf9b3509580048">int3x3</a></td></tr>
|
||||
<tr class="memdesc:ga15c9649286f0bf431bdf9b3509580048"><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:ga15c9649286f0bf431bdf9b3509580048"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaacac46ddc7d15d0f9529d05c92946a0f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaacac46ddc7d15d0f9529d05c92946a0f"></a>
|
||||
typedef mat< 3, 4, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f">int3x4</a></td></tr>
|
||||
<tr class="memdesc:gaacac46ddc7d15d0f9529d05c92946a0f"><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:gaacac46ddc7d15d0f9529d05c92946a0f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaecdef18c819c205aeee9f94dc93de56a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaecdef18c819c205aeee9f94dc93de56a"></a>
|
||||
typedef vec< 4, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a">int4</a></td></tr>
|
||||
<tr class="memdesc:gaecdef18c819c205aeee9f94dc93de56a"><td class="mdescLeft"> </td><td class="mdescRight">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>
|
||||
<tr class="separator:gaecdef18c819c205aeee9f94dc93de56a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga97a39dd9bc7d572810d80b8467cbffa1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga97a39dd9bc7d572810d80b8467cbffa1"></a>
|
||||
typedef mat< 4, 2, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1">int4x2</a></td></tr>
|
||||
<tr class="memdesc:ga97a39dd9bc7d572810d80b8467cbffa1"><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:ga97a39dd9bc7d572810d80b8467cbffa1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gae4a2c53f14aeec9a17c2b81142b7e82d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gae4a2c53f14aeec9a17c2b81142b7e82d"></a>
|
||||
typedef mat< 4, 3, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d">int4x3</a></td></tr>
|
||||
<tr class="memdesc:gae4a2c53f14aeec9a17c2b81142b7e82d"><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:gae4a2c53f14aeec9a17c2b81142b7e82d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga04dee1552424198b8f58b377c2ee00d8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga04dee1552424198b8f58b377c2ee00d8"></a>
|
||||
typedef mat< 4, 4, int, highp > </td><td class="memItemRight" valign="bottom"><a class="el" href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8">int4x4</a></td></tr>
|
||||
<tr class="memdesc:ga04dee1552424198b8f58b377c2ee00d8"><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:ga04dee1552424198b8f58b377c2ee00d8"><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 , qualifier Q> </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="a00315.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:ga83bc41bd6f89113ee8006576b12bfc50"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga83bc41bd6f89113ee8006576b12bfc50"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga83bc41bd6f89113ee8006576b12bfc50"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga83bc41bd6f89113ee8006576b12bfc50">atan2</a> (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y)</td></tr>
|
||||
<tr class="memdesc:ga83bc41bd6f89113ee8006576b12bfc50"><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:ga83bc41bd6f89113ee8006576b12bfc50"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gac39314f5087e7e51e592897cabbc1927"><td class="memTemplParams" colspan="2"><a class="anchor" id="gac39314f5087e7e51e592897cabbc1927"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gac39314f5087e7e51e592897cabbc1927"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gac39314f5087e7e51e592897cabbc1927">atan2</a> (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y)</td></tr>
|
||||
<tr class="memdesc:gac39314f5087e7e51e592897cabbc1927"><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:gac39314f5087e7e51e592897cabbc1927"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaba86c28da7bf5bdac64fecf7d56e8ff3"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a> (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y)</td></tr>
|
||||
<tr class="memdesc:gaba86c28da7bf5bdac64fecf7d56e8ff3"><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:gaba86c28da7bf5bdac64fecf7d56e8ff3"><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="a00315.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:gac3b12b8ac3014418fe53c299478b6603"><td class="memTemplParams" colspan="2"><a class="anchor" id="gac3b12b8ac3014418fe53c299478b6603"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gac3b12b8ac3014418fe53c299478b6603"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 1, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gac3b12b8ac3014418fe53c299478b6603">isfinite</a> (const vec< 1, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:gac3b12b8ac3014418fe53c299478b6603"><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:gac3b12b8ac3014418fe53c299478b6603"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga8e76dc3e406ce6a4155c2b12a2e4b084"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 2, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084">isfinite</a> (const vec< 2, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:ga8e76dc3e406ce6a4155c2b12a2e4b084"><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:ga8e76dc3e406ce6a4155c2b12a2e4b084"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga929ef27f896d902c1771a2e5e150fc97"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga929ef27f896d902c1771a2e5e150fc97"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga929ef27f896d902c1771a2e5e150fc97"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 3, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga929ef27f896d902c1771a2e5e150fc97">isfinite</a> (const vec< 3, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:ga929ef27f896d902c1771a2e5e150fc97"><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:ga929ef27f896d902c1771a2e5e150fc97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga19925badbe10ce61df1d0de00be0b5ad"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga19925badbe10ce61df1d0de00be0b5ad"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga19925badbe10ce61df1d0de00be0b5ad"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< 4, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a> (const vec< 4, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:ga19925badbe10ce61df1d0de00be0b5ad"><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:ga19925badbe10ce61df1d0de00be0b5ad"><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="a00315.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:gaa551c0a0e16d2d4608e49f7696df897f"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaa551c0a0e16d2d4608e49f7696df897f"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaa551c0a0e16d2d4608e49f7696df897f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gaa551c0a0e16d2d4608e49f7696df897f">lerp</a> (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, T a)</td></tr>
|
||||
<tr class="memdesc:gaa551c0a0e16d2d4608e49f7696df897f"><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:gaa551c0a0e16d2d4608e49f7696df897f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga44a8b5fd776320f1713413dec959b32a"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga44a8b5fd776320f1713413dec959b32a"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga44a8b5fd776320f1713413dec959b32a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga44a8b5fd776320f1713413dec959b32a">lerp</a> (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, T a)</td></tr>
|
||||
<tr class="memdesc:ga44a8b5fd776320f1713413dec959b32a"><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:ga44a8b5fd776320f1713413dec959b32a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga89ac8e000199292ec7875519d27e214b"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga89ac8e000199292ec7875519d27e214b"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga89ac8e000199292ec7875519d27e214b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga89ac8e000199292ec7875519d27e214b">lerp</a> (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, T a)</td></tr>
|
||||
<tr class="memdesc:ga89ac8e000199292ec7875519d27e214b"><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:ga89ac8e000199292ec7875519d27e214b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gaf68de5baf72d16135368b8ef4f841604"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaf68de5baf72d16135368b8ef4f841604"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaf68de5baf72d16135368b8ef4f841604"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gaf68de5baf72d16135368b8ef4f841604">lerp</a> (const vec< 2, T, Q > &x, const vec< 2, T, Q > &y, const vec< 2, T, Q > &a)</td></tr>
|
||||
<tr class="memdesc:gaf68de5baf72d16135368b8ef4f841604"><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:gaf68de5baf72d16135368b8ef4f841604"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga4ae1a616c8540a2649eab8e0cd051bb3"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga4ae1a616c8540a2649eab8e0cd051bb3"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga4ae1a616c8540a2649eab8e0cd051bb3"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3">lerp</a> (const vec< 3, T, Q > &x, const vec< 3, T, Q > &y, const vec< 3, T, Q > &a)</td></tr>
|
||||
<tr class="memdesc:ga4ae1a616c8540a2649eab8e0cd051bb3"><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:ga4ae1a616c8540a2649eab8e0cd051bb3"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:gab5477ab69c40de4db5d58d3359529724"><td class="memTemplParams" colspan="2"><a class="anchor" id="gab5477ab69c40de4db5d58d3359529724"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gab5477ab69c40de4db5d58d3359529724"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a> (const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &a)</td></tr>
|
||||
<tr class="memdesc:gab5477ab69c40de4db5d58d3359529724"><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:gab5477ab69c40de4db5d58d3359529724"><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 , qualifier Q> </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="a00315.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:gaee97b8001c794a78a44f5d59f62a8aba"><td class="memTemplParams" colspan="2"><a class="anchor" id="gaee97b8001c794a78a44f5d59f62a8aba"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:gaee97b8001c794a78a44f5d59f62a8aba"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 2, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#gaee97b8001c794a78a44f5d59f62a8aba">saturate</a> (const vec< 2, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:gaee97b8001c794a78a44f5d59f62a8aba"><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:gaee97b8001c794a78a44f5d59f62a8aba"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga39bfe3a421286ee31680d45c31ccc161"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga39bfe3a421286ee31680d45c31ccc161"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga39bfe3a421286ee31680d45c31ccc161"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 3, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga39bfe3a421286ee31680d45c31ccc161">saturate</a> (const vec< 3, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:ga39bfe3a421286ee31680d45c31ccc161"><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:ga39bfe3a421286ee31680d45c31ccc161"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga356f8c3a7e7d6376d3d4b0a026407183"><td class="memTemplParams" colspan="2"><a class="anchor" id="ga356f8c3a7e7d6376d3d4b0a026407183"></a>
|
||||
template<typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga356f8c3a7e7d6376d3d4b0a026407183"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_QUALIFIER vec< 4, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a> (const vec< 4, T, Q > &x)</td></tr>
|
||||
<tr class="memdesc:ga356f8c3a7e7d6376d3d4b0a026407183"><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:ga356f8c3a7e7d6376d3d4b0a026407183"><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="a00315.html">GLM_GTX_compatibility</a> </p>
|
||||
<dl class="section see"><dt>See also</dt><dd><a class="el" href="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,282 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor"># ifndef GLM_ENABLE_EXPERIMENTAL</span></div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_compatibility is an experimental 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="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor"># else</span></div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_compatibility 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> <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="a00236.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="a00315.html#ga5494ba3a95ea6594c86fc75236886864"> 41</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(T x, T y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00315.html#gaa551c0a0e16d2d4608e49f7696df897f"> 42</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">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="a00315.html#ga44a8b5fd776320f1713413dec959b32a"> 44</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00315.html#ga89ac8e000199292ec7875519d27e214b"> 45</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y, T a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00315.html#gaf68de5baf72d16135368b8ef4f841604"> 46</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y, <span class="keyword">const</span> vec<2, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3"> 47</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y, <span class="keyword">const</span> vec<3, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a>(x, y, a);} </div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00315.html#gab5477ab69c40de4db5d58d3359529724"> 48</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gab5477ab69c40de4db5d58d3359529724">lerp</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y, <span class="keyword">const</span> vec<4, T, Q>& a){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">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="a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7"> 50</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(T x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="a00315.html#gaee97b8001c794a78a44f5d59f62a8aba"> 51</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<2, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00315.html#ga39bfe3a421286ee31680d45c31ccc161"> 52</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<3, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">clamp</a>(x, T(0), T(1));} </div>
|
||||
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183"> 53</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">saturate</a>(<span class="keyword">const</span> vec<4, T, Q>& x){<span class="keywordflow">return</span> <a class="code" href="a00241.html#ga7cd77683da6361e297c56443fc70806d">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="a00315.html#gac63011205bf6d0be82589dc56dd26708"> 55</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER T <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(T x, T y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00315.html#ga83bc41bd6f89113ee8006576b12bfc50"> 56</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<2, T, Q>& x, <span class="keyword">const</span> vec<2, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00315.html#gac39314f5087e7e51e592897cabbc1927"> 57</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<3, T, Q>& x, <span class="keyword">const</span> vec<3, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">atan</a>(x, y);} </div>
|
||||
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3"> 58</a></span>  <span class="keyword">template</span><<span class="keyword">typename</span> T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> <a class="code" href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">atan2</a>(<span class="keyword">const</span> vec<4, T, Q>& x, <span class="keyword">const</span> vec<4, T, Q>& y){<span class="keywordflow">return</span> <a class="code" href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">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="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">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, qualifier Q> GLM_FUNC_DECL vec<1, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<1, T, Q>& 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, qualifier Q> GLM_FUNC_DECL vec<2, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<2, T, Q>& 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, qualifier Q> GLM_FUNC_DECL vec<3, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<3, T, Q>& 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, qualifier Q> GLM_FUNC_DECL vec<4, bool, Q> <a class="code" href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">isfinite</a>(<span class="keyword">const</span> vec<4, T, Q>& 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="a00315.html#gaddcd7aa2e30e61af5b38660613d3979e"> 66</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00315.html#gaddcd7aa2e30e61af5b38660613d3979e">bool1</a>; </div>
|
||||
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9"> 67</a></span>  <span class="keyword">typedef</span> vec<2, bool, highp> <a class="code" href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9">bool2</a>; </div>
|
||||
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00315.html#ga99629f818737f342204071ef8296b2ed"> 68</a></span>  <span class="keyword">typedef</span> vec<3, bool, highp> <a class="code" href="a00315.html#ga99629f818737f342204071ef8296b2ed">bool3</a>; </div>
|
||||
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3"> 69</a></span>  <span class="keyword">typedef</span> vec<4, bool, highp> <a class="code" href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3">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="a00315.html#ga7f895c936f0c29c8729afbbf22806090"> 71</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">bool</span> <a class="code" href="a00315.html#ga7f895c936f0c29c8729afbbf22806090">bool1x1</a>; </div>
|
||||
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00315.html#gadb3703955e513632f98ba12fe051ba3e"> 72</a></span>  <span class="keyword">typedef</span> mat<2, 2, bool, highp> <a class="code" href="a00315.html#gadb3703955e513632f98ba12fe051ba3e">bool2x2</a>; </div>
|
||||
<div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0"> 73</a></span>  <span class="keyword">typedef</span> mat<2, 3, bool, highp> <a class="code" href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0">bool2x3</a>; </div>
|
||||
<div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f"> 74</a></span>  <span class="keyword">typedef</span> mat<2, 4, bool, highp> <a class="code" href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f">bool2x4</a>; </div>
|
||||
<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755"> 75</a></span>  <span class="keyword">typedef</span> mat<3, 2, bool, highp> <a class="code" href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755">bool3x2</a>; </div>
|
||||
<div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c"> 76</a></span>  <span class="keyword">typedef</span> mat<3, 3, bool, highp> <a class="code" href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c">bool3x3</a>; </div>
|
||||
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf"> 77</a></span>  <span class="keyword">typedef</span> mat<3, 4, bool, highp> <a class="code" href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf">bool3x4</a>; </div>
|
||||
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0"> 78</a></span>  <span class="keyword">typedef</span> mat<4, 2, bool, highp> <a class="code" href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0">bool4x2</a>; </div>
|
||||
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe"> 79</a></span>  <span class="keyword">typedef</span> mat<4, 3, bool, highp> <a class="code" href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe">bool4x3</a>; </div>
|
||||
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4"> 80</a></span>  <span class="keyword">typedef</span> mat<4, 4, bool, highp> <a class="code" href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4">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="a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3"> 82</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3">int1</a>; </div>
|
||||
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a"> 83</a></span>  <span class="keyword">typedef</span> vec<2, int, highp> <a class="code" href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a">int2</a>; </div>
|
||||
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00315.html#ga909c38a425f215a50c847145d7da09f0"> 84</a></span>  <span class="keyword">typedef</span> vec<3, int, highp> <a class="code" href="a00315.html#ga909c38a425f215a50c847145d7da09f0">int3</a>; </div>
|
||||
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a"> 85</a></span>  <span class="keyword">typedef</span> vec<4, int, highp> <a class="code" href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a">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="a00315.html#ga056ffe02d3a45af626f8e62221881c7a"> 87</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="a00315.html#ga056ffe02d3a45af626f8e62221881c7a">int1x1</a>; </div>
|
||||
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d"> 88</a></span>  <span class="keyword">typedef</span> mat<2, 2, int, highp> <a class="code" href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d">int2x2</a>; </div>
|
||||
<div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3"> 89</a></span>  <span class="keyword">typedef</span> mat<2, 3, int, highp> <a class="code" href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3">int2x3</a>; </div>
|
||||
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807"> 90</a></span>  <span class="keyword">typedef</span> mat<2, 4, int, highp> <a class="code" href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807">int2x4</a>; </div>
|
||||
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8"> 91</a></span>  <span class="keyword">typedef</span> mat<3, 2, int, highp> <a class="code" href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8">int3x2</a>; </div>
|
||||
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00315.html#ga15c9649286f0bf431bdf9b3509580048"> 92</a></span>  <span class="keyword">typedef</span> mat<3, 3, int, highp> <a class="code" href="a00315.html#ga15c9649286f0bf431bdf9b3509580048">int3x3</a>; </div>
|
||||
<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f"> 93</a></span>  <span class="keyword">typedef</span> mat<3, 4, int, highp> <a class="code" href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f">int3x4</a>; </div>
|
||||
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1"> 94</a></span>  <span class="keyword">typedef</span> mat<4, 2, int, highp> <a class="code" href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1">int4x2</a>; </div>
|
||||
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d"> 95</a></span>  <span class="keyword">typedef</span> mat<4, 3, int, highp> <a class="code" href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d">int4x3</a>; </div>
|
||||
<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8"> 96</a></span>  <span class="keyword">typedef</span> mat<4, 4, int, highp> <a class="code" href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8">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="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead"> 98</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">float1</a>; </div>
|
||||
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00315.html#ga02d3c013982c183906c61d74aa3166ce"> 99</a></span>  <span class="keyword">typedef</span> vec<2, float, highp> <a class="code" href="a00315.html#ga02d3c013982c183906c61d74aa3166ce">float2</a>; </div>
|
||||
<div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0"> 100</a></span>  <span class="keyword">typedef</span> vec<3, float, highp> <a class="code" href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0">float3</a>; </div>
|
||||
<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00315.html#gae2da7345087db3815a25d8837a727ef1"> 101</a></span>  <span class="keyword">typedef</span> vec<4, float, highp> <a class="code" href="a00315.html#gae2da7345087db3815a25d8837a727ef1">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="a00315.html#ga73720b8dc4620835b17f74d428f98c0c"> 103</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">float</span> <a class="code" href="a00315.html#ga73720b8dc4620835b17f74d428f98c0c">float1x1</a>; </div>
|
||||
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f"> 104</a></span>  <span class="keyword">typedef</span> mat<2, 2, float, highp> <a class="code" href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f">float2x2</a>; </div>
|
||||
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe"> 105</a></span>  <span class="keyword">typedef</span> mat<2, 3, float, highp> <a class="code" href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe">float2x3</a>; </div>
|
||||
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4"> 106</a></span>  <span class="keyword">typedef</span> mat<2, 4, float, highp> <a class="code" href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4">float2x4</a>; </div>
|
||||
<div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576"> 107</a></span>  <span class="keyword">typedef</span> mat<3, 2, float, highp> <a class="code" href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576">float3x2</a>; </div>
|
||||
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3"> 108</a></span>  <span class="keyword">typedef</span> mat<3, 3, float, highp> <a class="code" href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3">float3x3</a>; </div>
|
||||
<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332"> 109</a></span>  <span class="keyword">typedef</span> mat<3, 4, float, highp> <a class="code" href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332">float3x4</a>; </div>
|
||||
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e"> 110</a></span>  <span class="keyword">typedef</span> mat<4, 2, float, highp> <a class="code" href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e">float4x2</a>; </div>
|
||||
<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac"> 111</a></span>  <span class="keyword">typedef</span> mat<4, 3, float, highp> <a class="code" href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac">float4x3</a>; </div>
|
||||
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf"> 112</a></span>  <span class="keyword">typedef</span> mat<4, 4, float, highp> <a class="code" href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf">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="a00315.html#ga20b861a9b6e2a300323671c57a02525b"> 114</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00315.html#ga20b861a9b6e2a300323671c57a02525b">double1</a>; </div>
|
||||
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00315.html#ga31b729b04facccda73f07ed26958b3c2"> 115</a></span>  <span class="keyword">typedef</span> vec<2, double, highp> <a class="code" href="a00315.html#ga31b729b04facccda73f07ed26958b3c2">double2</a>; </div>
|
||||
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472"> 116</a></span>  <span class="keyword">typedef</span> vec<3, double, highp> <a class="code" href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472">double3</a>; </div>
|
||||
<div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6"> 117</a></span>  <span class="keyword">typedef</span> vec<4, double, highp> <a class="code" href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6">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="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8"> 119</a></span>  <span class="keyword">typedef</span> <span class="keywordtype">double</span> <a class="code" href="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">double1x1</a>; </div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd"> 120</a></span>  <span class="keyword">typedef</span> mat<2, 2, double, highp> <a class="code" href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd">double2x2</a>; </div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00315.html#ga3655bc324008553ca61f39952d0b2d08"> 121</a></span>  <span class="keyword">typedef</span> mat<2, 3, double, highp> <a class="code" href="a00315.html#ga3655bc324008553ca61f39952d0b2d08">double2x3</a>; </div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a"> 122</a></span>  <span class="keyword">typedef</span> mat<2, 4, double, highp> <a class="code" href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a">double2x4</a>; </div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975"> 123</a></span>  <span class="keyword">typedef</span> mat<3, 2, double, highp> <a class="code" href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975">double3x2</a>; </div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180"> 124</a></span>  <span class="keyword">typedef</span> mat<3, 3, double, highp> <a class="code" href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180">double3x3</a>; </div>
|
||||
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00315.html#ga2ef022e453d663d70aec414b2a80f756"> 125</a></span>  <span class="keyword">typedef</span> mat<3, 4, double, highp> <a class="code" href="a00315.html#ga2ef022e453d663d70aec414b2a80f756">double3x4</a>; </div>
|
||||
<div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00315.html#gabca29ccceea53669618b751aae0ba83d"> 126</a></span>  <span class="keyword">typedef</span> mat<4, 2, double, highp> <a class="code" href="a00315.html#gabca29ccceea53669618b751aae0ba83d">double4x2</a>; </div>
|
||||
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c"> 127</a></span>  <span class="keyword">typedef</span> mat<4, 3, double, highp> <a class="code" href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c">double4x3</a>; </div>
|
||||
<div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00315.html#gaab541bed2e788e4537852a2492860806"> 128</a></span>  <span class="keyword">typedef</span> mat<4, 4, double, highp> <a class="code" href="a00315.html#gaab541bed2e788e4537852a2492860806">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="a00315_html_gaab541bed2e788e4537852a2492860806"><div class="ttname"><a href="a00315.html#gaab541bed2e788e4537852a2492860806">glm::double4x4</a></div><div class="ttdeci">mat< 4, 4, double, highp > double4x4</div><div class="ttdoc">double-qualifier 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="a00315_html_gaacac46ddc7d15d0f9529d05c92946a0f"><div class="ttname"><a href="a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f">glm::int3x4</a></div><div class="ttdeci">mat< 3, 4, 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="a00373_html_gac61629f3a4aa14057e7a8cae002291db"><div class="ttname"><a href="a00373.html#gac61629f3a4aa14057e7a8cae002291db">glm::atan</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > atan(vec< L, T, Q > const &y, vec< L, T, Q > const &x)</div><div class="ttdoc">Arc tangent. </div></div>
|
||||
<div class="ttc" id="a00315_html_gaddcd7aa2e30e61af5b38660613d3979e"><div class="ttname"><a href="a00315.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="a00315_html_gac0a51b4812038aa81d73ffcc37f741ac"><div class="ttname"><a href="a00315.html#gac0a51b4812038aa81d73ffcc37f741ac">glm::float4x3</a></div><div class="ttdeci">mat< 4, 3, float, highp > float4x3</div><div class="ttdoc">single-qualifier 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="a00315_html_gad3051649b3715d828a4ab92cdae7c3bf"><div class="ttname"><a href="a00315.html#gad3051649b3715d828a4ab92cdae7c3bf">glm::float4x4</a></div><div class="ttdeci">mat< 4, 4, float, highp > float4x4</div><div class="ttdoc">single-qualifier 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="a00315_html_gacd33061fc64a7b2dcfd7322c49d9557a"><div class="ttname"><a href="a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a">glm::double2x4</a></div><div class="ttdeci">mat< 2, 4, double, highp > double2x4</div><div class="ttdoc">double-qualifier 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="a00315_html_gae57d0201096834d25f2b91b319e7cdbd"><div class="ttname"><a href="a00315.html#gae57d0201096834d25f2b91b319e7cdbd">glm::double2x2</a></div><div class="ttdeci">mat< 2, 2, double, highp > double2x2</div><div class="ttdoc">double-qualifier 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="a00315_html_ga5ec08fc39c9d783dfcc488be240fe975"><div class="ttname"><a href="a00315.html#ga5ec08fc39c9d783dfcc488be240fe975">glm::double3x2</a></div><div class="ttdeci">mat< 3, 2, double, highp > double3x2</div><div class="ttdoc">double-qualifier 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="a00315_html_gaba86c28da7bf5bdac64fecf7d56e8ff3"><div class="ttname"><a href="a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3">glm::atan2</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > atan2(const vec< 4, T, Q > &x, const vec< 4, T, Q > &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="a00315_html_ga45f16a4dd0db1f199afaed9fd12fe9a8"><div class="ttname"><a href="a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8">glm::double1x1</a></div><div class="ttdeci">double double1x1</div><div class="ttdoc">double-qualifier 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="a00315_html_gab5477ab69c40de4db5d58d3359529724"><div class="ttname"><a href="a00315.html#gab5477ab69c40de4db5d58d3359529724">glm::lerp</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > lerp(const vec< 4, T, Q > &x, const vec< 4, T, Q > &y, const vec< 4, T, Q > &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="a00315_html_ga4bad5bb20c6ddaecfe4006c93841d180"><div class="ttname"><a href="a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180">glm::double3x3</a></div><div class="ttdeci">mat< 3, 3, double, highp > double3x3</div><div class="ttdoc">double-qualifier 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="a00315_html_gae2da7345087db3815a25d8837a727ef1"><div class="ttname"><a href="a00315.html#gae2da7345087db3815a25d8837a727ef1">glm::float4</a></div><div class="ttdeci">vec< 4, float, highp > float4</div><div class="ttdoc">single-qualifier 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="a00315_html_ga056ffe02d3a45af626f8e62221881c7a"><div class="ttname"><a href="a00315.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="a00315_html_ga02d3c013982c183906c61d74aa3166ce"><div class="ttname"><a href="a00315.html#ga02d3c013982c183906c61d74aa3166ce">glm::float2</a></div><div class="ttdeci">vec< 2, float, highp > float2</div><div class="ttdoc">single-qualifier 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="a00315_html_ga19925badbe10ce61df1d0de00be0b5ad"><div class="ttname"><a href="a00315.html#ga19925badbe10ce61df1d0de00be0b5ad">glm::isfinite</a></div><div class="ttdeci">GLM_FUNC_DECL vec< 4, bool, Q > isfinite(const vec< 4, T, Q > &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="a00315_html_ga9ae6ee155d0f90cb1ae5b6c4546738a0"><div class="ttname"><a href="a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0">glm::bool2x3</a></div><div class="ttdeci">mat< 2, 3, 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="a00315_html_ga197ded5ad8354f6b6fb91189d7a269b3"><div class="ttname"><a href="a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3">glm::int2x3</a></div><div class="ttdeci">mat< 2, 3, 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="a00315_html_ga0670a2111b5e4a6410bd027fa0232fc3"><div class="ttname"><a href="a00315.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="a00315_html_ga821ff110fc8533a053cbfcc93e078cc0"><div class="ttname"><a href="a00315.html#ga821ff110fc8533a053cbfcc93e078cc0">glm::float3</a></div><div class="ttdeci">vec< 3, float, highp > float3</div><div class="ttdoc">single-qualifier 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="a00315_html_gafec3cfd901ab334a92e0242b8f2269b4"><div class="ttname"><a href="a00315.html#gafec3cfd901ab334a92e0242b8f2269b4">glm::float2x4</a></div><div class="ttdeci">mat< 2, 4, float, highp > float2x4</div><div class="ttdoc">single-qualifier 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="a00315_html_gadb3703955e513632f98ba12fe051ba3e"><div class="ttname"><a href="a00315.html#gadb3703955e513632f98ba12fe051ba3e">glm::bool2x2</a></div><div class="ttdeci">mat< 2, 2, 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="a00315_html_ga7d2a7d13986602ae2896bfaa394235d4"><div class="ttname"><a href="a00315.html#ga7d2a7d13986602ae2896bfaa394235d4">glm::bool4x4</a></div><div class="ttdeci">mat< 4, 4, 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="a00315_html_gaf5208d01f6c6fbcb7bb55d610b9c0ead"><div class="ttname"><a href="a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead">glm::float1</a></div><div class="ttdeci">float float1</div><div class="ttdoc">single-qualifier 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="a00315_html_ga73720b8dc4620835b17f74d428f98c0c"><div class="ttname"><a href="a00315.html#ga73720b8dc4620835b17f74d428f98c0c">glm::float1x1</a></div><div class="ttdeci">float float1x1</div><div class="ttdoc">single-qualifier 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="a00315_html_gabca29ccceea53669618b751aae0ba83d"><div class="ttname"><a href="a00315.html#gabca29ccceea53669618b751aae0ba83d">glm::double4x2</a></div><div class="ttdeci">mat< 4, 2, double, highp > double4x2</div><div class="ttdoc">double-qualifier 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="a00315_html_gae4a2c53f14aeec9a17c2b81142b7e82d"><div class="ttname"><a href="a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d">glm::int4x3</a></div><div class="ttdeci">mat< 4, 3, 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="a00315_html_ga9ed830f52408b2f83c085063a3eaf1d0"><div class="ttname"><a href="a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0">glm::bool4x2</a></div><div class="ttdeci">mat< 4, 2, 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="a00315_html_ga33d43ecbb60a85a1366ff83f8a0ec85f"><div class="ttname"><a href="a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f">glm::float2x2</a></div><div class="ttdeci">mat< 2, 2, float, highp > float2x2</div><div class="ttdoc">single-qualifier 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="a00315_html_ga909c38a425f215a50c847145d7da09f0"><div class="ttname"><a href="a00315.html#ga909c38a425f215a50c847145d7da09f0">glm::int3</a></div><div class="ttdeci">vec< 3, 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="a00315_html_ga308b9af0c221145bcfe9bfc129d9098e"><div class="ttname"><a href="a00315.html#ga308b9af0c221145bcfe9bfc129d9098e">glm::float4x2</a></div><div class="ttdeci">mat< 4, 2, float, highp > float4x2</div><div class="ttdoc">single-qualifier 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="a00315_html_ga3655bc324008553ca61f39952d0b2d08"><div class="ttname"><a href="a00315.html#ga3655bc324008553ca61f39952d0b2d08">glm::double2x3</a></div><div class="ttdeci">mat< 2, 3, double, highp > double2x3</div><div class="ttdoc">double-qualifier 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="a00315_html_ga939b0cff15cee3030f75c1b2e36f89fe"><div class="ttname"><a href="a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe">glm::float2x3</a></div><div class="ttdeci">mat< 2, 3, float, highp > float2x3</div><div class="ttdoc">single-qualifier 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="a00315_html_gaa4cbe16a92cf3664376c7a2fc5126aa8"><div class="ttname"><a href="a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8">glm::int3x2</a></div><div class="ttdeci">mat< 3, 2, 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="a00315_html_ga13c3200b82708f73faac6d7f09ec91a3"><div class="ttname"><a href="a00315.html#ga13c3200b82708f73faac6d7f09ec91a3">glm::bool4</a></div><div class="ttdeci">vec< 4, 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="a00315_html_ga97a39dd9bc7d572810d80b8467cbffa1"><div class="ttname"><a href="a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1">glm::int4x2</a></div><div class="ttdeci">mat< 4, 2, 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="a00315_html_ga7f895c936f0c29c8729afbbf22806090"><div class="ttname"><a href="a00315.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 class="ttc" id="a00315_html_ga356f8c3a7e7d6376d3d4b0a026407183"><div class="ttname"><a href="a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183">glm::saturate</a></div><div class="ttdeci">GLM_FUNC_QUALIFIER vec< 4, T, Q > saturate(const vec< 4, T, Q > &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="a00315_html_ga99629f818737f342204071ef8296b2ed"><div class="ttname"><a href="a00315.html#ga99629f818737f342204071ef8296b2ed">glm::bool3</a></div><div class="ttdeci">vec< 3, 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="a00241_html_ga7cd77683da6361e297c56443fc70806d"><div class="ttname"><a href="a00241.html#ga7cd77683da6361e297c56443fc70806d">glm::clamp</a></div><div class="ttdeci">GLM_FUNC_DECL GLM_CONSTEXPR 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="a00315_html_ga4e5ce477c15836b21e3c42daac68554d"><div class="ttname"><a href="a00315.html#ga4e5ce477c15836b21e3c42daac68554d">glm::int2x2</a></div><div class="ttdeci">mat< 2, 2, 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="a00315_html_gafe3a8fd56354caafe24bfe1b1e3ad22a"><div class="ttname"><a href="a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a">glm::int2</a></div><div class="ttdeci">vec< 2, 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="a00315_html_ga04dee1552424198b8f58b377c2ee00d8"><div class="ttname"><a href="a00315.html#ga04dee1552424198b8f58b377c2ee00d8">glm::int4x4</a></div><div class="ttdeci">mat< 4, 4, 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="a00315_html_gac7d7311f7e0fa8b6163d96dab033a755"><div class="ttname"><a href="a00315.html#gac7d7311f7e0fa8b6163d96dab033a755">glm::bool3x2</a></div><div class="ttdeci">mat< 3, 2, 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="a00315_html_gafad66a02ccd360c86d6ab9ff9cfbc19c"><div class="ttname"><a href="a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c">glm::double4x3</a></div><div class="ttdeci">mat< 4, 3, double, highp > double4x3</div><div class="ttdoc">double-qualifier 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="a00315_html_gad0f5dc7f22c2065b1b06d57f1c0658fe"><div class="ttname"><a href="a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe">glm::bool4x3</a></div><div class="ttdeci">mat< 4, 3, 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="a00315_html_ga20b861a9b6e2a300323671c57a02525b"><div class="ttname"><a href="a00315.html#ga20b861a9b6e2a300323671c57a02525b">glm::double1</a></div><div class="ttdeci">double double1</div><div class="ttdoc">double-qualifier 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="a00315_html_ga3d8b9028a1053a44a98902cd1c389472"><div class="ttname"><a href="a00315.html#ga3d8b9028a1053a44a98902cd1c389472">glm::double3</a></div><div class="ttdeci">vec< 3, double, highp > double3</div><div class="ttdoc">double-qualifier 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="a00315_html_gaf92f58af24f35617518aeb3d4f63fda6"><div class="ttname"><a href="a00315.html#gaf92f58af24f35617518aeb3d4f63fda6">glm::double4</a></div><div class="ttdeci">vec< 4, double, highp > double4</div><div class="ttdoc">double-qualifier 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="a00315_html_ga15c9649286f0bf431bdf9b3509580048"><div class="ttname"><a href="a00315.html#ga15c9649286f0bf431bdf9b3509580048">glm::int3x3</a></div><div class="ttdeci">mat< 3, 3, 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="a00315_html_ga6c97b99aac3e302053ffb58aace9033c"><div class="ttname"><a href="a00315.html#ga6c97b99aac3e302053ffb58aace9033c">glm::bool3x3</a></div><div class="ttdeci">mat< 3, 3, 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="a00315_html_gaa6c69f04ba95f3faedf95dae874de576"><div class="ttname"><a href="a00315.html#gaa6c69f04ba95f3faedf95dae874de576">glm::float3x2</a></div><div class="ttdeci">mat< 3, 2, float, highp > float3x2</div><div class="ttdoc">single-qualifier 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="a00315_html_gaecdef18c819c205aeee9f94dc93de56a"><div class="ttname"><a href="a00315.html#gaecdef18c819c205aeee9f94dc93de56a">glm::int4</a></div><div class="ttdeci">vec< 4, 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="a00315_html_ga31b729b04facccda73f07ed26958b3c2"><div class="ttname"><a href="a00315.html#ga31b729b04facccda73f07ed26958b3c2">glm::double2</a></div><div class="ttdeci">vec< 2, double, highp > double2</div><div class="ttdoc">double-qualifier 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="a00315_html_ga6ceb5d38a58becdf420026e12a6562f3"><div class="ttname"><a href="a00315.html#ga6ceb5d38a58becdf420026e12a6562f3">glm::float3x3</a></div><div class="ttdeci">mat< 3, 3, float, highp > float3x3</div><div class="ttdoc">single-qualifier 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="a00241_html_ga8e93f374aae27d1a88b921860351f8d4"><div class="ttname"><a href="a00241.html#ga8e93f374aae27d1a88b921860351f8d4">glm::mix</a></div><div class="ttdeci">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU 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="a00315_html_gaa09ab65ec9c3c54305ff502e2b1fe6d9"><div class="ttname"><a href="a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9">glm::bool2</a></div><div class="ttdeci">vec< 2, 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="a00315_html_gae7d6b679463d37d6c527d478fb470fdf"><div class="ttname"><a href="a00315.html#gae7d6b679463d37d6c527d478fb470fdf">glm::bool3x4</a></div><div class="ttdeci">mat< 3, 4, 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="a00315_html_ga2749d59a7fddbac44f34ba78e57ef807"><div class="ttname"><a href="a00315.html#ga2749d59a7fddbac44f34ba78e57ef807">glm::int2x4</a></div><div class="ttdeci">mat< 2, 4, 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="a00315_html_ga4d7fa65be8e8e4ad6d920b45c44e471f"><div class="ttname"><a href="a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f">glm::bool2x4</a></div><div class="ttdeci">mat< 2, 4, 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="a00315_html_ga2ef022e453d663d70aec414b2a80f756"><div class="ttname"><a href="a00315.html#ga2ef022e453d663d70aec414b2a80f756">glm::double3x4</a></div><div class="ttdeci">mat< 3, 4, double, highp > double3x4</div><div class="ttdoc">double-qualifier 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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</a></div></div>
|
||||
<div class="ttc" id="a00315_html_ga4d2679c321b793ca3784fe0315bb5332"><div class="ttname"><a href="a00315.html#ga4d2679c321b793ca3784fe0315bb5332">glm::float3x4</a></div><div class="ttdeci">mat< 3, 4, float, highp > float3x4</div><div class="ttdoc">single-qualifier 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><!-- 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>
|
||||
@@ -1,141 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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="a00316.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="a00316.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="a00316.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="a00316.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="a00316.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="a00316.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="a00316.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="a00316.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="a00316.html#gae8ab88024197202c9479d33bdc5a8a5d">More...</a><br /></td></tr>
|
||||
<tr class="separator:gae8ab88024197202c9479d33bdc5a8a5d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga8f2b81ada8515875e58cb1667b6b9908"><td class="memTemplParams" colspan="2">template<typename floatType , length_t L, typename T , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga8f2b81ada8515875e58cb1667b6b9908"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, floatType, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00316.html#ga8f2b81ada8515875e58cb1667b6b9908">compNormalize</a> (vec< L, T, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga8f2b81ada8515875e58cb1667b6b9908"><td class="mdescLeft"> </td><td class="mdescRight">Convert an integer vector to a normalized float vector. <a href="a00316.html#ga8f2b81ada8515875e58cb1667b6b9908">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga8f2b81ada8515875e58cb1667b6b9908"><td class="memSeparator" colspan="2"> </td></tr>
|
||||
<tr class="memitem:ga80abc2980d65d675f435d178c36880eb"><td class="memTemplParams" colspan="2">template<length_t L, typename T , typename floatType , qualifier Q> </td></tr>
|
||||
<tr class="memitem:ga80abc2980d65d675f435d178c36880eb"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00316.html#ga80abc2980d65d675f435d178c36880eb">compScale</a> (vec< L, floatType, Q > const &v)</td></tr>
|
||||
<tr class="memdesc:ga80abc2980d65d675f435d178c36880eb"><td class="mdescLeft"> </td><td class="mdescRight">Convert a normalized float vector to an integer vector. <a href="a00316.html#ga80abc2980d65d675f435d178c36880eb">More...</a><br /></td></tr>
|
||||
<tr class="separator:ga80abc2980d65d675f435d178c36880eb"><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="a00316.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="a00280.html" title="Features that implement in C++ the GLSL specification as closely as possible. ">Core features</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>
|
||||
@@ -1,145 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: 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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_f35778ec600a1b9bbc4524e62e226aa2.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/qualifier.hpp"</span></div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div>
|
||||
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)</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"># pragma message("GLM: GLM_GTX_component_wise is an experimental 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"># else</span></div>
|
||||
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor"># pragma message("GLM: GLM_GTX_component_wise 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> <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="a00236.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, length_t L, <span class="keyword">typename</span> T, qualifier Q></div>
|
||||
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  GLM_FUNC_DECL vec<L, floatType, Q> <a class="code" href="a00316.html#ga8f2b81ada8515875e58cb1667b6b9908">compNormalize</a>(vec<L, T, Q> <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><length_t L, <span class="keyword">typename</span> T, <span class="keyword">typename</span> <span class="keywordtype">float</span>Type, qualifier Q></div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  GLM_FUNC_DECL vec<L, T, Q> <a class="code" href="a00316.html#ga80abc2980d65d675f435d178c36880eb">compScale</a>(vec<L, floatType, Q> <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="a00316.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="a00316.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="a00316.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="a00316.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="a00316_html_gabfa4bb19298c8c73d4217ba759c496b6"><div class="ttname"><a href="a00316.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="a00316_html_gae8ab88024197202c9479d33bdc5a8a5d"><div class="ttname"><a href="a00316.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="a00316_html_ga80abc2980d65d675f435d178c36880eb"><div class="ttname"><a href="a00316.html#ga80abc2980d65d675f435d178c36880eb">glm::compScale</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, T, Q > compScale(vec< L, floatType, Q > const &v)</div><div class="ttdoc">Convert a normalized float vector to an integer vector. </div></div>
|
||||
<div class="ttc" id="a00316_html_ga8f2b81ada8515875e58cb1667b6b9908"><div class="ttname"><a href="a00316.html#ga8f2b81ada8515875e58cb1667b6b9908">glm::compNormalize</a></div><div class="ttdeci">GLM_FUNC_DECL vec< L, floatType, Q > compNormalize(vec< L, T, Q > const &v)</div><div class="ttdoc">Convert an integer vector to a normalized float vector. </div></div>
|
||||
<div class="ttc" id="a00316_html_gab5d0832b5c7bb01b8d7395973bfb1425"><div class="ttname"><a href="a00316.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="a00316_html_gaf71833350e15e74d31cbf8a3e7f27051"><div class="ttname"><a href="a00316.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="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
@@ -1,150 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/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 documentation: compute_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 documentation
|
||||
</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_3a581ba30d25676e4b797b1f96d53b45.html">F:</a></li><li class="navelem"><a class="el" href="dir_9e5fe034a00e89334fd5186c3e7db156.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_d9496f0844b48bc7e53b5af8c99b9ab2.html">Source</a></li><li class="navelem"><a class="el" href="dir_a8bee7be44182a33f3820393ae0b105d.html">G-Truc</a></li><li class="navelem"><a class="el" href="dir_44e5e654415abd9ca6fdeaddaff8565e.html">glm</a></li><li class="navelem"><a class="el" href="dir_cef2d71d502cb69a9252bca2297d9549.html">glm</a></li><li class="navelem"><a class="el" href="dir_033f5edb0915b828d2c46ed4804e5503.html">detail</a></li> </ul>
|
||||
</div>
|
||||
</div><!-- top -->
|
||||
<div class="header">
|
||||
<div class="headertitle">
|
||||
<div class="title">compute_common.hpp</div> </div>
|
||||
</div><!--header-->
|
||||
<div class="contents">
|
||||
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div>
|
||||
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div>
|
||||
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "setup.hpp"</span></div>
|
||||
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include <limits></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="a00236.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="keyword">template</span><<span class="keyword">typename</span> genFIType, <span class="keywordtype">bool</span> <span class="comment">/*signed*/</span>></div>
|
||||
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">struct </span>compute_abs</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> </div>
|
||||
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  <span class="keyword">template</span><<span class="keyword">typename</span> genFIType></div>
|
||||
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  <span class="keyword">struct </span>compute_abs<genFIType, true></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>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> genFIType call(genFIType x)</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>  GLM_STATIC_ASSERT(</div>
|
||||
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,</div>
|
||||
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  <span class="stringliteral">"'abs' only accept floating-point and integer scalar or vector inputs"</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="keywordflow">return</span> x >= genFIType(0) ? x : -x;</div>
|
||||
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">// TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;</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> </div>
|
||||
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#if GLM_COMPILER & GLM_COMPILER_CUDA</span></div>
|
||||
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  <span class="keyword">template</span><></div>
|
||||
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keyword">struct </span>compute_abs<float, true></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 GLM_CONSTEXPR <span class="keyword">static</span> <span class="keywordtype">float</span> call(<span class="keywordtype">float</span> x)</div>
|
||||
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  {</div>
|
||||
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordflow">return</span> fabsf(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>  };</div>
|
||||
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#endif</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> genFIType></div>
|
||||
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keyword">struct </span>compute_abs<genFIType, false></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>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> genFIType call(genFIType 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>  GLM_STATIC_ASSERT(</div>
|
||||
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  (!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),</div>
|
||||
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="stringliteral">"'abs' only accept floating-point and integer scalar or vector inputs"</span>);</div>
|
||||
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keywordflow">return</span> x;</div>
|
||||
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div>
|
||||
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  };</div>
|
||||
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span> }<span class="comment">//namespace detail</span></div>
|
||||
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }<span class="comment">//namespace glm</span></div>
|
||||
<div class="ttc" id="a00236_html"><div class="ttname"><a href="a00236.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00015_source.html#l00020">common.hpp:20</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>
|
||||
Loaded 100 of 5981 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user