From cf68600c4f4da81425f8a7e706951fbb681d0e2f Mon Sep 17 00:00:00 2001
From: jdsouza90
Date: Tue, 20 Sep 2022 09:59:34 -0700
Subject: [PATCH] v0.8.1.0 Release
v0.8.1.0 Release
---
CHANGELOG | 22 +-
CMakeLists.txt | 96 +-
LICENSE | 2 +-
README.MD | 42 +-
nvar/include/nvAR_defs.h | 325 +-
nvar/include/nvCVImage.h | 27 +-
nvar/include/nvCVStatus.h | 4 +
nvar/src/VPIProxy.cpp | 203 +
nvar/src/nvCVImageProxy.cpp | 16 +-
resources/ar_006.png | Bin 0 -> 550518 bytes
resources/ar_007.png | Bin 0 -> 880299 bytes
samples/BodyTrack/BodyEngine.cpp | 167 +-
samples/BodyTrack/BodyEngine.h | 33 +-
samples/BodyTrack/BodyTrack.cpp | 532 +-
samples/BodyTrack/BodyTrack.exe | Bin 103120 -> 125480 bytes
samples/BodyTrack/CMakeLists.txt | 35 +-
samples/CMakeLists.txt | 2 +
.../ExpressionApp/BackEndOpenGL/FaceIO.cpp | 2378 ++
samples/ExpressionApp/BackEndOpenGL/FaceIO.h | 231 +
.../BackEndOpenGL/GLMaterial.cpp | 314 +
.../ExpressionApp/BackEndOpenGL/GLMaterial.h | 143 +
.../ExpressionApp/BackEndOpenGL/GLMesh.cpp | 624 +
samples/ExpressionApp/BackEndOpenGL/GLMesh.h | 280 +
.../ExpressionApp/BackEndOpenGL/GLShaders.cpp | 632 +
.../ExpressionApp/BackEndOpenGL/GLShaders.h | 366 +
.../ExpressionApp/BackEndOpenGL/GLSpectrum.h | 106 +
.../BackEndOpenGL/OpenGLMeshRenderer.cpp | 645 +
.../BackEndOpenGL/OpenGLMeshRenderer.h | 41 +
.../BackEndOpenGL/SimpleFaceModel.h | 245 +
samples/ExpressionApp/CMakeLists.txt | 97 +
samples/ExpressionApp/DirectoryIterator.cpp | 169 +
samples/ExpressionApp/DirectoryIterator.h | 68 +
samples/ExpressionApp/ExpressionApp.cpp | 1288 +
samples/ExpressionApp/ExpressionApp.exe | Bin 0 -> 774696 bytes
samples/ExpressionApp/ExpressionAppUI.cpp | 711 +
samples/ExpressionApp/ExpressionAppUI.h | 145 +
samples/ExpressionApp/MeshRenderer.cpp | 332 +
samples/ExpressionApp/MeshRenderer.h | 149 +
samples/ExpressionApp/Readme.txt | 19 +
samples/ExpressionApp/nvARProxy.cpp | 274 +
samples/ExpressionApp/nvCVImageProxy.cpp | 341 +
samples/ExpressionApp/run.bat | 3 +
samples/FaceTrack/CMakeLists.txt | 43 +-
samples/FaceTrack/FaceEngine.cpp | 101 +-
samples/FaceTrack/FaceEngine.h | 19 +-
samples/FaceTrack/FaceTrack.cpp | 47 +-
samples/FaceTrack/FaceTrack.exe | Bin 128200 -> 132648 bytes
samples/FaceTrack/Readme.txt | 41 +-
samples/GazeRedirect/CMakeLists.txt | 51 +
samples/GazeRedirect/GazeEngine.cpp | 453 +
samples/GazeRedirect/GazeEngine.h | 205 +
samples/GazeRedirect/GazeRedirect.cpp | 858 +
samples/GazeRedirect/GazeRedirect.exe | Bin 0 -> 105512 bytes
samples/GazeRedirect/Readme.txt | 10 +
samples/GazeRedirect/run.bat | 3 +
.../external/GLAD/include/KHR/khrplatform.h | 282 +
samples/external/GLAD/include/glad/glad.h | 5163 ++++
.../GLAD/lib/cmake/glad/gladConfig.cmake | 28 +
.../lib/cmake/glad/gladConfigVersion.cmake | 46 +
.../lib/cmake/glad/gladTargets-debug.cmake | 19 +
.../lib/cmake/glad/gladTargets-release.cmake | 19 +
.../GLAD/lib/cmake/glad/gladTargets.cmake | 94 +
samples/external/GLAD/lib/glad.lib | Bin 0 -> 401074 bytes
samples/external/GLFW/include/GLFW/glfw3.h | 4248 +++
.../external/GLFW/include/GLFW/glfw3native.h | 456 +
.../GLFW/lib/cmake/glfw3/glfw3Config.cmake | 1 +
.../lib/cmake/glfw3/glfw3ConfigVersion.cmake | 46 +
.../lib/cmake/glfw3/glfw3Targets-debug.cmake | 19 +
.../cmake/glfw3/glfw3Targets-release.cmake | 19 +
.../GLFW/lib/cmake/glfw3/glfw3Targets.cmake | 94 +
samples/external/GLFW/lib/glfw3.lib | Bin 0 -> 313990 bytes
samples/external/GLFW/lib/pkgconfig/glfw3.pc | 13 +
.../external/Imgui/imgui-docking/LICENSE.txt | 21 +
.../backends/imgui_impl_allegro5.cpp | 478 +
.../backends/imgui_impl_allegro5.h | 31 +
.../backends/imgui_impl_android.cpp | 187 +
.../backends/imgui_impl_android.h | 27 +
.../backends/imgui_impl_dx10.cpp | 712 +
.../imgui-docking/backends/imgui_impl_dx10.h | 26 +
.../backends/imgui_impl_dx11.cpp | 728 +
.../imgui-docking/backends/imgui_impl_dx11.h | 27 +
.../backends/imgui_impl_dx12.cpp | 1073 +
.../imgui-docking/backends/imgui_impl_dx12.h | 40 +
.../imgui-docking/backends/imgui_impl_dx9.cpp | 540 +
.../imgui-docking/backends/imgui_impl_dx9.h | 26 +
.../backends/imgui_impl_glfw.cpp | 965 +
.../imgui-docking/backends/imgui_impl_glfw.h | 45 +
.../backends/imgui_impl_glut.cpp | 217 +
.../imgui-docking/backends/imgui_impl_glut.h | 37 +
.../backends/imgui_impl_marmalade.cpp | 318 +
.../backends/imgui_impl_marmalade.h | 28 +
.../imgui-docking/backends/imgui_impl_metal.h | 31 +
.../backends/imgui_impl_metal.mm | 558 +
.../backends/imgui_impl_opengl2.cpp | 324 +
.../backends/imgui_impl_opengl2.h | 33 +
.../backends/imgui_impl_opengl3.cpp | 817 +
.../backends/imgui_impl_opengl3.h | 56 +
.../backends/imgui_impl_opengl3_loader.h | 752 +
.../imgui-docking/backends/imgui_impl_osx.h | 25 +
.../imgui-docking/backends/imgui_impl_osx.mm | 388 +
.../imgui-docking/backends/imgui_impl_sdl.cpp | 780 +
.../imgui-docking/backends/imgui_impl_sdl.h | 37 +
.../backends/imgui_impl_sdlrenderer.cpp | 239 +
.../backends/imgui_impl_sdlrenderer.h | 28 +
.../backends/imgui_impl_vulkan.cpp | 1715 ++
.../backends/imgui_impl_vulkan.h | 150 +
.../backends/imgui_impl_wgpu.cpp | 717 +
.../imgui-docking/backends/imgui_impl_wgpu.h | 25 +
.../backends/imgui_impl_win32.cpp | 1052 +
.../imgui-docking/backends/imgui_impl_win32.h | 43 +
.../backends/vulkan/generate_spv.sh | 6 +
.../backends/vulkan/glsl_shader.frag | 14 +
.../backends/vulkan/glsl_shader.vert | 25 +
.../Imgui/imgui-docking/docs/BACKENDS.md | 142 +
.../Imgui/imgui-docking/docs/CHANGELOG.txt | 3592 +++
.../Imgui/imgui-docking/docs/EXAMPLES.md | 246 +
.../external/Imgui/imgui-docking/docs/FAQ.md | 675 +
.../Imgui/imgui-docking/docs/FONTS.md | 397 +
.../Imgui/imgui-docking/docs/README.md | 243 +
.../Imgui/imgui-docking/docs/TODO.txt | 448 +
.../Imgui/imgui-docking/examples/README.txt | 9 +
.../examples/example_allegro5/README.md | 36 +
.../example_allegro5/example_allegro5.vcxproj | 180 +
.../example_allegro5.vcxproj.filters | 58 +
.../example_allegro5/imconfig_allegro5.h | 11 +
.../examples/example_allegro5/main.cpp | 145 +
.../example_android_opengl3/CMakeLists.txt | 40 +
.../android/app/build.gradle | 34 +
.../android/app/src/main/AndroidManifest.xml | 24 +
.../android/app/src/main/java/MainActivity.kt | 40 +
.../android/build.gradle | 24 +
.../android/settings.gradle | 1 +
.../examples/example_android_opengl3/main.cpp | 369 +
.../examples/example_apple_metal/README.md | 10 +
.../project.pbxproj | 499 +
.../example_apple_metal/iOS/Info-iOS.plist | 49 +
.../iOS/LaunchScreen.storyboard | 27 +
.../macOS/Info-macOS.plist | 30 +
.../macOS/MainMenu.storyboard | 93 +
.../examples/example_apple_metal/main.mm | 356 +
.../project.pbxproj | 328 +
.../examples/example_apple_opengl2/main.mm | 283 +
.../example_emscripten_opengl3/Makefile | 91 +
.../example_emscripten_opengl3/README.md | 22 +
.../example_emscripten_opengl3/main.cpp | 175 +
.../shell_minimal.html | 64 +
.../examples/example_emscripten_wgpu/Makefile | 88 +
.../example_emscripten_wgpu/README.md | 10 +
.../examples/example_emscripten_wgpu/main.cpp | 245 +
.../example_emscripten_wgpu/web/index.html | 80 +
.../examples/example_glfw_metal/Makefile | 46 +
.../examples/example_glfw_metal/main.mm | 172 +
.../examples/example_glfw_opengl2/Makefile | 81 +
.../example_glfw_opengl2/build_win32.bat | 8 +
.../example_glfw_opengl2.vcxproj | 181 +
.../example_glfw_opengl2.vcxproj.filters | 61 +
.../examples/example_glfw_opengl2/main.cpp | 181 +
.../examples/example_glfw_opengl3/Makefile | 89 +
.../example_glfw_opengl3/build_win32.bat | 8 +
.../example_glfw_opengl3.vcxproj | 182 +
.../example_glfw_opengl3.vcxproj.filters | 64 +
.../examples/example_glfw_opengl3/main.cpp | 195 +
.../example_glfw_vulkan/CMakeLists.txt | 43 +
.../example_glfw_vulkan/build_win32.bat | 14 +
.../example_glfw_vulkan/build_win64.bat | 13 +
.../example_glfw_vulkan.vcxproj | 181 +
.../example_glfw_vulkan.vcxproj.filters | 61 +
.../examples/example_glfw_vulkan/main.cpp | 578 +
.../examples/example_glut_opengl2/Makefile | 75 +
.../example_glut_opengl2.vcxproj | 181 +
.../example_glut_opengl2.vcxproj.filters | 61 +
.../examples/example_glut_opengl2/main.cpp | 156 +
.../examples/example_marmalade/data/app.icf | 32 +
.../examples/example_marmalade/main.cpp | 125 +
.../example_marmalade/marmalade_example.mkb | 47 +
.../examples/example_null/Makefile | 92 +
.../examples/example_null/build_win32.bat | 3 +
.../examples/example_null/main.cpp | 37 +
.../example_sdl_directx11/build_win32.bat | 8 +
.../example_sdl_directx11.vcxproj | 182 +
.../example_sdl_directx11.vcxproj.filters | 60 +
.../examples/example_sdl_directx11/main.cpp | 249 +
.../examples/example_sdl_metal/Makefile | 47 +
.../examples/example_sdl_metal/main.mm | 181 +
.../examples/example_sdl_opengl2/Makefile | 79 +
.../examples/example_sdl_opengl2/README.md | 29 +
.../example_sdl_opengl2/build_win32.bat | 8 +
.../example_sdl_opengl2.vcxproj | 181 +
.../example_sdl_opengl2.vcxproj.filters | 61 +
.../examples/example_sdl_opengl2/main.cpp | 182 +
.../examples/example_sdl_opengl3/Makefile | 91 +
.../examples/example_sdl_opengl3/README.md | 29 +
.../example_sdl_opengl3/build_win32.bat | 8 +
.../example_sdl_opengl3.vcxproj | 182 +
.../example_sdl_opengl3.vcxproj.filters | 64 +
.../examples/example_sdl_opengl3/main.cpp | 203 +
.../examples/example_sdl_sdlrenderer/Makefile | 79 +
.../example_sdl_sdlrenderer/README.md | 25 +
.../example_sdl_sdlrenderer/build_win32.bat | 8 +
.../example_sdl_sdlrenderer.vcxproj | 181 +
.../example_sdl_sdlrenderer.vcxproj.filters | 61 +
.../examples/example_sdl_sdlrenderer/main.cpp | 161 +
.../example_sdl_vulkan/build_win32.bat | 10 +
.../example_sdl_vulkan.vcxproj | 181 +
.../example_sdl_vulkan.vcxproj.filters | 61 +
.../examples/example_sdl_vulkan/main.cpp | 579 +
.../example_win32_directx10/build_win32.bat | 8 +
.../example_win32_directx10.vcxproj | 171 +
.../example_win32_directx10.vcxproj.filters | 60 +
.../examples/example_win32_directx10/main.cpp | 261 +
.../example_win32_directx11/build_win32.bat | 9 +
.../example_win32_directx11.vcxproj | 170 +
.../example_win32_directx11.vcxproj.filters | 60 +
.../examples/example_win32_directx11/main.cpp | 283 +
.../example_win32_directx12/build_win32.bat | 9 +
.../example_win32_directx12.vcxproj | 172 +
.../example_win32_directx12.vcxproj.filters | 57 +
.../examples/example_win32_directx12/main.cpp | 483 +
.../example_win32_directx9/build_win32.bat | 8 +
.../example_win32_directx9.vcxproj | 171 +
.../example_win32_directx9.vcxproj.filters | 61 +
.../examples/example_win32_directx9/main.cpp | 269 +
.../imgui-docking/examples/imgui_examples.sln | 128 +
.../examples/libs/glfw/COPYING.txt | 22 +
.../examples/libs/glfw/include/GLFW/glfw3.h | 4227 +++
.../libs/glfw/include/GLFW/glfw3native.h | 456 +
.../libs/glfw/lib-vc2010-32/glfw3.lib | Bin 0 -> 187376 bytes
.../libs/glfw/lib-vc2010-64/glfw3.lib | Bin 0 -> 291120 bytes
.../examples/libs/usynergy/README.txt | 8 +
.../examples/libs/usynergy/uSynergy.c | 636 +
.../examples/libs/usynergy/uSynergy.h | 420 +
.../external/Imgui/imgui-docking/imconfig.h | 123 +
.../external/Imgui/imgui-docking/imgui.cpp | 17813 ++++++++++++
samples/external/Imgui/imgui-docking/imgui.h | 3167 +++
.../Imgui/imgui-docking/imgui_demo.cpp | 7965 ++++++
.../Imgui/imgui-docking/imgui_draw.cpp | 4192 +++
.../Imgui/imgui-docking/imgui_internal.h | 3096 +++
.../Imgui/imgui-docking/imgui_tables.cpp | 4049 +++
.../Imgui/imgui-docking/imgui_widgets.cpp | 8358 ++++++
.../Imgui/imgui-docking/imstb_rectpack.h | 639 +
.../Imgui/imgui-docking/imstb_textedit.h | 1449 +
.../Imgui/imgui-docking/imstb_truetype.h | 4903 ++++
.../Imgui/imgui-docking/misc/README.txt | 23 +
.../Imgui/imgui-docking/misc/cpp/README.txt | 13 +
.../imgui-docking/misc/cpp/imgui_stdlib.cpp | 76 +
.../imgui-docking/misc/cpp/imgui_stdlib.h | 22 +
.../imgui-docking/misc/debuggers/README.txt | 16 +
.../imgui-docking/misc/debuggers/imgui.gdb | 12 +
.../misc/debuggers/imgui.natstepfilter | 30 +
.../imgui-docking/misc/debuggers/imgui.natvis | 62 +
.../misc/fonts/Cousine-Regular.ttf | Bin 0 -> 43912 bytes
.../imgui-docking/misc/fonts/DroidSans.ttf | Bin 0 -> 190044 bytes
.../misc/fonts/Karla-Regular.ttf | Bin 0 -> 16848 bytes
.../imgui-docking/misc/fonts/ProggyClean.ttf | Bin 0 -> 41208 bytes
.../imgui-docking/misc/fonts/ProggyTiny.ttf | Bin 0 -> 35656 bytes
.../misc/fonts/Roboto-Medium.ttf | Bin 0 -> 162588 bytes
.../misc/fonts/binary_to_compressed_c.cpp | 385 +
.../imgui-docking/misc/freetype/README.md | 37 +
.../misc/freetype/imgui_freetype.cpp | 773 +
.../misc/freetype/imgui_freetype.h | 50 +
.../misc/single_file/imgui_single_file.h | 18 +
samples/external/ThirdPartyLicenses.txt | 46 +
.../external/glm/include/glm/CMakeLists.txt | 63 +-
samples/external/glm/include/glm/common.hpp | 535 +-
.../glm/include/glm/detail/_features.hpp | 77 +-
.../glm/include/glm/detail/_fixes.hpp | 3 -
.../glm/include/glm/detail/_noise.hpp | 108 +-
.../glm/include/glm/detail/_swizzle.hpp | 1227 +-
.../glm/include/glm/detail/_swizzle_func.hpp | 1294 +-
.../glm/include/glm/detail/_vectorize.hpp | 149 +-
.../glm/include/glm/detail/compute_common.hpp | 50 +
.../glm/detail/compute_vector_relational.hpp | 30 +
.../glm/include/glm/detail/func_common.inl | 633 +-
.../include/glm/detail/func_common_simd.inl | 158 +-
.../include/glm/detail/func_exponential.inl | 98 +-
.../glm/detail/func_exponential_simd.inl | 26 +-
.../glm/include/glm/detail/func_geometric.inl | 156 +-
.../glm/detail/func_geometric_simd.inl | 142 +-
.../glm/include/glm/detail/func_integer.inl | 274 +-
.../include/glm/detail/func_integer_simd.inl | 33 +-
.../glm/include/glm/detail/func_matrix.inl | 448 +-
.../include/glm/detail/func_matrix_simd.inl | 255 +-
.../glm/include/glm/detail/func_packing.inl | 51 +-
.../include/glm/detail/func_packing_simd.inl | 3 -
.../include/glm/detail/func_trigonometric.inl | 111 +-
.../glm/detail/func_vector_relational.inl | 88 +-
.../detail/func_vector_relational_simd.inl | 3 -
.../external/glm/include/glm/detail/glm.cpp | 370 +-
.../glm/include/glm/detail/qualifier.hpp | 230 +
.../external/glm/include/glm/detail/setup.hpp | 1285 +-
.../glm/include/glm/detail/type_float.hpp | 117 +-
.../glm/include/glm/detail/type_half.hpp | 5 +-
.../glm/include/glm/detail/type_half.inl | 33 +-
.../glm/include/glm/detail/type_mat2x2.hpp | 234 +-
.../glm/include/glm/detail/type_mat2x2.inl | 468 +-
.../glm/include/glm/detail/type_mat2x3.hpp | 206 +-
.../glm/include/glm/detail/type_mat2x3.inl | 414 +-
.../glm/include/glm/detail/type_mat2x4.hpp | 210 +-
.../glm/include/glm/detail/type_mat2x4.inl | 413 +-
.../glm/include/glm/detail/type_mat3x2.hpp | 188 +-
.../glm/include/glm/detail/type_mat3x2.inl | 458 +-
.../glm/include/glm/detail/type_mat3x3.hpp | 216 +-
.../glm/include/glm/detail/type_mat3x3.inl | 494 +-
.../glm/include/glm/detail/type_mat3x4.hpp | 188 +-
.../glm/include/glm/detail/type_mat3x4.inl | 474 +-
.../glm/include/glm/detail/type_mat4x2.hpp | 202 +-
.../glm/include/glm/detail/type_mat4x2.inl | 499 +-
.../glm/include/glm/detail/type_mat4x3.hpp | 210 +-
.../glm/include/glm/detail/type_mat4x3.inl | 512 +-
.../glm/include/glm/detail/type_mat4x4.hpp | 238 +-
.../glm/include/glm/detail/type_mat4x4.inl | 635 +-
.../include/glm/detail/type_mat4x4_simd.inl | 1 -
.../glm/include/glm/detail/type_quat.hpp | 191 +
.../glm/include/glm/detail/type_quat.inl | 412 +
.../glm/include/glm/detail/type_quat_simd.inl | 188 +
.../glm/include/glm/detail/type_vec1.hpp | 369 +-
.../glm/include/glm/detail/type_vec1.inl | 461 +-
.../glm/include/glm/detail/type_vec2.hpp | 503 +-
.../glm/include/glm/detail/type_vec2.inl | 697 +-
.../glm/include/glm/detail/type_vec3.hpp | 537 +-
.../glm/include/glm/detail/type_vec3.inl | 810 +-
.../glm/include/glm/detail/type_vec4.hpp | 621 +-
.../glm/include/glm/detail/type_vec4.inl | 1179 +-
.../glm/include/glm/detail/type_vec4_simd.inl | 746 +-
.../external/glm/include/glm/exponential.hpp | 106 +-
samples/external/glm/include/glm/ext.hpp | 197 +-
.../glm/include/glm/ext/matrix_clip_space.hpp | 522 +
.../glm/include/glm/ext/matrix_clip_space.inl | 555 +
.../glm/include/glm/ext/matrix_common.hpp | 36 +
.../glm/include/glm/ext/matrix_common.inl | 16 +
.../glm/include/glm/ext/matrix_double2x2.hpp | 23 +
.../glm/ext/matrix_double2x2_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_double2x3.hpp | 18 +
.../glm/ext/matrix_double2x3_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double2x4.hpp | 18 +
.../glm/ext/matrix_double2x4_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double3x2.hpp | 18 +
.../glm/ext/matrix_double3x2_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double3x3.hpp | 23 +
.../glm/ext/matrix_double3x3_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_double3x4.hpp | 18 +
.../glm/ext/matrix_double3x4_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double4x2.hpp | 18 +
.../glm/ext/matrix_double4x2_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double4x3.hpp | 18 +
.../glm/ext/matrix_double4x3_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_double4x4.hpp | 23 +
.../glm/ext/matrix_double4x4_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_float2x2.hpp | 23 +
.../glm/ext/matrix_float2x2_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_float2x3.hpp | 18 +
.../glm/ext/matrix_float2x3_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float2x4.hpp | 18 +
.../glm/ext/matrix_float2x4_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float3x2.hpp | 18 +
.../glm/ext/matrix_float3x2_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float3x3.hpp | 23 +
.../glm/ext/matrix_float3x3_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_float3x4.hpp | 18 +
.../glm/ext/matrix_float3x4_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float4x2.hpp | 18 +
.../glm/ext/matrix_float4x2_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float4x3.hpp | 18 +
.../glm/ext/matrix_float4x3_precision.hpp | 31 +
.../glm/include/glm/ext/matrix_float4x4.hpp | 23 +
.../glm/ext/matrix_float4x4_precision.hpp | 49 +
.../glm/include/glm/ext/matrix_int2x2.hpp | 38 +
.../include/glm/ext/matrix_int2x2_sized.hpp | 70 +
.../glm/include/glm/ext/matrix_int2x3.hpp | 33 +
.../include/glm/ext/matrix_int2x3_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int2x4.hpp | 33 +
.../include/glm/ext/matrix_int2x4_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int3x2.hpp | 33 +
.../include/glm/ext/matrix_int3x2_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int3x3.hpp | 38 +
.../include/glm/ext/matrix_int3x3_sized.hpp | 70 +
.../glm/include/glm/ext/matrix_int3x4.hpp | 33 +
.../include/glm/ext/matrix_int3x4_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int4x2.hpp | 33 +
.../include/glm/ext/matrix_int4x2_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int4x3.hpp | 33 +
.../include/glm/ext/matrix_int4x3_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_int4x4.hpp | 38 +
.../include/glm/ext/matrix_int4x4_sized.hpp | 70 +
.../glm/include/glm/ext/matrix_integer.hpp | 91 +
.../glm/include/glm/ext/matrix_integer.inl | 38 +
.../glm/include/glm/ext/matrix_projection.hpp | 149 +
.../glm/include/glm/ext/matrix_projection.inl | 106 +
.../glm/include/glm/ext/matrix_relational.hpp | 132 +
.../glm/include/glm/ext/matrix_relational.inl | 88 +
.../glm/include/glm/ext/matrix_transform.hpp | 144 +
.../glm/include/glm/ext/matrix_transform.inl | 153 +
.../glm/include/glm/ext/matrix_uint2x2.hpp | 38 +
.../include/glm/ext/matrix_uint2x2_sized.hpp | 70 +
.../glm/include/glm/ext/matrix_uint2x3.hpp | 33 +
.../include/glm/ext/matrix_uint2x3_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint2x4.hpp | 33 +
.../include/glm/ext/matrix_uint2x4_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint3x2.hpp | 33 +
.../include/glm/ext/matrix_uint3x2_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint3x3.hpp | 38 +
.../include/glm/ext/matrix_uint3x3_sized.hpp | 70 +
.../glm/include/glm/ext/matrix_uint3x4.hpp | 33 +
.../include/glm/ext/matrix_uint3x4_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint4x2.hpp | 33 +
.../include/glm/ext/matrix_uint4x2_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint4x3.hpp | 33 +
.../include/glm/ext/matrix_uint4x3_sized.hpp | 49 +
.../glm/include/glm/ext/matrix_uint4x4.hpp | 38 +
.../include/glm/ext/matrix_uint4x4_sized.hpp | 70 +
.../glm/include/glm/ext/quaternion_common.hpp | 135 +
.../glm/include/glm/ext/quaternion_common.inl | 144 +
.../glm/ext/quaternion_common_simd.inl | 18 +
.../glm/include/glm/ext/quaternion_double.hpp | 39 +
.../glm/ext/quaternion_double_precision.hpp | 42 +
.../glm/ext/quaternion_exponential.hpp | 63 +
.../glm/ext/quaternion_exponential.inl | 89 +
.../glm/include/glm/ext/quaternion_float.hpp | 39 +
.../glm/ext/quaternion_float_precision.hpp | 36 +
.../include/glm/ext/quaternion_geometric.hpp | 70 +
.../include/glm/ext/quaternion_geometric.inl | 36 +
.../include/glm/ext/quaternion_relational.hpp | 62 +
.../include/glm/ext/quaternion_relational.inl | 35 +
.../include/glm/ext/quaternion_transform.hpp | 47 +
.../include/glm/ext/quaternion_transform.inl | 24 +
.../glm/ext/quaternion_trigonometric.hpp | 63 +
.../glm/ext/quaternion_trigonometric.inl | 37 +
.../glm/include/glm/ext/scalar_common.hpp | 181 +
.../glm/include/glm/ext/scalar_common.inl | 170 +
.../glm/include/glm/ext/scalar_constants.hpp | 40 +
.../glm/include/glm/ext/scalar_constants.inl | 24 +
.../glm/include/glm/ext/scalar_int_sized.hpp | 70 +
.../glm/include/glm/ext/scalar_integer.hpp | 92 +
.../glm/include/glm/ext/scalar_integer.inl | 243 +
.../glm/include/glm/ext/scalar_packing.hpp | 32 +
.../glm/include/glm/ext/scalar_packing.inl | 0
.../glm/include/glm/ext/scalar_reciprocal.hpp | 135 +
.../glm/include/glm/ext/scalar_reciprocal.inl | 107 +
.../glm/include/glm/ext/scalar_relational.hpp | 65 +
.../glm/include/glm/ext/scalar_relational.inl | 40 +
.../glm/include/glm/ext/scalar_uint_sized.hpp | 70 +
.../glm/include/glm/ext/scalar_ulp.hpp | 74 +
.../glm/include/glm/ext/scalar_ulp.inl | 284 +
.../glm/include/glm/ext/vector_bool1.hpp | 30 +
.../glm/ext/vector_bool1_precision.hpp | 34 +
.../glm/include/glm/ext/vector_bool2.hpp | 18 +
.../glm/ext/vector_bool2_precision.hpp | 31 +
.../glm/include/glm/ext/vector_bool3.hpp | 18 +
.../glm/ext/vector_bool3_precision.hpp | 31 +
.../glm/include/glm/ext/vector_bool4.hpp | 18 +
.../glm/ext/vector_bool4_precision.hpp | 31 +
.../glm/include/glm/ext/vector_common.hpp | 228 +
.../glm/include/glm/ext/vector_common.inl | 147 +
.../glm/include/glm/ext/vector_double1.hpp | 31 +
.../glm/ext/vector_double1_precision.hpp | 36 +
.../glm/include/glm/ext/vector_double2.hpp | 18 +
.../glm/ext/vector_double2_precision.hpp | 31 +
.../glm/include/glm/ext/vector_double3.hpp | 18 +
.../glm/ext/vector_double3_precision.hpp | 34 +
.../glm/include/glm/ext/vector_double4.hpp | 18 +
.../glm/ext/vector_double4_precision.hpp | 35 +
.../glm/include/glm/ext/vector_float1.hpp | 31 +
.../glm/ext/vector_float1_precision.hpp | 36 +
.../glm/include/glm/ext/vector_float2.hpp | 18 +
.../glm/ext/vector_float2_precision.hpp | 31 +
.../glm/include/glm/ext/vector_float3.hpp | 18 +
.../glm/ext/vector_float3_precision.hpp | 31 +
.../glm/include/glm/ext/vector_float4.hpp | 18 +
.../glm/ext/vector_float4_precision.hpp | 31 +
.../glm/include/glm/ext/vector_int1.hpp | 32 +
.../glm/include/glm/ext/vector_int1_sized.hpp | 49 +
.../glm/include/glm/ext/vector_int2.hpp | 18 +
.../glm/include/glm/ext/vector_int2_sized.hpp | 49 +
.../glm/include/glm/ext/vector_int3.hpp | 18 +
.../glm/include/glm/ext/vector_int3_sized.hpp | 49 +
.../glm/include/glm/ext/vector_int4.hpp | 18 +
.../glm/include/glm/ext/vector_int4_sized.hpp | 49 +
.../glm/include/glm/ext/vector_integer.hpp | 149 +
.../glm/include/glm/ext/vector_integer.inl | 85 +
.../glm/include/glm/ext/vector_packing.hpp | 32 +
.../glm/include/glm/ext/vector_packing.inl | 0
.../glm/include/glm/ext/vector_reciprocal.hpp | 135 +
.../glm/include/glm/ext/vector_reciprocal.inl | 105 +
.../glm/include/glm/ext/vector_relational.hpp | 107 +
.../glm/include/glm/ext/vector_relational.inl | 75 +
.../glm/include/glm/ext/vector_uint1.hpp | 32 +
.../include/glm/ext/vector_uint1_sized.hpp | 49 +
.../glm/include/glm/ext/vector_uint2.hpp | 18 +
.../include/glm/ext/vector_uint2_sized.hpp | 49 +
.../glm/include/glm/ext/vector_uint3.hpp | 18 +
.../include/glm/ext/vector_uint3_sized.hpp | 49 +
.../glm/include/glm/ext/vector_uint4.hpp | 18 +
.../include/glm/ext/vector_uint4_sized.hpp | 49 +
.../glm/include/glm/ext/vector_ulp.hpp | 109 +
.../glm/include/glm/ext/vector_ulp.inl | 74 +
samples/external/glm/include/glm/fwd.hpp | 3765 +--
.../external/glm/include/glm/geometric.hpp | 112 +-
samples/external/glm/include/glm/glm.hpp | 104 +-
.../external/glm/include/glm/gtc/bitfield.hpp | 153 +-
.../external/glm/include/glm/gtc/bitfield.inl | 359 +-
.../glm/include/glm/gtc/color_space.hpp | 32 +-
.../glm/include/glm/gtc/color_space.inl | 71 +-
.../glm/include/glm/gtc/constants.hpp | 77 +-
.../glm/include/glm/gtc/constants.inl | 72 +-
.../external/glm/include/glm/gtc/epsilon.hpp | 43 +-
.../external/glm/include/glm/gtc/epsilon.inl | 121 +-
.../external/glm/include/glm/gtc/integer.hpp | 81 +-
.../external/glm/include/glm/gtc/integer.inl | 62 +-
.../glm/include/glm/gtc/matrix_access.hpp | 27 +-
.../glm/include/glm/gtc/matrix_access.inl | 23 +-
.../glm/include/glm/gtc/matrix_integer.hpp | 405 +-
.../glm/include/glm/gtc/matrix_inverse.hpp | 21 +-
.../glm/include/glm/gtc/matrix_inverse.inl | 76 +-
.../glm/include/glm/gtc/matrix_transform.hpp | 447 +-
.../glm/include/glm/gtc/matrix_transform.inl | 572 -
.../external/glm/include/glm/gtc/noise.hpp | 31 +-
.../external/glm/include/glm/gtc/noise.inl | 873 +-
.../external/glm/include/glm/gtc/packing.hpp | 553 +-
.../external/glm/include/glm/gtc/packing.inl | 343 +-
.../glm/include/glm/gtc/quaternion.hpp | 424 +-
.../glm/include/glm/gtc/quaternion.inl | 753 +-
.../glm/include/glm/gtc/quaternion_simd.inl | 198 -
.../external/glm/include/glm/gtc/random.hpp | 98 +-
.../external/glm/include/glm/gtc/random.inl | 323 +-
.../glm/include/glm/gtc/reciprocal.hpp | 121 +-
.../external/glm/include/glm/gtc/round.hpp | 148 +-
.../external/glm/include/glm/gtc/round.inl | 265 +-
.../glm/include/glm/gtc/type_aligned.hpp | 1309 +-
.../glm/include/glm/gtc/type_precision.hpp | 2059 +-
.../glm/include/glm/gtc/type_precision.inl | 3 +-
.../external/glm/include/glm/gtc/type_ptr.hpp | 139 +-
.../external/glm/include/glm/gtc/type_ptr.inl | 574 +-
samples/external/glm/include/glm/gtc/ulp.hpp | 143 +-
samples/external/glm/include/glm/gtc/ulp.inl | 396 +-
samples/external/glm/include/glm/gtc/vec1.hpp | 164 +-
.../include/glm/gtx/associated_min_max.hpp | 175 +-
.../include/glm/gtx/associated_min_max.inl | 203 +-
samples/external/glm/include/glm/gtx/bit.hpp | 43 +-
samples/external/glm/include/glm/gtx/bit.inl | 41 +-
.../glm/include/glm/gtx/closest_point.hpp | 38 +-
.../glm/include/glm/gtx/closest_point.inl | 33 +-
.../glm/include/glm/gtx/color_encoding.hpp | 54 +
.../glm/include/glm/gtx/color_encoding.inl | 45 +
.../glm/include/glm/gtx/color_space.hpp | 50 +-
.../glm/include/glm/gtx/color_space.inl | 82 +-
.../glm/include/glm/gtx/color_space_YCoCg.hpp | 36 +-
.../glm/include/glm/gtx/color_space_YCoCg.inl | 71 +-
.../external/glm/include/glm/gtx/common.hpp | 45 +-
.../external/glm/include/glm/gtx/common.inl | 81 +-
.../glm/include/glm/gtx/compatibility.hpp | 157 +-
.../glm/include/glm/gtx/compatibility.inl | 41 +-
.../glm/include/glm/gtx/component_wise.hpp | 48 +-
.../glm/include/glm/gtx/component_wise.inl | 79 +-
.../glm/include/glm/gtx/dual_quaternion.hpp | 168 +-
.../glm/include/glm/gtx/dual_quaternion.inl | 249 +-
.../external/glm/include/glm/gtx/easing.hpp | 219 +
.../external/glm/include/glm/gtx/easing.inl | 436 +
.../glm/include/glm/gtx/euler_angles.hpp | 326 +-
.../glm/include/glm/gtx/euler_angles.inl | 761 +-
.../external/glm/include/glm/gtx/extend.hpp | 18 +-
.../external/glm/include/glm/gtx/extend.inl | 39 +-
.../glm/include/glm/gtx/extended_min_max.hpp | 166 +-
.../glm/include/glm/gtx/extended_min_max.inl | 110 +-
.../glm/include/glm/gtx/exterior_product.hpp | 45 +
.../glm/include/glm/gtx/exterior_product.inl | 26 +
.../glm/include/glm/gtx/fast_exponential.hpp | 48 +-
.../glm/include/glm/gtx/fast_exponential.inl | 51 +-
.../glm/include/glm/gtx/fast_square_root.hpp | 50 +-
.../glm/include/glm/gtx/fast_square_root.inl | 42 +-
.../glm/include/glm/gtx/fast_trigonometry.hpp | 54 +-
.../glm/include/glm/gtx/fast_trigonometry.inl | 85 +-
.../glm/include/glm/gtx/float_notmalize.inl | 7 +-
.../glm/include/glm/gtx/functions.hpp | 56 +
.../glm/include/glm/gtx/functions.inl | 30 +
.../glm/include/glm/gtx/gradient_paint.hpp | 31 +-
.../glm/include/glm/gtx/gradient_paint.inl | 25 +-
.../glm/gtx/handed_coordinate_space.hpp | 28 +-
.../glm/gtx/handed_coordinate_space.inl | 17 +-
samples/external/glm/include/glm/gtx/hash.hpp | 112 +-
samples/external/glm/include/glm/gtx/hash.inl | 83 +-
.../external/glm/include/glm/gtx/integer.hpp | 24 +-
.../external/glm/include/glm/gtx/integer.inl | 45 +-
.../glm/include/glm/gtx/intersect.hpp | 55 +-
.../glm/include/glm/gtx/intersect.inl | 142 +-
samples/external/glm/include/glm/gtx/io.hpp | 100 +-
samples/external/glm/include/glm/gtx/io.inl | 125 +-
.../external/glm/include/glm/gtx/log_base.hpp | 26 +-
.../external/glm/include/glm/gtx/log_base.inl | 10 +-
.../include/glm/gtx/matrix_cross_product.hpp | 26 +-
.../include/glm/gtx/matrix_cross_product.inl | 17 +-
.../glm/include/glm/gtx/matrix_decompose.hpp | 20 +-
.../glm/include/glm/gtx/matrix_decompose.inl | 122 +-
.../include/glm/gtx/matrix_factorisation.hpp | 69 +
.../include/glm/gtx/matrix_factorisation.inl | 84 +
.../include/glm/gtx/matrix_interpolation.hpp | 39 +-
.../include/glm/gtx/matrix_interpolation.inl | 172 +-
.../include/glm/gtx/matrix_major_storage.hpp | 118 +-
.../include/glm/gtx/matrix_major_storage.inl | 121 +-
.../glm/include/glm/gtx/matrix_operation.hpp | 81 +-
.../glm/include/glm/gtx/matrix_operation.inl | 138 +-
.../glm/include/glm/gtx/matrix_query.hpp | 50 +-
.../glm/include/glm/gtx/matrix_query.inl | 51 +-
.../include/glm/gtx/matrix_transform_2d.hpp | 61 +-
.../include/glm/gtx/matrix_transform_2d.inl | 47 +-
.../glm/include/glm/gtx/mixed_product.hpp | 20 +-
.../glm/include/glm/gtx/mixed_product.inl | 9 +-
samples/external/glm/include/glm/gtx/norm.hpp | 82 +-
samples/external/glm/include/glm/gtx/norm.inl | 83 +-
.../external/glm/include/glm/gtx/normal.hpp | 24 +-
.../external/glm/include/glm/gtx/normal.inl | 11 +-
.../glm/include/glm/gtx/normalize_dot.hpp | 20 +-
.../glm/include/glm/gtx/normalize_dot.inl | 9 +-
.../glm/include/glm/gtx/number_precision.hpp | 30 +-
.../glm/include/glm/gtx/number_precision.inl | 1 -
.../glm/include/glm/gtx/optimum_pow.hpp | 24 +-
.../glm/include/glm/gtx/optimum_pow.inl | 13 +-
.../glm/include/glm/gtx/orthonormalize.hpp | 22 +-
.../glm/include/glm/gtx/orthonormalize.inl | 11 +-
samples/external/glm/include/glm/gtx/pca.hpp | 111 +
samples/external/glm/include/glm/gtx/pca.inl | 343 +
.../glm/include/glm/gtx/perpendicular.hpp | 18 +-
.../glm/include/glm/gtx/perpendicular.inl | 9 +-
.../glm/include/glm/gtx/polar_coordinates.hpp | 26 +-
.../glm/include/glm/gtx/polar_coordinates.inl | 19 +-
.../glm/include/glm/gtx/projection.hpp | 19 +-
.../glm/include/glm/gtx/projection.inl | 5 +-
.../glm/include/glm/gtx/quaternion.hpp | 171 +-
.../glm/include/glm/gtx/quaternion.inl | 151 +-
.../external/glm/include/glm/gtx/range.hpp | 65 +-
.../external/glm/include/glm/gtx/raw_data.hpp | 22 +-
.../external/glm/include/glm/gtx/raw_data.inl | 2 +-
.../glm/gtx/rotate_normalized_axis.hpp | 54 +-
.../glm/gtx/rotate_normalized_axis.inl | 35 +-
.../glm/include/glm/gtx/rotate_vector.hpp | 136 +-
.../glm/include/glm/gtx/rotate_vector.inl | 125 +-
.../include/glm/gtx/scalar_multiplication.hpp | 28 +-
.../glm/include/glm/gtx/scalar_relational.hpp | 12 +-
.../glm/include/glm/gtx/scalar_relational.inl | 47 +-
.../external/glm/include/glm/gtx/spline.hpp | 54 +-
.../external/glm/include/glm/gtx/spline.inl | 39 +-
.../glm/include/glm/gtx/std_based_type.hpp | 29 +-
.../glm/include/glm/gtx/std_based_type.inl | 1 -
.../glm/include/glm/gtx/string_cast.hpp | 23 +-
.../glm/include/glm/gtx/string_cast.inl | 296 +-
.../external/glm/include/glm/gtx/texture.hpp | 46 +
.../external/glm/include/glm/gtx/texture.inl | 17 +
.../glm/include/glm/gtx/transform.hpp | 34 +-
.../glm/include/glm/gtx/transform.inl | 19 +-
.../glm/include/glm/gtx/transform2.hpp | 86 +-
.../glm/include/glm/gtx/transform2.inl | 77 +-
.../glm/include/glm/gtx/type_aligned.hpp | 502 +-
.../glm/include/glm/gtx/type_aligned.inl | 1 -
.../glm/include/glm/gtx/type_trait.hpp | 219 +-
.../glm/include/glm/gtx/type_trait.inl | 61 +
.../glm/include/glm/gtx/vec_swizzle.hpp | 2782 ++
.../glm/include/glm/gtx/vector_angle.hpp | 31 +-
.../glm/include/glm/gtx/vector_angle.inl | 37 +-
.../glm/include/glm/gtx/vector_query.hpp | 40 +-
.../glm/include/glm/gtx/vector_query.inl | 135 +-
samples/external/glm/include/glm/gtx/wrap.hpp | 34 +-
samples/external/glm/include/glm/gtx/wrap.inl | 52 -
samples/external/glm/include/glm/integer.hpp | 208 +-
samples/external/glm/include/glm/mat2x2.hpp | 51 +-
samples/external/glm/include/glm/mat2x3.hpp | 31 +-
samples/external/glm/include/glm/mat2x4.hpp | 30 +-
samples/external/glm/include/glm/mat3x2.hpp | 30 +-
samples/external/glm/include/glm/mat3x3.hpp | 52 +-
samples/external/glm/include/glm/mat3x4.hpp | 31 +-
samples/external/glm/include/glm/mat4x2.hpp | 30 +-
samples/external/glm/include/glm/mat4x3.hpp | 31 +-
samples/external/glm/include/glm/mat4x4.hpp | 51 +-
samples/external/glm/include/glm/matrix.hpp | 157 +-
samples/external/glm/include/glm/packing.hpp | 169 +-
.../external/glm/include/glm/simd/common.h | 40 +-
.../glm/include/glm/simd/exponential.h | 4 +-
.../external/glm/include/glm/simd/geometric.h | 2 +-
.../external/glm/include/glm/simd/integer.h | 4 +-
.../external/glm/include/glm/simd/matrix.h | 24 +-
samples/external/glm/include/glm/simd/neon.h | 155 +
.../external/glm/include/glm/simd/platform.h | 403 +-
.../glm/include/glm/trigonometric.hpp | 206 +-
samples/external/glm/include/glm/vec2.hpp | 12 +-
samples/external/glm/include/glm/vec3.hpp | 12 +-
samples/external/glm/include/glm/vec4.hpp | 11 +-
.../glm/include/glm/vector_relational.hpp | 117 +-
samples/external/nlohmann/json/LICENSE.MIT | 21 +
samples/external/nlohmann/json/README.md | 1437 +
.../json/single_include/nlohmann/json.hpp | 22875 ++++++++++++++++
samples/utils/RenderingUtils.cpp | 2 +-
samples/utils/nvCVOpenCV.h | 6 +-
version.h | 16 +-
691 files changed, 181019 insertions(+), 22147 deletions(-)
create mode 100644 nvar/src/VPIProxy.cpp
create mode 100644 resources/ar_006.png
create mode 100644 resources/ar_007.png
create mode 100644 samples/ExpressionApp/BackEndOpenGL/FaceIO.cpp
create mode 100644 samples/ExpressionApp/BackEndOpenGL/FaceIO.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLMaterial.cpp
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLMaterial.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLMesh.cpp
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLMesh.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLShaders.cpp
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLShaders.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/GLSpectrum.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/OpenGLMeshRenderer.cpp
create mode 100644 samples/ExpressionApp/BackEndOpenGL/OpenGLMeshRenderer.h
create mode 100644 samples/ExpressionApp/BackEndOpenGL/SimpleFaceModel.h
create mode 100644 samples/ExpressionApp/CMakeLists.txt
create mode 100644 samples/ExpressionApp/DirectoryIterator.cpp
create mode 100644 samples/ExpressionApp/DirectoryIterator.h
create mode 100644 samples/ExpressionApp/ExpressionApp.cpp
create mode 100644 samples/ExpressionApp/ExpressionApp.exe
create mode 100644 samples/ExpressionApp/ExpressionAppUI.cpp
create mode 100644 samples/ExpressionApp/ExpressionAppUI.h
create mode 100644 samples/ExpressionApp/MeshRenderer.cpp
create mode 100644 samples/ExpressionApp/MeshRenderer.h
create mode 100644 samples/ExpressionApp/Readme.txt
create mode 100644 samples/ExpressionApp/nvARProxy.cpp
create mode 100644 samples/ExpressionApp/nvCVImageProxy.cpp
create mode 100644 samples/ExpressionApp/run.bat
create mode 100644 samples/GazeRedirect/CMakeLists.txt
create mode 100644 samples/GazeRedirect/GazeEngine.cpp
create mode 100644 samples/GazeRedirect/GazeEngine.h
create mode 100644 samples/GazeRedirect/GazeRedirect.cpp
create mode 100644 samples/GazeRedirect/GazeRedirect.exe
create mode 100644 samples/GazeRedirect/Readme.txt
create mode 100644 samples/GazeRedirect/run.bat
create mode 100644 samples/external/GLAD/include/KHR/khrplatform.h
create mode 100644 samples/external/GLAD/include/glad/glad.h
create mode 100644 samples/external/GLAD/lib/cmake/glad/gladConfig.cmake
create mode 100644 samples/external/GLAD/lib/cmake/glad/gladConfigVersion.cmake
create mode 100644 samples/external/GLAD/lib/cmake/glad/gladTargets-debug.cmake
create mode 100644 samples/external/GLAD/lib/cmake/glad/gladTargets-release.cmake
create mode 100644 samples/external/GLAD/lib/cmake/glad/gladTargets.cmake
create mode 100644 samples/external/GLAD/lib/glad.lib
create mode 100644 samples/external/GLFW/include/GLFW/glfw3.h
create mode 100644 samples/external/GLFW/include/GLFW/glfw3native.h
create mode 100644 samples/external/GLFW/lib/cmake/glfw3/glfw3Config.cmake
create mode 100644 samples/external/GLFW/lib/cmake/glfw3/glfw3ConfigVersion.cmake
create mode 100644 samples/external/GLFW/lib/cmake/glfw3/glfw3Targets-debug.cmake
create mode 100644 samples/external/GLFW/lib/cmake/glfw3/glfw3Targets-release.cmake
create mode 100644 samples/external/GLFW/lib/cmake/glfw3/glfw3Targets.cmake
create mode 100644 samples/external/GLFW/lib/glfw3.lib
create mode 100644 samples/external/GLFW/lib/pkgconfig/glfw3.pc
create mode 100644 samples/external/Imgui/imgui-docking/LICENSE.txt
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_allegro5.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_allegro5.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_android.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_android.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx10.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx10.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx11.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx11.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx12.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx12.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx9.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_dx9.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_glfw.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_glfw.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_glut.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_glut.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_marmalade.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_marmalade.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_metal.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_metal.mm
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_opengl2.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_opengl2.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_opengl3.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_opengl3.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_opengl3_loader.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_osx.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_osx.mm
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_sdl.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_sdl.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_sdlrenderer.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_sdlrenderer.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_vulkan.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_vulkan.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_wgpu.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_wgpu.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_win32.cpp
create mode 100644 samples/external/Imgui/imgui-docking/backends/imgui_impl_win32.h
create mode 100644 samples/external/Imgui/imgui-docking/backends/vulkan/generate_spv.sh
create mode 100644 samples/external/Imgui/imgui-docking/backends/vulkan/glsl_shader.frag
create mode 100644 samples/external/Imgui/imgui-docking/backends/vulkan/glsl_shader.vert
create mode 100644 samples/external/Imgui/imgui-docking/docs/BACKENDS.md
create mode 100644 samples/external/Imgui/imgui-docking/docs/CHANGELOG.txt
create mode 100644 samples/external/Imgui/imgui-docking/docs/EXAMPLES.md
create mode 100644 samples/external/Imgui/imgui-docking/docs/FAQ.md
create mode 100644 samples/external/Imgui/imgui-docking/docs/FONTS.md
create mode 100644 samples/external/Imgui/imgui-docking/docs/README.md
create mode 100644 samples/external/Imgui/imgui-docking/docs/TODO.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/README.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_allegro5/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_allegro5/example_allegro5.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_allegro5/example_allegro5.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_allegro5/imconfig_allegro5.h
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_allegro5/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/CMakeLists.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/android/app/build.gradle
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/android/app/src/main/AndroidManifest.xml
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/android/app/src/main/java/MainActivity.kt
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/android/build.gradle
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/android/settings.gradle
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_android_opengl3/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/example_apple_metal.xcodeproj/project.pbxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/iOS/Info-iOS.plist
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/iOS/LaunchScreen.storyboard
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/macOS/Info-macOS.plist
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/macOS/MainMenu.storyboard
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_metal/main.mm
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_opengl2/example_apple_opengl2.xcodeproj/project.pbxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_apple_opengl2/main.mm
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_opengl3/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_opengl3/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_opengl3/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_opengl3/shell_minimal.html
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_wgpu/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_wgpu/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_wgpu/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_emscripten_wgpu/web/index.html
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_metal/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_metal/main.mm
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl2/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl2/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl2/example_glfw_opengl2.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl2/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl3/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl3/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl3/example_glfw_opengl3.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_opengl3/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/CMakeLists.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/build_win64.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/example_glfw_vulkan.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glfw_vulkan/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glut_opengl2/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glut_opengl2/example_glut_opengl2.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glut_opengl2/example_glut_opengl2.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_glut_opengl2/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_marmalade/data/app.icf
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_marmalade/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_marmalade/marmalade_example.mkb
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_null/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_null/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_null/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_directx11/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_directx11/example_sdl_directx11.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_directx11/example_sdl_directx11.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_directx11/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_metal/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_metal/main.mm
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/example_sdl_opengl2.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl2/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/example_sdl_opengl3.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_opengl3/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/Makefile
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/README.md
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/example_sdl_sdlrenderer.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/example_sdl_sdlrenderer.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_sdlrenderer/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_vulkan/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_vulkan/example_sdl_vulkan.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_sdl_vulkan/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx10/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx10/example_win32_directx10.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx10/example_win32_directx10.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx10/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx11/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx11/example_win32_directx11.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx11/example_win32_directx11.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx11/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx12/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx12/example_win32_directx12.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx12/example_win32_directx12.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx12/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx9/build_win32.bat
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx9/example_win32_directx9.vcxproj
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx9/example_win32_directx9.vcxproj.filters
create mode 100644 samples/external/Imgui/imgui-docking/examples/example_win32_directx9/main.cpp
create mode 100644 samples/external/Imgui/imgui-docking/examples/imgui_examples.sln
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/glfw/COPYING.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/glfw/include/GLFW/glfw3.h
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/glfw/include/GLFW/glfw3native.h
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/glfw/lib-vc2010-32/glfw3.lib
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/glfw/lib-vc2010-64/glfw3.lib
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/usynergy/README.txt
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/usynergy/uSynergy.c
create mode 100644 samples/external/Imgui/imgui-docking/examples/libs/usynergy/uSynergy.h
create mode 100644 samples/external/Imgui/imgui-docking/imconfig.h
create mode 100644 samples/external/Imgui/imgui-docking/imgui.cpp
create mode 100644 samples/external/Imgui/imgui-docking/imgui.h
create mode 100644 samples/external/Imgui/imgui-docking/imgui_demo.cpp
create mode 100644 samples/external/Imgui/imgui-docking/imgui_draw.cpp
create mode 100644 samples/external/Imgui/imgui-docking/imgui_internal.h
create mode 100644 samples/external/Imgui/imgui-docking/imgui_tables.cpp
create mode 100644 samples/external/Imgui/imgui-docking/imgui_widgets.cpp
create mode 100644 samples/external/Imgui/imgui-docking/imstb_rectpack.h
create mode 100644 samples/external/Imgui/imgui-docking/imstb_textedit.h
create mode 100644 samples/external/Imgui/imgui-docking/imstb_truetype.h
create mode 100644 samples/external/Imgui/imgui-docking/misc/README.txt
create mode 100644 samples/external/Imgui/imgui-docking/misc/cpp/README.txt
create mode 100644 samples/external/Imgui/imgui-docking/misc/cpp/imgui_stdlib.cpp
create mode 100644 samples/external/Imgui/imgui-docking/misc/cpp/imgui_stdlib.h
create mode 100644 samples/external/Imgui/imgui-docking/misc/debuggers/README.txt
create mode 100644 samples/external/Imgui/imgui-docking/misc/debuggers/imgui.gdb
create mode 100644 samples/external/Imgui/imgui-docking/misc/debuggers/imgui.natstepfilter
create mode 100644 samples/external/Imgui/imgui-docking/misc/debuggers/imgui.natvis
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/Cousine-Regular.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/DroidSans.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/Karla-Regular.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/ProggyClean.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/ProggyTiny.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/Roboto-Medium.ttf
create mode 100644 samples/external/Imgui/imgui-docking/misc/fonts/binary_to_compressed_c.cpp
create mode 100644 samples/external/Imgui/imgui-docking/misc/freetype/README.md
create mode 100644 samples/external/Imgui/imgui-docking/misc/freetype/imgui_freetype.cpp
create mode 100644 samples/external/Imgui/imgui-docking/misc/freetype/imgui_freetype.h
create mode 100644 samples/external/Imgui/imgui-docking/misc/single_file/imgui_single_file.h
create mode 100644 samples/external/glm/include/glm/detail/compute_common.hpp
create mode 100644 samples/external/glm/include/glm/detail/compute_vector_relational.hpp
create mode 100644 samples/external/glm/include/glm/detail/qualifier.hpp
create mode 100644 samples/external/glm/include/glm/detail/type_quat.hpp
create mode 100644 samples/external/glm/include/glm/detail/type_quat.inl
create mode 100644 samples/external/glm/include/glm/detail/type_quat_simd.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_clip_space.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_clip_space.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_common.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_common.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double2x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double3x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_double4x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float2x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float3x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_float4x4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int2x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int3x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_int4x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_integer.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_integer.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_projection.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_projection.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_relational.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_relational.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_transform.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_transform.inl
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint2x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint3x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x2.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x3.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x4.hpp
create mode 100644 samples/external/glm/include/glm/ext/matrix_uint4x4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_common.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_common.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_common_simd.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_double.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_double_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_exponential.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_exponential.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_float.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_float_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_geometric.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_geometric.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_relational.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_relational.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_transform.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_transform.inl
create mode 100644 samples/external/glm/include/glm/ext/quaternion_trigonometric.hpp
create mode 100644 samples/external/glm/include/glm/ext/quaternion_trigonometric.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_common.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_common.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_constants.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_constants.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_int_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_integer.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_integer.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_packing.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_packing.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_reciprocal.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_reciprocal.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_relational.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_relational.inl
create mode 100644 samples/external/glm/include/glm/ext/scalar_uint_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_ulp.hpp
create mode 100644 samples/external/glm/include/glm/ext/scalar_ulp.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_bool1.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool1_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool2.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool3.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool4.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_bool4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_common.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_common.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_double1.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double1_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double2.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double3.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double4.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_double4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float1.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float1_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float2.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float2_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float3.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float3_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float4.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_float4_precision.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int1.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int1_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int2.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int3.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int4.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_int4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_integer.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_integer.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_packing.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_packing.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_reciprocal.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_reciprocal.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_relational.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_relational.inl
create mode 100644 samples/external/glm/include/glm/ext/vector_uint1.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint1_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint2.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint2_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint3.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint3_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint4.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_uint4_sized.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_ulp.hpp
create mode 100644 samples/external/glm/include/glm/ext/vector_ulp.inl
create mode 100644 samples/external/glm/include/glm/gtx/color_encoding.hpp
create mode 100644 samples/external/glm/include/glm/gtx/color_encoding.inl
create mode 100644 samples/external/glm/include/glm/gtx/easing.hpp
create mode 100644 samples/external/glm/include/glm/gtx/easing.inl
create mode 100644 samples/external/glm/include/glm/gtx/exterior_product.hpp
create mode 100644 samples/external/glm/include/glm/gtx/exterior_product.inl
create mode 100644 samples/external/glm/include/glm/gtx/functions.hpp
create mode 100644 samples/external/glm/include/glm/gtx/functions.inl
create mode 100644 samples/external/glm/include/glm/gtx/matrix_factorisation.hpp
create mode 100644 samples/external/glm/include/glm/gtx/matrix_factorisation.inl
create mode 100644 samples/external/glm/include/glm/gtx/pca.hpp
create mode 100644 samples/external/glm/include/glm/gtx/pca.inl
create mode 100644 samples/external/glm/include/glm/gtx/texture.hpp
create mode 100644 samples/external/glm/include/glm/gtx/texture.inl
create mode 100644 samples/external/glm/include/glm/gtx/vec_swizzle.hpp
create mode 100644 samples/external/glm/include/glm/simd/neon.h
create mode 100644 samples/external/nlohmann/json/LICENSE.MIT
create mode 100644 samples/external/nlohmann/json/README.md
create mode 100644 samples/external/nlohmann/json/single_include/nlohmann/json.hpp
diff --git a/CHANGELOG b/CHANGELOG
index 5aea672..48619ae 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,16 @@
-Changelog (v0.7.6.2)
- - 3D Body Pose Keypoint Tracking
- - Quality improvement in accuracy and stability
- - Property NvAR_Parameter_Config(NVAR_MODE) is now NvAR_Parameter_Config(Mode)
- - Migrated to TensorRT 8.0.1.6
- - Migrated to CUDA 11.3u1
+Changelog (v0.8.1.0)
+--------------------
+ - NEW! Eye Contact feature: an AI algorithm to help users keep their gaze engaged in video communication. The feature jointly estimates a user’s gaze direction and redirects it to frontal in video sequences.
+ - NEW! Face Expression Estimation (Beta) feature estimates facial expression coefficients From the video or the provided facial landmarks. ExpressionApp is added to demonstrate the new Face Expressions feature.
+ - NEW! Default face model for the Face 3D mesh and tracking feature, face_model2.nvf, now ships with the SDK. The old SFM based face_model0.nvf is no longer required.
+ - 3D Body Pose Estimation:
+ - NEW! Added the support for Multi Person Tracking. This feature is supported by the Windows SDK only.
+ - FocalLength is now a NvAR_Parameter_Input. Users can now change FocalLength at every NvAR_Run() without having to call NvAR_Load().
+ - The reference pose returned by the feature has been updated
+ - Facial landmark estimation
+ - NEW! There are now 2 modalities for facial landmark tracking: {0,1} -> {performance, quality}. Make sure to choose the preferred mode for your application. The default for face mesh fitting and expression estimation are 1, and the others are 0.
+ - Head Pose output from the NvAR_Feature_LandmarkDetection feature is now in the OpenGL convention. Changed from X-back(towards the camera), Y-right, Z-down to X-right, Y-up, Z-back(towards the camera).
+ - The sample apps now show the headpose in the OpenGL convention. The color coding of the axes is Red - X , Green - Y, Blue - Z
+ - NvCVImage_Transfer() now sets alpha to 255 or 1.0f when doing RGB -> RGBA. NvCVImage_CompositeRect() has a premultiplied alpha mode added
+ - Migrated to TensorRT 8.4.2.2
+ - Migrated to CUDA 11.6u1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 154af54..f93adab 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -11,19 +11,95 @@ set(CMAKE_CONFIGURATION_TYPES "Release")
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
-set(CMAKE_CXX_STANDARD 14)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_CXX_EXTENSIONS OFF)
+if(MSVC)
+ set(CMAKE_CXX_STANDARD 14)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
-set(SDK_INCLUDES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/nvar/include)
+ set(SDK_INCLUDES_PATH ${CMAKE_CURRENT_SOURCE_DIR}/nvar/include)
-# Add target for nvARPose
-add_library(nvARPose INTERFACE)
-target_include_directories(nvARPose INTERFACE ${SDK_INCLUDES_PATH})
+ # Add target for nvARPose
+ add_library(nvARPose INTERFACE)
+ target_include_directories(nvARPose INTERFACE ${SDK_INCLUDES_PATH})
-# Add target for NVCVImage
-add_library(NVCVImage INTERFACE)
-target_include_directories(NVCVImage INTERFACE ${SDK_INCLUDES_PATH})
+ # Add target for NVCVImage
+ add_library(NVCVImage INTERFACE)
+ target_include_directories(NVCVImage INTERFACE ${SDK_INCLUDES_PATH})
+
+else()
+ set(CMAKE_CXX_STANDARD 14)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_EXTENSIONS OFF)
+
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
+
+ # Add target for ARSDK
+ add_library(nvARPose INTERFACE)
+
+ # found in different locations depending on type of package
+ find_path(ARSDK_INCLUDES
+ NAMES nvAR.h
+ PATHS
+ /usr/local/ARSDK/include
+ /usr/include/x86_64-linux-gnu
+ /usr/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/nvar/include
+ REQUIRED
+ )
+
+ target_include_directories(nvARPose INTERFACE ${ARSDK_INCLUDES})
+
+ find_library(ARSDK_LIB
+ NAMES libnvARPose.so
+ PATHS
+ /usr/local/ARSDK/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib64
+ /usr/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/bin
+ REQUIRED
+ NO_DEFAULT_PATH)
+
+ target_link_libraries(nvARPose INTERFACE "${ARSDK_LIB}")
+
+ message(STATUS "ARSDK_LIB: ${ARSDK_LIB}")
+
+
+ # Add target for NVCVImage
+ add_library(NVCVImage INTERFACE)
+
+ # found in different locations depending on type of package
+ find_path(NVCVImage_INCLUDES
+ NAMES nvCVImage.h
+ PATHS
+ /usr/local/ARSDK/include
+ /usr/include/x86_64-linux-gnu
+ /usr/include
+ ${CMAKE_CURRENT_SOURCE_DIR}/nvar/include
+ REQUIRED
+ )
+
+ target_include_directories(NVCVImage INTERFACE ${NVCVImage_INCLUDES})
+
+
+ find_library(NVCVImage_LIB
+ NAMES libNVCVImage.so
+ PATHS
+ /usr/local/ARSDK/lib
+ /usr/lib/x86_64-linux-gnu
+ /usr/lib64
+ /usr/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/bin
+ REQUIRED
+ NO_DEFAULT_PATH)
+
+ target_link_libraries(NVCVImage INTERFACE "${NVCVImage_LIB}")
+
+ message(STATUS "NVCVImage_LIB: ${NVCVImage_LIB}")
+ message(STATUS "NVCVImage_INCLUDES_PATH: ${NVCVImage_INCLUDES}")
+
+
+endif()
add_definitions(-DNOMINMAX -DWIN32_LEAN_AND_MEAN)
diff --git a/LICENSE b/LICENSE
index 58871f4..93bd1cc 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
The MIT License (MIT)
-Copyright (c) 2021 NVIDIA Corporation
+Copyright (c) 2020 NVIDIA Corporation
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
diff --git a/README.MD b/README.MD
index 141c330..58b23bd 100644
--- a/README.MD
+++ b/README.MD
@@ -1,29 +1,37 @@
# README
## NVIDIA MAXINE AR SDK: API Source Code and Sample Applications
-NVIDIA MAXINE AR SDK enables real-time modeling and tracking of human faces from video. The SDK is powered by NVIDIA graphics processing units (GPUs) with Tensor Cores, and as a result, the algorithm throughput is greatly accelerated, and latency is reduced.
+NVIDIA MAXINE AR SDK offers AI-based, real-time 3D face tracking and modeling, as well as body pose estimation based on a standard web camera feed. Developers can create unique AR effects such as overlaying 3D content on a face, driving 3D characters and virtual interactions in real time. The SDK is powered by NVIDIA graphics processing units (GPUs) with Tensor Cores, and as a result, the algorithm throughput is greatly accelerated, and latency is reduced.
The SDK has the following features:
-- **Face detection and tracking**, which detects, localizes, and tracks human faces in images or videos by using bounding boxes.
-- **Facial landmark detection and tracking**, which predicts and tracks the pixel locations of human facial landmark points and head poses in images or videos. It can predict 68 and 126 landmark points. The 68 detected facial landmarks follow the _Multi-PIE 68 point mark-ups_ information in [facial point annotations](https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/). The 126 landmark points detector can predict more points on the cheeks, the eyes, and on laugh lines.
-- **Face 3D mesh and tracking**, which reconstructs and tracks a 3D human face and its head pose from the provided facial landmarks.
-- **3D Body Pose and tracking**, which predicts and tracks the 3D human pose from images or videos. It predicts 34 keypoints of body pose in 2D and 3D.
+- **Face tracking**, which detects, localizes, and tracks human faces in images or videos by using bounding boxes.
+- **Face landmark tracking**, which predicts and tracks the pixel locations of human facial landmark points using 68 or 126 landmark points. The 68 detected facial landmarks follow the Multi-PIE 68 point mark-ups information in [facial point annotations](https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/). The 126 landmark points detector can predict more points on the cheeks, the eyes, and on laugh lines. Additionally, it tracks head pose and facial deformation due to head movement and expression in three degrees of freedom in real time.
+- **Face mesh**, which reconstructs and tracks a human face via a 3D mesh, as well as its head pose, from the provided facial landmarks.
+- **Body Pose Estimation**, which predicts and tracks 34 key points of the human body, with joint angles, in 2D and 3D. It also supports multi-person tracking.
+- **Eye contact**, which simulates eye contact by estimating and aligning gaze with the camera to enhance engagement in video communication.
+- **Face Expression Estimation**, which estimates face expression (blendshape) coefficients from the provided facial landmarks.
-
-
+
+
-
-
+
+
-
+
+
+
+
+
-The SDK provides two sample applications that demonstrate the features listed above in real time by using a webcam or offline videos.
-- **FaceTrack App** which demonstrates the face tracking, landmark tracking and 3D mesh tracking features.
-- **BodyTrack App** which demonstrates the 3D Body Pose tracking feature.
+The SDK provides four sample applications that demonstrate the features listed above in real time by using a webcam or offline videos.
+- **FaceTrack App** which demonstrates the face tracking, landmark tracking and face mesh tracking features.
+- **BodyTrack App** which demonstrates the Body Pose estimation feature.
+- **GazeRedirect App** which demonstrates the Eye Contact feature.
+- **ExpressionApp** which demonstrates the Face Expression Estimation feature.
NVIDIA MAXINE AR SDK is distributed in the following parts:
@@ -33,14 +41,12 @@ NVIDIA MAXINE AR SDK is distributed in the following parts:
Please refer to [SDK System guide](https://docs.nvidia.com/deeplearning/maxine/ar-sdk-system-guide/index.html) for configuring and integrating the SDK, compiling and running the sample applications. Please visit the [NVIDIA MAXINE AR SDK](https://developer.nvidia.com/maxine-getting-started) webpage for more information about the SDK.
## System requirements
-The SDK is supported on NVIDIA GPUs that are based on the NVIDIA® Turing™ or Ampere™ architecture and have Tensor Cores.
+The SDK is supported on NVIDIA GPUs that are based on the NVIDIA® Turing™, Ampere™ or Ada™ architecture and have Tensor Cores.
* Windows OS supported: 64-bit Windows 10 or later
* Microsoft Visual Studio: 2017 (MSVC15.0) or later
* CMake: v3.12 or later
-* NVIDIA Graphics Driver for Windows: 465.89 or later
-* NVIDIA CUDA Toolkit: 11.3.1
-* NVIDIA TensorRT: 8.0.1.6
+* NVIDIA Graphics Driver for Windows: 511.65 or later
## NVIDIA MAXINE Branding Guidelines
If you integrate an NVIDIA MAXINE SDK within your product, please follow the required branding guidelines that are available [here](
@@ -64,7 +70,7 @@ The open source repository includes the source code to build the sample applicat
* To complete configuring the Visual Studio solution file, click Finish.
* To generate the Visual Studio Solution file, click Generate.
* Verify that the build folder contains the NvAR_SDK.sln file.
-3. Use Visual Studio to generate the FaceTrack.exe or BodyTrack.exe file from the NvAR_SDK.sln file.
+3. Use Visual Studio to generate the FaceTrack.exe, BodyTrack.exe, GazeRedirect.exe or ExpressionApp.exe file from the NvAR_SDK.sln file.
* In CMake, to open Visual Studio, click Open Project.
* In Visual Studio, select Build > Build Solution.
diff --git a/nvar/include/nvAR_defs.h b/nvar/include/nvAR_defs.h
index 769e9be..5d8b169 100644
--- a/nvar/include/nvAR_defs.h
+++ b/nvar/include/nvAR_defs.h
@@ -38,6 +38,7 @@
#define NvAR_API
#endif // OS dependencies
+// TODO: Change the representation to x,y,z instead of array
typedef struct NvAR_Vector3f
{
float vec[3];
@@ -57,12 +58,24 @@ typedef struct NvAR_BBoxes {
uint8_t max_boxes;
} NvAR_BBoxes;
+typedef struct NvAR_TrackingBBox {
+ NvAR_Rect bbox;
+ uint16_t tracking_id;
+} NvAR_TrackingBBox;
+
+typedef struct NvAR_TrackingBBoxes {
+ NvAR_TrackingBBox *boxes;
+ uint8_t num_boxes;
+ uint8_t max_boxes;
+} NvAR_TrackingBBoxes;
+
typedef struct NvAR_FaceMesh {
NvAR_Vector3f *vertices; ///< Mesh 3D vertex positions.
size_t num_vertices;
- NvAR_Vector3u16 *tvi; ///< Mesh triangle's vertex indices
- size_t num_tri_idx;
+ NvAR_Vector3u16 *tvi; ///< Mesh triangle's vertex indices
+ size_t num_triangles; ///< The number of triangles (previously num_tri_idx)
} NvAR_FaceMesh;
+#define num_tri_idx num_triangles ///< num_tri_idx is confusing and deprecated
typedef struct NvAR_Frustum {
float left;
@@ -95,124 +108,222 @@ typedef struct NvAR_RenderingParams {
// Parameters provided by client application
typedef const char* NvAR_FeatureID;
-#define NvAR_Feature_FaceBoxDetection "FaceBoxDetection"
-#define NvAR_Feature_FaceDetection "FaceDetection" // deprecated in favor of FaceBox
-#define NvAR_Feature_LandmarkDetection "LandmarkDetection"
-#define NvAR_Feature_Face3DReconstruction "Face3DReconstruction"
-#define NvAR_Feature_BodyDetection "BodyDetection"
-#define NvAR_Feature_BodyPoseEstimation "BodyPoseEstimation"
+
+#define NvAR_Feature_FaceBoxDetection "FaceBoxDetection" //
+#define NvAR_Feature_FaceDetection "FaceDetection" // // deprecated in favor of FaceBox
+#define NvAR_Feature_LandmarkDetection "LandmarkDetection" //
+#define NvAR_Feature_Face3DReconstruction "Face3DReconstruction" //
+#define NvAR_Feature_BodyDetection "BodyDetection" //
+#define NvAR_Feature_BodyPoseEstimation "BodyPoseEstimation" //
+#define NvAR_Feature_GazeRedirection "GazeRedirection" //
+#define NvAR_Feature_FaceExpressions "FaceExpressions" //
+#define NvAR_Feature_LivePortrait "LivePortrait" //
+#define NvAR_Feature_FrameSelection "FrameSelection" // !FrameSelection!
#define NvAR_Parameter_Input(Name) "NvAR_Parameter_Input_" #Name
#define NvAR_Parameter_Output(Name) "NvAR_Parameter_Output_" #Name
#define NvAR_Parameter_Config(Name) "NvAR_Parameter_Config_" #Name
#define NvAR_Parameter_InOut(Name) "NvAR_Parameter_InOut_" #Name
+#define NVAR_TEMPORAL_FILTER_FACE_BOX (1 << 0) // 0x001
+#define NVAR_TEMPORAL_FILTER_FACIAL_LANDMARKS (1 << 1) // 0x002
+#define NVAR_TEMPORAL_FILTER_FACE_ROTATIONAL_POSE (1 << 2) // 0x004
+#define NVAR_TEMPORAL_FILTER_FACIAL_EXPRESSIONS (1 << 4) // 0x010
+#define NVAR_TEMPORAL_FILTER_FACIAL_GAZE (1 << 5) // 0x020
+#define NVAR_TEMPORAL_FILTER_ENHANCE_EXPRESSIONS (1 << 8) // 0x100
+
/*
Parameters supported by each NvAR_FeatureID
-*******NvAR_Feature_FaceDetection*******
-Config:
-NvAR_Parameter_Config(FeatureDescription)
-NvAR_Parameter_Config(CUDAStream)
-NvAR_Parameter_Config(TRTModelDir)
-NvAR_Parameter_Config(Temporal)
+*******NvAR_Feature_FaceDetection******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(TRTModelDir) //
+NvAR_Parameter_Config(Temporal) //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+ //
+Output: //
+NvAR_Parameter_Output(BoundingBoxes) //
+NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL //
+ //
+*******NvAR_Feature_LandmarkDetection******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(ModelDir) //
+NvAR_Parameter_Config(BatchSize) //
+NvAR_Parameter_Config(Landmarks_Size) //
+NvAR_Parameter_Config(LandmarksConfidence_Size) //
+NvAR_Parameter_Config(Temporal) //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+NvAR_Parameter_Input(BoundingBoxes) - OPTIONAL //
+ //
+Output: //
+NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(Landmarks) //
+NvAR_Parameter_Output(Pose) - OPTIONAL //
+NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL //
+ //
+*******NvAR_Feature_Face3DReconstruction******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(ModelDir) //
+NvAR_Parameter_Config(Landmarks_Size) //
+NvAR_Parameter_Config(CUDAStream) - OPTIONAL //
+NvAR_Parameter_Config(Temporal) - OPTIONAL //
+NvAR_Parameter_Config(GazeMode) - OPTIONAL //
+NvAR_Parameter_Config(ModelName) - OPTIONAL //
+NvAR_Parameter_Config(GPU) - OPTIONAL //
+NvAR_Parameter_Config(VertexCount) - QUERY //
+NvAR_Parameter_Config(TriangleCount) - QUERY //
+NvAR_Parameter_Config(ExpressionCount) - QUERY //
+NvAR_Parameter_Config(ShapeEigenValueCount) - QUERY //
+ //
+Input: //
+NvAR_Parameter_Input(Width) //
+NvAR_Parameter_Input(Height) //
+NvAR_Parameter_Input(Image) - OPTIONAL //
+NvAR_Parameter_Input(Landmarks) - OPTIONAL //
+ //
+Output: //
+NvAR_Parameter_Output(FaceMesh) //
+NvAR_Parameter_Output(RenderingParams) //
+NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL //
+NvAR_Parameter_Output(Landmarks) - OPTIONAL //
+NvAR_Parameter_Output(Pose) - OPTIONAL //
+NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL //
+NvAR_Parameter_Output(ExpressionCoefficients) - OPTIONAL //
+NvAR_Parameter_Output(ShapeEigenValues) - OPTIONAL //
+ //
+*******NvAR_Feature_BodyDetection******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(TRTModelDir) //
+NvAR_Parameter_Config(Temporal) //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+ //
+Output: //
+NvAR_Parameter_Output(BoundingBoxes) //
+NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL //
+ //
+*******NvAR_Feature_BodyPoseEstimation******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(ModelDir) //
+NvAR_Parameter_Config(BatchSize) //
+NvAR_Parameter_Config(Mode) //
+NvAR_Parameter_Config(NumKeyPoints) //
+NvAR_Parameter_Config(ReferencePose) //
+NvAR_Parameter_Config(Temporal) //
+NvAR_Parameter_Config(UseCudaGraph) //
+NvAR_Parameter_Config(FocalLength) //
+NvAR_Parameter_Config(TrackPeople) //
+NvAR_Parameter_Config(ShadowTrackingAge) //
+NvAR_Parameter_Config(MaxTargetsTracked) //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+NvAR_Parameter_Input(BoundingBoxes) - OPTIONAL //
+ //
+Output: //
+NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(TrackingBoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL //
+NvAR_Parameter_Output(KeyPoints) //
+NvAR_Parameter_Output(KeyPoints3D) //
+NvAR_Parameter_Output(JointAngles) //
+NvAR_Parameter_Output(KeyPointsConfidence) - OPTIONAL //
+ //
+*******NvAR_Feature_GazeRedirection******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(ModelDir) //
+NvAR_Parameter_Config(BatchSize) //
+NvAR_Parameter_Config(Landmarks_Size) //
+NvAR_Parameter_Config(GazeRedirect) //
+NvAR_Parameter_Config(Temporal) //
+NvAR_Parameter_Config(DetectClosure) - OPTIONAL //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+NvAR_Parameter_Input(Width) //
+NvAR_Parameter_Input(Height) //
+NvAR_Parameter_Input(Landmarks) - OPTIONAL //
+NvAR_Parameter_Input(LandmarksConfidence) - OPTIONAL //
+ //
+Output: //
+NvAR_Parameter_Output(OutputGazeVector) //
+NvAR_Parameter_Output(OutputHeadTranslation) //
+NvAR_Parameter_Output(HeadPose) //
+NvAR_Parameter_Output(EyeCenters3D) //
+NvAR_Parameter_Output(Image) - OPTIONAL //
+NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(Landmarks) - OPTIONAL //
+NvAR_Parameter_Output(Pose) - OPTIONAL //
+NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL //
+ //
+*******NvAR_Feature_FaceExpressions******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) - OPTIONAL //
+NvAR_Parameter_Config(ModelDir) - OPTIONAL //
+NvAR_Parameter_Config(BatchSize) - OPTIONAL //
+NvAR_Parameter_Config(Temporal) - OPTIONAL //
+NvAR_Parameter_Config(Landmarks_Size) - QUERY //
+NvAR_Parameter_Config(ExpressionCount) - QUERY //
+ //
+Input: //
+NvAR_Parameter_Input(Image) //
+NvAR_Parameter_Input(Landmarks) - OPTIONAL //
+ //
+Output: //
+NvAR_Parameter_Output(ExpressionCoefficients) //
+NvAR_Parameter_Output(Landmarks) - OPTIONAL //
+NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL //
+NvAR_Parameter_Output(Pose) - OPTIONAL //
+NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL //
+NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL //
-Input:
-NvAR_Parameter_Input(Image)
+*******NvAR_Feature_LivePortrait******* //
+Config: //
+NvAR_Parameter_Config(FeatureDescription) //
+NvAR_Parameter_Config(CUDAStream) //
+NvAR_Parameter_Config(ModelDir) //
+NvAR_Parameter_Config(Temporal) //
+NvAR_Parameter_Config(Mode) //
+ //
+Input: //
+NvAR_Parameter_Input(SourceImage) //
+NvAR_Parameter_Input(DriveImage) //
+NvAR_Parameter_Input(BackgroundImage) //
-Output:
-NvAR_Parameter_Output(BoundingBoxes)
-NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL
+Output: //
+NvAR_Parameter_Output(GeneratedImage) //
-*******NvAR_Feature_LandmarkDetection*******
-Config:
-NvAR_Parameter_Config(FeatureDescription)
-NvAR_Parameter_Config(CUDAStream)
-NvAR_Parameter_Config(ModelDir)
-NvAR_Parameter_Config(BatchSize)
-NvAR_Parameter_Config(Landmarks_Size)
-NvAR_Parameter_Config(LandmarksConfidence_Size)
-NvAR_Parameter_Config(Temporal)
+*******NvAR_Feature_FrameSelection******* // !FrameSelection!
+Config: // !FrameSelection!
+NvAR_Parameter_Config(FeatureDescription) // !FrameSelection!
+NvAR_Parameter_Config(CUDAStream) // !FrameSelection!
+NvAR_Parameter_Config(ModelDir) // !FrameSelection!
+NvAR_Parameter_Config(Mode) // !FrameSelection!
+ // !FrameSelection!
+Input: // !FrameSelection!
+NvAR_Parameter_Input(Image) // !FrameSelection!
+ // !FrameSelection!
+Output: // !FrameSelection!
+NvAR_Parameter_Output(FrameSelected) // !FrameSelection!
-Input:
-NvAR_Parameter_Input(Image)
-NvAR_Parameter_Input(BoundingBoxes) - OPTIONAL
-
-Output:
-NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL
-NvAR_Parameter_Output(Landmarks)
-NvAR_Parameter_Output(Pose) - OPTIONAL
-NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL
-
-*******NvAR_Feature_Face3DReconstruction*******
-Config:
-NvAR_Parameter_Config(FeatureDescription)
-NvAR_Parameter_Config(ModelDir)
-NvAR_Parameter_Config(Landmarks_Size)
-NvAR_Parameter_Config(CUDAStream) -OPTIONAL
-NvAR_Parameter_Config(Temporal) - OPTIONAL
-NvAR_Parameter_Config(ModelName) - OPTIONAL
-NvAR_Parameter_Config(GPU) - OPTIONAL
-NvAR_Parameter_Config(VertexCount) - QUERY
-NvAR_Parameter_Config(TriangleCount) - QUERY
-NvAR_Parameter_Config(ExpressionCount) - QUERY
-NvAR_Parameter_Config(ShapeEigenValueCount) - QUERY
-
-Input:
-NvAR_Parameter_Input(Width)
-NvAR_Parameter_Input(Height)
-NvAR_Parameter_Input(Image) - OPTIONAL
-NvAR_Parameter_Input(Landmarks) - OPTIONAL
-
-Output:
-NvAR_Parameter_Output(FaceMesh)
-NvAR_Parameter_Output(RenderingParams)
-NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL
-NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL
-NvAR_Parameter_Output(Landmarks) - OPTIONAL
-NvAR_Parameter_Output(Pose) - OPTIONAL
-NvAR_Parameter_Output(LandmarksConfidence) - OPTIONAL
-NvAR_Parameter_Output(ExpressionCoefficients) - OPTIONAL
-NvAR_Parameter_Output(ShapeEigenValues) - OPTIONAL
-
-*******NvAR_Feature_BodyDetection*******
-Config:
-NvAR_Parameter_Config(FeatureDescription)
-NvAR_Parameter_Config(CUDAStream)
-NvAR_Parameter_Config(TRTModelDir)
-NvAR_Parameter_Config(Temporal)
-
-Input:
-NvAR_Parameter_Input(Image)
-
-Output:
-NvAR_Parameter_Output(BoundingBoxes)
-NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL
-
-*******NvAR_Feature_BodyPoseEstimation*******
-Config:
-NvAR_Parameter_Config(FeatureDescription)
-NvAR_Parameter_Config(CUDAStream)
-NvAR_Parameter_Config(ModelDir)
-NvAR_Parameter_Config(BatchSize)
-NvAR_Parameter_Config(Mode)
-NvAR_Parameter_Config(NumKeyPoints)
-NvAR_Parameter_Config(ReferencePose)
-NvAR_Parameter_Config(Temporal)
-NvAR_Parameter_Config(UseCudaGraph)
-NvAR_Parameter_Config(FocalLength)
-
-Input:
-NvAR_Parameter_Input(Image)
-NvAR_Parameter_Input(BoundingBoxes) - OPTIONAL
-
-Output:
-NvAR_Parameter_Output(BoundingBoxes) - OPTIONAL
-NvAR_Parameter_Output(BoundingBoxesConfidence) - OPTIONAL
-NvAR_Parameter_Output(KeyPoints)
-NvAR_Parameter_Output(KeyPoints3D)
-NvAR_Parameter_Output(JointAngles)
-NvAR_Parameter_Output(KeyPointsConfidence) - OPTIONAL
*/
diff --git a/nvar/include/nvCVImage.h b/nvar/include/nvCVImage.h
index 014cd94..543df6e 100644
--- a/nvar/include/nvCVImage.h
+++ b/nvar/include/nvCVImage.h
@@ -323,6 +323,12 @@ NvCV_Status NvCV_API NvCVImage_Realloc(NvCVImage *im, unsigned width, unsigned h
void NvCV_API NvCVImage_Dealloc(NvCVImage *im);
+//! Deallocate the image buffer from the image asynchronously on the specified stream. The image is not deallocated.
+//! param[in,out] im the image whose buffer is to be deallocated.
+//! param[int] stream the CUDA stream on which the image buffer is to be deallocated..
+void NvCV_API NvCVImage_DeallocAsync(NvCVImage *im, struct CUstream_st *stream);
+
+
//! Allocate a new image, with storage (C-style constructor).
//! \param[in] width the desired width of the image, in pixels.
//! \param[in] height the desired height of the image, in pixels.
@@ -378,7 +384,7 @@ void NvCV_API NvCVImage_ComponentOffsets(NvCVImage_PixelFormat format, int *rOff
//! | RGB --> RGB | X | X | X | X |
//! | RGB --> RGBA | X | X | X | X |
//! | RGBA --> Y | X | X | | |
-//! | RGBA --> A | | X | | |
+//! | RGBA --> A | X | | | |
//! | RGBA --> RGB | X | X | X | X |
//! | RGBA --> RGBA | X | X | X | X |
//! | RGB --> YUV420 | X | | X | |
@@ -559,7 +565,7 @@ NvCV_Status NvCV_API NvCVImage_Composite(const NvCVImage *fg, const NvCVImage *b
//! \param[in] mat the matte image, indicating where the src should come through.
//! This determines the size of the rectangle to be composited.
//! If this is multi-channel, the alpha channel is used as the matte.
-//! \param[in] mode the composition mode. Only 0 (straight alpha over) is implemented at this time.
+//! \param[in] mode the composition mode: 0 (straight alpha over) or 1 (premultiplied alpha over).
//! \param[out] dst the destination image. This can be the same as fg or bg.
//! \param[in] dstOrg the upper-left corner of the dst image to be updated (NULL implies (0,0)).
//! \param[in] stream the CUDA stream on which the composition is to be performed.
@@ -631,6 +637,23 @@ NvCV_Status NvCV_API NvCVImage_GetYUVPointers(NvCVImage *im,
int *yPixBytes, int *cPixBytes, int *yRowBytes, int *cRowBytes);
+//! Sharpen an image.
+//! The src and dst should be the same type - conversions are not performed.
+//! This function is only implemented for NVCV_CHUNKY NVCV_U8 pixels, of format NVCV_RGB or NVCV_BGR.
+//! \param[in] sharpness the sharpness strength, calibrated so that 1 and 2 yields Adobe's Sharpen and Sharpen More.
+//! \param[in] src the source image to be sharpened.
+//! \param[out] dst the resultant image (may be the same as the src).
+//! \param[in] stream the CUDA stream on which to perform the computations.
+//! \param[in] tmp a temporary working image. This can be NULL, but may result in lower performance.
+//! It is best if it resides on the same processor (CPU or GPU) as the destination.
+//! @return NVCV_SUCCESS if the operation completed successfully.
+//! NVCV_ERR_MISMATCH if the source and destination formats are different.
+//! NVCV_ERR_PIXELFORMAT if the function has not been implemented for the chosen pixel type.
+
+NvCV_Status NvCV_API NvCVImage_Sharpen(float sharpness, const NvCVImage *src, NvCVImage *dst,
+ struct CUstream_st *stream, NvCVImage *tmp);
+
+
#ifdef __cplusplus
} // extern "C"
diff --git a/nvar/include/nvCVStatus.h b/nvar/include/nvCVStatus.h
index dd47ba3..4b6dfa6 100644
--- a/nvar/include/nvCVStatus.h
+++ b/nvar/include/nvCVStatus.h
@@ -77,7 +77,11 @@ typedef enum NvCV_Status {
NVCV_ERR_TRT_ENGINE = -30, ///< There was a problem deserializing the inference runtime engine.
NVCV_ERR_NPP = -31, //!< An error has occurred in the NPP library.
NVCV_ERR_CONFIG = -32, //!< No suitable model exists for the specified parameter configuration.
+ NVCV_ERR_TOOSMALL = -33, //!< A supplied parameter or buffer is not large enough.
+ NVCV_ERR_TOOBIG = -34, //!< A supplied parameter is too big.
+ NVCV_ERR_WRONGSIZE = -35, //!< A supplied parameter is not the expected size.
+ NVCV_ERR_OPENGL = -98, //!< An OpenGL error has occurred.
NVCV_ERR_DIRECT3D = -99, //!< A Direct3D error has occurred.
NVCV_ERR_CUDA_BASE = -100, //!< CUDA errors are offset from this value.
diff --git a/nvar/src/VPIProxy.cpp b/nvar/src/VPIProxy.cpp
new file mode 100644
index 0000000..6d3857d
--- /dev/null
+++ b/nvar/src/VPIProxy.cpp
@@ -0,0 +1,203 @@
+#if defined(linux) || defined(unix) || defined(__linux)
+#warning nvCVImageProxy.cpp not ported
+#else
+/*###############################################################################
+#
+# Copyright 2020 NVIDIA Corporation
+#
+# 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.
+#
+###############################################################################*/
+#include
+#include "../include/vpi/Status.h"
+#include "../include/vpi/VPI.h"
+#include "../include/vpi/CUDAInterop.h"
+#include "../include/vpi/experimental/ColorNames.h"
+#include "../include/vpi/experimental/HOG.h"
+
+#ifdef _WIN32
+#define _WINSOCKAPI_
+#include
+#include
+#else // !_WIN32
+#include
+typedef void* HMODULE;
+typedef void* HANDLE;
+typedef void* HINSTANCE;
+#endif // _WIN32
+
+// Parameter string does not include the file extension
+#ifdef _WIN32
+#define nvLoadLibrary(library) LoadLibrary(TEXT(library ".dll"))
+#else // !_WIN32
+#define nvLoadLibrary(library) dlopen("lib" library ".so", RTLD_LAZY)
+#endif // _WIN32
+
+
+inline void* nvGetProcAddress(HINSTANCE handle, const char* proc) {
+ if (nullptr == handle) return nullptr;
+#ifdef _WIN32
+ return GetProcAddress(handle, proc);
+#else // !_WIN32
+ return dlsym(handle, proc);
+#endif // _WIN32
+}
+
+inline int nvFreeLibrary(HINSTANCE handle) {
+#ifdef _WIN32
+ return FreeLibrary(handle);
+#else
+ return dlclose(handle);
+#endif
+}
+
+HINSTANCE getVPILib() {
+ TCHAR path[MAX_PATH], tmpPath[MAX_PATH], fullPath[MAX_PATH];
+ static HINSTANCE VPILib = NULL;
+ static bool bSDKPathSet = false;
+ if (!bSDKPathSet) {
+ VPILib = nvLoadLibrary("nvvpi2");
+ if (VPILib) bSDKPathSet = true;
+ }
+ if (!bSDKPathSet) {
+ // There can be multiple apps on the system,
+ // some might include the SDK in the app package and
+ // others might expect the SDK to be installed in Program Files
+ GetEnvironmentVariable(TEXT("NV_VIDEO_EFFECTS_PATH"), path, MAX_PATH);
+ GetEnvironmentVariable(TEXT("NV_AR_SDK_PATH"), tmpPath, MAX_PATH);
+ if (_tcscmp(path, TEXT("USE_APP_PATH")) && _tcscmp(tmpPath, TEXT("USE_APP_PATH"))) {
+ // App has not set environment variable to "USE_APP_PATH"
+ // So pick up the SDK dll and dependencies from Program Files
+ GetEnvironmentVariable(TEXT("ProgramFiles"), path, MAX_PATH);
+ size_t max_len = sizeof(fullPath) / sizeof(TCHAR);
+ _stprintf_s(fullPath, max_len, TEXT("%s\\NVIDIA Corporation\\NVIDIA Video Effects\\"), path);
+ SetDllDirectory(fullPath);
+ VPILib = nvLoadLibrary("nvvpi2");
+ if (!VPILib) {
+ _stprintf_s(fullPath, max_len, TEXT("%s\\NVIDIA Corporation\\NVIDIA AR SDK\\"), path);
+ SetDllDirectory(fullPath);
+ VPILib = nvLoadLibrary("nvvpi2");
+ }
+ }
+ bSDKPathSet = true;
+ }
+ return VPILib;
+}
+
+const char *vpiStatusGetName(VPIStatus code) {
+ static const auto funcPtr = (decltype(vpiStatusGetName) *)nvGetProcAddress(getVPILib(), "vpiStatusGetName");
+
+ if (nullptr == funcPtr) return nullptr;
+ return funcPtr(code);
+}
+
+VPIStatus vpiGetLastStatusMessage(char *msgBuffer, int32_t lenBuffer)
+{
+ static const auto funcPtr = (decltype(vpiGetLastStatusMessage) *)nvGetProcAddress(getVPILib(), "vpiGetLastStatusMessage");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(msgBuffer, lenBuffer);
+}
+
+VPIStatus vpiStreamCreate(uint32_t flags, VPIStream *stream) {
+ static const auto funcPtr = (decltype(vpiStreamCreate)*)nvGetProcAddress(getVPILib(), "vpiStreamCreate");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(flags, stream);
+}
+
+void vpiStreamDestroy(VPIStream stream) {
+ static const auto funcPtr = (decltype(vpiStreamDestroy)*)nvGetProcAddress(getVPILib(), "vpiStreamDestroy");
+
+ if (nullptr == funcPtr) return;
+ return funcPtr(stream);
+}
+
+VPIStatus vpiStreamSync(VPIStream stream) {
+ static const auto funcPtr = (decltype(vpiStreamSync)*)nvGetProcAddress(getVPILib(), "vpiStreamSync");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(stream);
+}
+
+void vpiPayloadDestroy(VPIPayload payload) {
+ static const auto funcPtr = (decltype(vpiPayloadDestroy)*)nvGetProcAddress(getVPILib(), "vpiPayloadDestroy");
+
+ if (nullptr == funcPtr) return;
+ return funcPtr(payload);
+}
+
+void vpiImageDestroy(VPIImage img) {
+ static const auto funcPtr = (decltype(vpiImageDestroy)*)nvGetProcAddress(getVPILib(), "vpiImageDestroy");
+
+ if (nullptr == funcPtr) return;
+ return funcPtr(img);
+}
+
+VPIStatus vpiCreateExtractColorNameFeatures(uint32_t backends, VPIImageFormat outType, VPIPayload *payload) {
+ static const auto funcPtr = (decltype(vpiCreateExtractColorNameFeatures)*)nvGetProcAddress(getVPILib(), "vpiCreateExtractColorNameFeatures");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(backends, outType, payload);
+}
+
+VPIStatus vpiSubmitExtractColorNameFeatures(VPIStream stream, uint32_t backend, VPIPayload payload,
+ VPIImage input, VPIImage *output, int32_t numOutputs) {
+ static const auto funcPtr = (decltype(vpiSubmitExtractColorNameFeatures)*)nvGetProcAddress(getVPILib(), "vpiSubmitExtractColorNameFeatures");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(stream, backend, payload, input, output, numOutputs);
+}
+
+VPIStatus vpiCreateExtractHOGFeatures(uint32_t backends, int32_t width, int32_t height, int32_t features,
+ int32_t cellSize, int32_t numOrientations, int32_t *outNumFeatures,
+ VPIPayload *payload) {
+ static const auto funcPtr = (decltype(vpiCreateExtractHOGFeatures)*)nvGetProcAddress(getVPILib(), "vpiCreateExtractHOGFeatures");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(backends, width, height, features, cellSize, numOrientations, outNumFeatures, payload);
+}
+
+VPIStatus vpiCreateExtractHOGFeaturesBatch(uint32_t backends, int32_t maxBatchWidth, int32_t maxBatchHeight,
+ int32_t imgWidth, int32_t imgHeight, int32_t features, int32_t cellSize,
+ int32_t numOrientations, int32_t *outNumFeatures, VPIPayload *payload)
+{
+ static const auto funcPtr =
+ (decltype(vpiCreateExtractHOGFeaturesBatch) *)nvGetProcAddress(getVPILib(), "vpiCreateExtractHOGFeaturesBatch");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(backends, maxBatchWidth, maxBatchHeight, imgWidth, imgHeight, features, cellSize, numOrientations, outNumFeatures, payload);
+}
+
+VPIStatus vpiSubmitExtractHOGFeatures(VPIStream stream, uint32_t backend, VPIPayload payload, VPIImage input,
+ VPIImage *outFeatures, int32_t numFeatures) {
+ static const auto funcPtr = (decltype(vpiSubmitExtractHOGFeatures)*)nvGetProcAddress(getVPILib(), "vpiSubmitExtractHOGFeatures");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(stream, backend, payload, input, outFeatures, numFeatures);
+}
+
+VPIStatus vpiImageCreateCUDAMemWrapper(const VPIImageData *cudaData, uint32_t flags, VPIImage *img) {
+ static const auto funcPtr = (decltype(vpiImageCreateCUDAMemWrapper)*)nvGetProcAddress(getVPILib(), "vpiImageCreateCUDAMemWrapper");
+
+ if (nullptr == funcPtr) return VPI_ERROR_NOT_IMPLEMENTED;
+ return funcPtr(cudaData, flags, img);
+}
+
+
+#endif // enabling for this file
diff --git a/nvar/src/nvCVImageProxy.cpp b/nvar/src/nvCVImageProxy.cpp
index 4f5199a..4657939 100644
--- a/nvar/src/nvCVImageProxy.cpp
+++ b/nvar/src/nvCVImageProxy.cpp
@@ -132,10 +132,16 @@ NvCV_Status NvCV_API NvCVImage_Realloc(NvCVImage* im, unsigned width, unsigned h
void NvCV_API NvCVImage_Dealloc(NvCVImage* im) {
static const auto funcPtr = (decltype(NvCVImage_Dealloc)*)nvGetProcAddress(getNvCVImageLib(), "NvCVImage_Dealloc");
-
+
if (nullptr != funcPtr) funcPtr(im);
}
+void NvCV_API NvCVImage_DeallocAsync(NvCVImage* im, CUstream_st* stream) {
+ static const auto funcPtr = (decltype(NvCVImage_DeallocAsync)*)nvGetProcAddress(getNvCVImageLib(), "NvCVImage_DeallocAsync");
+
+ if (nullptr != funcPtr) funcPtr(im, stream);
+}
+
NvCV_Status NvCV_API NvCVImage_Create(unsigned width, unsigned height, NvCVImage_PixelFormat format,
NvCVImage_ComponentType type, unsigned isPlanar, unsigned onGPU,
unsigned alignment, NvCVImage** out) {
@@ -266,6 +272,14 @@ NvCV_Status NvCV_API NvCVImage_FlipY(const NvCVImage *src, NvCVImage *dst) {
return funcPtr(src, dst);
}
+NvCV_Status NvCV_API NvCVImage_Sharpen(float sharpness, const NvCVImage *src, NvCVImage *dst,
+ struct CUstream_st *stream, NvCVImage *tmp) {
+ static const auto funcPtr = (decltype(NvCVImage_Sharpen)*)nvGetProcAddress(getNvCVImageLib(), "NvCVImage_Sharpen");
+
+ if (nullptr == funcPtr) return NVCV_ERR_LIBRARY;
+ return funcPtr(sharpness, src, dst, stream, tmp);
+}
+
#ifdef _WIN32
__declspec(dllexport) const char* __cdecl
#else
diff --git a/resources/ar_006.png b/resources/ar_006.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d0c1f08cf34aa53cc39009dcd3872630baf105d
GIT binary patch
literal 550518
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 |