From fce42cccd66bfd8083f07cd06b236d604348614c Mon Sep 17 00:00:00 2001 From: Stefan Werner Date: Tue, 17 Feb 2026 11:33:47 +0100 Subject: [PATCH 1/2] Updated version to 4.4.1 --- CHANGELOG.md | 14 ++++++++++++++ CMakeLists.txt | 2 +- README.md | 18 +++++++++--------- doc/src/changelog.md | 16 +++++++++++++++- tutorials/README.md | 4 ++-- 5 files changed, 41 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e1ad25c8f5..9bc26d5535 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ Version History --------------- +### Embree 4.4.1 + +- Added specialization constants for curves, motion blur, and motion blurred instances to reduce code complexity. +- Enabled AVX512 support with MSVC compiler. +- Fixed numerous potential uninitialized variables, integer over/underflows, and out-of-bounds accesses. +- Fixed bounds checking for buffer stride and grid dimensions. +- Fixed rare hang in rtcNewDevice when using single thread mode (start_threads=1). +- Fixed morton builder for instance arrays. +- Improved compiler warning handling for C++26, GCC, and ARM builds. +- Improved AVX512 flag consistency between GCC and Clang. +- Updated TinyEXR dependency to fix resource leaks. +- Reduced memory copies and improved move semantics usage. +- Bumped CMake minimum required version to 3.10. + ### Embree 4.4 - Added support for passing geometry data to Embree using explicit host and SYCL device memory (see `rtcSetSharedGeometryBufferHostDevice`, `rtcNewBufferHostDevice`, and other API calls with `HostDevice` suffix). diff --git a/CMakeLists.txt b/CMakeLists.txt index 47076d84fd..c06124c93b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.10) SET(EMBREE_VERSION_MAJOR 4) SET(EMBREE_VERSION_MINOR 4) -SET(EMBREE_VERSION_PATCH 0) +SET(EMBREE_VERSION_PATCH 1) SET(EMBREE_VERSION_NOTE "") SET(EMBREE_VERSION ${EMBREE_VERSION_MAJOR}.${EMBREE_VERSION_MINOR}.${EMBREE_VERSION_PATCH}) diff --git a/README.md b/README.md index 371cd35894..34d0e325f7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -% Embree: High Performance Ray Tracing Kernels 4.4.0 +% Embree: High Performance Ray Tracing Kernels 4.4.1 % Intel Corporation Intel® Embree Overview @@ -100,7 +100,7 @@ Windows Installation -------------------- A pre-built version of Embree for Windows is provided as a ZIP archive -[embree-4.4.0.x64.windows.zip](https://github.com/embree/embree/releases/download/v4.4.0/embree-4.4.0.x64.windows.zip). After +[embree-4.4.1.x64.windows.zip](https://github.com/embree/embree/releases/download/v4.4.1/embree-4.4.1.x64.windows.zip). After unpacking this ZIP file, you should set the path to the `lib` folder manually to your `PATH` environment variable for applications to find Embree. @@ -110,13 +110,13 @@ Linux Installation ------------------ A pre-built version of Embree for Linux is provided as a `tar.gz` archive: -[embree-4.4.0.x86_64.linux.tar.gz](https://github.com/embree/embree/releases/download/v4.4.0/embree-4.4.0.x86_64.linux.tar.gz). Unpack +[embree-4.4.1.x86_64.linux.tar.gz](https://github.com/embree/embree/releases/download/v4.4.1/embree-4.4.1.x86_64.linux.tar.gz). Unpack this file using `tar` and source the provided `embree-vars.sh` (if you are using the bash shell) or `embree-vars.csh` (if you are using the C shell) to set up the environment properly: - tar xzf embree-4.4.0.x86_64.linux.tar.gz - source embree-4.4.0.x86_64.linux/embree-vars.sh + tar xzf embree-4.4.1.x86_64.linux.tar.gz + source embree-4.4.1.x86_64.linux/embree-vars.sh We recommend adding a relative `RPATH` to your application that points to the location where Embree (and TBB) can be found, e.g. `$ORIGIN/../lib`. @@ -126,12 +126,12 @@ macOS Installation ------------------ The macOS version of Embree is also delivered as a ZIP file: -[embree-4.4.0.x86_64.macosx.zip](https://github.com/embree/embree/releases/download/v4.4.0/embree-4.4.0.x86_64.macosx.zip). Unpack +[embree-4.4.1.x86_64.macosx.zip](https://github.com/embree/embree/releases/download/v4.4.1/embree-4.4.1.x86_64.macosx.zip). Unpack this file using `tar` and source the provided `embree-vars.sh` (if you are using the bash shell) or `embree-vars.csh` (if you are using the C shell) to set up the environment properly: - unzip embree-4.4.0.x64.macosx.zip source embree-4.4.0.x64.macosx/embree-vars.sh + unzip embree-4.4.1.x64.macosx.zip source embree-4.4.1.x64.macosx/embree-vars.sh If you want to ship Embree with your application, please use the Embree library of the provided ZIP file. The library name of that Embree @@ -156,7 +156,7 @@ set the `TBB_DIR` variable to the path containing `TBB-config.cmake` of a local TBB install, in case you do not have TBB installed globally on your system, e.g: - cmake -D embree_DIR=path_to_embree_package/lib/cmake/embree-4.4.0/ \ + cmake -D embree_DIR=path_to_embree_package/lib/cmake/embree-4.4.1/ \ -D TBB_DIR=path_to_tbb_package/lib/cmake/tbb/ \ .. @@ -257,7 +257,7 @@ Embree is released with a bundle of tests in an optional testing package. To run these tests extract the testing package in the same folder as your embree installation. e.g.: - tar -xzf embree-4.4.0-testing.zip -C /path/to/installed/embree + tar -xzf embree-4.4.1-testing.zip -C /path/to/installed/embree The tests are extracted into a new folder inside you embree installation and can be run with: diff --git a/doc/src/changelog.md b/doc/src/changelog.md index e1ad25c8f5..016d979f4f 100644 --- a/doc/src/changelog.md +++ b/doc/src/changelog.md @@ -1,7 +1,21 @@ Version History --------------- -### Embree 4.4 +### Embree 4.4.1 + +- Added specialization constants for curves, motion blur, and motion blurred instances to reduce code complexity. +- Enabled AVX512 support with MSVC compiler. +- Fixed numerous potential uninitialized variables, integer over/underflows, and out-of-bounds accesses. +- Fixed bounds checking for buffer stride and grid dimensions. +- Fixed rare hang in rtcNewDevice when using single thread mode (start_threads=1). +- Fixed morton builder for instance arrays. +- Improved compiler warning handling for C++26, GCC, and ARM builds. +- Improved AVX512 flag consistency between GCC and Clang. +- Updated TinyEXR dependency to fix resource leaks. +- Reduced memory copies and improved move semantics usage. +- Bumped CMake minimum required version to 3.10. + +### Embree 4.4.0 - Added support for passing geometry data to Embree using explicit host and SYCL device memory (see `rtcSetSharedGeometryBufferHostDevice`, `rtcNewBufferHostDevice`, and other API calls with `HostDevice` suffix). - Embree does not use SYCL shared memory anymore internally on systems without host unified memory (i.e., discrete GPUs). Therefore, memory transfers are triggered by specific Embree API calls (e.g. `rtcCommitScene`, `rtcCommitBuffer`). diff --git a/tutorials/README.md b/tutorials/README.md index 6cda60c187..ba0413a444 100644 --- a/tutorials/README.md +++ b/tutorials/README.md @@ -42,7 +42,7 @@ the Embree and TBB installation on your system. -D CMAKE_CXX_COMPILER=clang++ -D CMAKE_C_COMPILER=clang -D CMAKE_BUILD_TYPE=Release - -D embree_DIR=%cd%\..\..\..\lib\cmake\embree-4.4.0\ + -D embree_DIR=%cd%\..\..\..\lib\cmake\embree-4.4.1\ -D TBB_DIR=path_to_tbb\oneapi-tbb-2021.2.0\lib\cmake\tbb .. Now you can build the tutorial: @@ -91,7 +91,7 @@ the Embree and TBB installation on your system. cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_CXX_COMPILER=clang++ \ -D CMAKE_C_COMPILER=clang \ - -D embree_DIR=`pwd`/../../../lib/cmake/embree-4.4.0/ \ + -D embree_DIR=`pwd`/../../../lib/cmake/embree-4.4.1/ \ -D TBB_DIR=path_to_tbb/oneapi-tbb-2021.2.0/lib/cmake/tbb/ .. Now you can build the tutorial: From 1610c006c3e4d923745a3d97f11218198848f9e5 Mon Sep 17 00:00:00 2001 From: "Werner, Stefan" Date: Fri, 20 Feb 2026 14:05:50 +0100 Subject: [PATCH 2/2] Updated documentation to 4.4.1 --- CHANGELOG.md | 2 +- README.md | 4 +- man/man3/RTCBufferType.3embree4 | 67 ++---- man/man3/RTCCurveFlags.3embree4 | 33 +-- man/man3/RTCFeatureFlags.3embree4 | 55 ++--- man/man3/RTCFormat.3embree4 | 61 ++--- man/man3/RTCHit.3embree4 | 59 ++--- man/man3/RTCHitN.3embree4 | 47 +--- man/man3/RTCQuaternionDecomposition.3embree4 | 52 ++-- man/man3/RTCRay.3embree4 | 65 ++--- man/man3/RTCRayHit.3embree4 | 47 +--- man/man3/RTCRayHitN.3embree4 | 45 +--- man/man3/RTCRayN.3embree4 | 47 +--- man/man3/RTC_GEOMETRY_TYPE_CURVE.3embree4 | 224 ++++++++---------- man/man3/RTC_GEOMETRY_TYPE_GRID.3embree4 | 102 +++----- man/man3/RTC_GEOMETRY_TYPE_INSTANCE.3embree4 | 83 +++---- .../RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.3embree4 | 98 +++----- man/man3/RTC_GEOMETRY_TYPE_POINT.3embree4 | 86 +++---- man/man3/RTC_GEOMETRY_TYPE_QUAD.3embree4 | 100 +++----- .../RTC_GEOMETRY_TYPE_SUBDIVISION.3embree4 | 180 ++++++-------- man/man3/RTC_GEOMETRY_TYPE_TRIANGLE.3embree4 | 88 +++---- man/man3/RTC_GEOMETRY_TYPE_USER.3embree4 | 76 ++---- man/man3/rtcAttachGeometry.3embree4 | 50 ++-- man/man3/rtcAttachGeometryByID.3embree4 | 54 ++--- man/man3/rtcBuildBVH.3embree4 | 154 ++++++------ man/man3/rtcCollide.3embree4 | 50 ++-- man/man3/rtcCommitGeometry.3embree4 | 44 +--- man/man3/rtcCommitScene.3embree4 | 72 ++---- man/man3/rtcDetachGeometry.3embree4 | 40 +--- man/man3/rtcDisableGeometry.3embree4 | 42 +--- man/man3/rtcEnableGeometry.3embree4 | 42 +--- man/man3/rtcForwardIntersect1.3embree4 | 64 ++--- man/man3/rtcForwardIntersect4.3embree4 | 70 ++---- man/man3/rtcForwardOccluded1.3embree4 | 62 ++--- man/man3/rtcForwardOccluded4.3embree4 | 71 ++---- man/man3/rtcGetBufferData.3embree4 | 48 +--- man/man3/rtcGetDeviceError.3embree4 | 91 +++---- .../rtcGetDeviceLastErrorMessage.3embree4 | 46 +--- man/man3/rtcGetDeviceProperty.3embree4 | 153 ++++++------ man/man3/rtcGetErrorString.3embree4 | 46 +--- man/man3/rtcGetGeometry.3embree4 | 46 +--- man/man3/rtcGetGeometryBufferData.3embree4 | 49 ++-- man/man3/rtcGetGeometryFace.3embree4 | 51 ++-- man/man3/rtcGetGeometryFirstHalfEdge.3embree4 | 48 +--- man/man3/rtcGetGeometryNextHalfEdge.3embree4 | 48 +--- .../rtcGetGeometryOppositeHalfEdge.3embree4 | 52 ++-- .../rtcGetGeometryPreviousHalfEdge.3embree4 | 48 +--- man/man3/rtcGetGeometryThreadSafe.3embree4 | 48 +--- man/man3/rtcGetGeometryTransform.3embree4 | 62 ++--- man/man3/rtcGetGeometryTransformEx.3embree4 | 64 ++--- .../rtcGetGeometryTransformFromScene.3embree4 | 64 ++--- man/man3/rtcGetGeometryUserData.3embree4 | 46 +--- .../rtcGetGeometryUserDataFromScene.3embree4 | 52 ++-- .../rtcGetSYCLDeviceFunctionPointer.3embree4 | 55 ++--- man/man3/rtcGetSceneBounds.3embree4 | 44 +--- man/man3/rtcGetSceneDevice.3embree4 | 38 +-- man/man3/rtcGetSceneFlags.3embree4 | 44 +--- man/man3/rtcGetSceneLinearBounds.3embree4 | 48 +--- man/man3/rtcInitIntersectArguments.3embree4 | 76 +++--- man/man3/rtcInitOccludedArguments.3embree4 | 78 +++--- man/man3/rtcInitPointQueryContext.3embree4 | 40 +--- .../rtcInitQuaternionDecomposition.3embree4 | 38 +-- man/man3/rtcInitRayQueryContext.3embree4 | 44 +--- man/man3/rtcInterpolate.3embree4 | 84 +++---- man/man3/rtcInterpolateN.3embree4 | 53 ++--- man/man3/rtcIntersect1.3embree4 | 97 +++----- man/man3/rtcIntersect4.3embree4 | 70 ++---- ...InvokeIntersectFilterFromGeometry.3embree4 | 46 +--- ...cInvokeOccludedFilterFromGeometry.3embree4 | 48 +--- man/man3/rtcIsSYCLDeviceSupported.3embree4 | 38 +-- man/man3/rtcJoinCommitScene.3embree4 | 99 +++----- man/man3/rtcNewBVH.3embree4 | 44 +--- man/man3/rtcNewBuffer.3embree4 | 56 ++--- man/man3/rtcNewDevice.3embree4 | 78 +++--- man/man3/rtcNewGeometry.3embree4 | 145 +++++------- man/man3/rtcNewSYCLDevice.3embree4 | 48 +--- man/man3/rtcNewScene.3embree4 | 44 +--- man/man3/rtcNewSharedBuffer.3embree4 | 61 ++--- man/man3/rtcOccluded1.3embree4 | 79 +++--- man/man3/rtcOccluded4.3embree4 | 74 ++---- man/man3/rtcPointQuery.3embree4 | 72 ++---- man/man3/rtcPointQuery4.3embree4 | 29 +-- man/man3/rtcReleaseBVH.3embree4 | 40 +--- man/man3/rtcReleaseBuffer.3embree4 | 40 +--- man/man3/rtcReleaseDevice.3embree4 | 40 +--- man/man3/rtcReleaseGeometry.3embree4 | 40 +--- man/man3/rtcReleaseScene.3embree4 | 40 +--- man/man3/rtcRetainBVH.3embree4 | 42 +--- man/man3/rtcRetainBuffer.3embree4 | 44 +--- man/man3/rtcRetainDevice.3embree4 | 44 +--- man/man3/rtcRetainGeometry.3embree4 | 42 +--- man/man3/rtcRetainScene.3embree4 | 42 +--- man/man3/rtcSYCLDeviceSelector.3embree4 | 46 +--- man/man3/rtcSetDeviceErrorFunction.3embree4 | 52 ++-- ...rtcSetDeviceMemoryMonitorFunction.3embree4 | 68 ++---- man/man3/rtcSetDeviceSYCLDevice.3embree4 | 40 +--- .../rtcSetGeometryBoundsFunction.3embree4 | 72 ++---- man/man3/rtcSetGeometryBuffer.3embree4 | 58 ++--- man/man3/rtcSetGeometryBuildQuality.3embree4 | 66 ++---- ...tcSetGeometryDisplacementFunction.3embree4 | 72 ++---- ...EnableFilterFunctionFromArguments.3embree4 | 46 +--- .../rtcSetGeometryInstancedScene.3embree4 | 42 +--- .../rtcSetGeometryInstancedScenes.3embree4 | 52 ++-- ...etGeometryIntersectFilterFunction.3embree4 | 100 +++----- .../rtcSetGeometryIntersectFunction.3embree4 | 97 +++----- man/man3/rtcSetGeometryMask.3embree4 | 47 +--- .../rtcSetGeometryMaxRadiusScale.3embree4 | 60 ++--- ...SetGeometryOccludedFilterFunction.3embree4 | 62 ++--- .../rtcSetGeometryOccludedFunction.3embree4 | 84 +++---- .../rtcSetGeometryPointQueryFunction.3embree4 | 75 +++--- .../rtcSetGeometrySubdivisionMode.3embree4 | 58 ++--- .../rtcSetGeometryTessellationRate.3embree4 | 44 +--- man/man3/rtcSetGeometryTimeRange.3embree4 | 40 +--- man/man3/rtcSetGeometryTimeStepCount.3embree4 | 62 ++--- man/man3/rtcSetGeometryTopologyCount.3embree4 | 46 +--- man/man3/rtcSetGeometryTransform.3embree4 | 60 ++--- ...rtcSetGeometryTransformQuaternion.3embree4 | 52 ++-- man/man3/rtcSetGeometryUserData.3embree4 | 44 +--- .../rtcSetGeometryUserPrimitiveCount.3embree4 | 44 +--- ...tcSetGeometryVertexAttributeCount.3embree4 | 54 ++--- ...etGeometryVertexAttributeTopology.3embree4 | 52 ++-- man/man3/rtcSetNewGeometryBuffer.3embree4 | 56 ++--- man/man3/rtcSetSceneBuildQuality.3embree4 | 56 ++--- man/man3/rtcSetSceneFlags.3embree4 | 58 ++--- ...tcSetSceneProgressMonitorFunction.3embree4 | 56 ++--- man/man3/rtcSetSharedGeometryBuffer.3embree4 | 70 ++---- man/man3/rtcUpdateGeometryBuffer.3embree4 | 48 +--- readme.pdf | Bin 2843218 -> 2869963 bytes 128 files changed, 2470 insertions(+), 5251 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bc26d5535..016d979f4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ Version History - Reduced memory copies and improved move semantics usage. - Bumped CMake minimum required version to 3.10. -### Embree 4.4 +### Embree 4.4.0 - Added support for passing geometry data to Embree using explicit host and SYCL device memory (see `rtcSetSharedGeometryBufferHostDevice`, `rtcNewBufferHostDevice`, and other API calls with `HostDevice` suffix). - Embree does not use SYCL shared memory anymore internally on systems without host unified memory (i.e., discrete GPUs). Therefore, memory transfers are triggered by specific Embree API calls (e.g. `rtcCommitScene`, `rtcCommitBuffer`). diff --git a/README.md b/README.md index 34d0e325f7..a6f2c6667c 100644 --- a/README.md +++ b/README.md @@ -314,7 +314,7 @@ installation, put the path to `ispc` permanently into your `PATH` environment variable or you set the `EMBREE_ISPC_EXECUTABLE` variable to point at the ISPC executable during CMake configuration. -You additionally have to install CMake 3.1.0 or higher and the developer +You additionally have to install CMake 3.10 or higher and the developer version of [GLFW](https://www.glfw.org/) version 3. Under macOS, all these dependencies can be installed @@ -480,7 +480,7 @@ Windows Embree is tested using the following compilers under Windows: - - Intel® oneAPI DPC++/C++ Compiler 2024.2 + - Intel® oneAPI DPC++/C++ Compiler 2025.2 - oneAPI DPC++/C++ Compiler 6.2.0 - Visual Studio 2022 - Visual Studio 2019 diff --git a/man/man3/RTCBufferType.3embree4 b/man/man3/RTCBufferType.3embree4 index d8eb37be89..cec34705b2 100644 --- a/man/man3/RTCBufferType.3embree4 +++ b/man/man3/RTCBufferType.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCBufferType" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCFormat - specifies format of data in buffers -\f[R] -.fi +.EX +RTCFormat \- specifies format of data in buffers +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCBufferType @@ -52,47 +34,46 @@ enum RTCBufferType RTC_BUFFER_TYPE_FLAGS = 32 }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTBufferType\f[R] structure defines slots to assign data +The \f[CR]RTBufferType\f[R] structure defines slots to assign data buffers to using the [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer], and [rtcSetNewGeometryBuffer] API calls. .PP -For most geometry types the \f[V]RTC_BUFFER_TYPE_INDEX\f[R] slot is used -to assign an index buffer, while the \f[V]RTC_BUFFER_TYPE_VERTEX\f[R] is -used to assign the corresponding vertex buffer. +For most geometry types the \f[CR]RTC_BUFFER_TYPE_INDEX\f[R] slot is +used to assign an index buffer, while the +\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] is used to assign the corresponding +vertex buffer. .PP -The \f[V]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R] slot can get used to +The \f[CR]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R] slot can get used to assign arbitrary additional vertex data which can get interpolated using the [rtcInterpolate] API call. .PP -The \f[V]RTC_BUFFER_TYPE_NORMAL\f[R], \f[V]RTC_BUFFER_TYPE_TANGENT\f[R], -and \f[V]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R] are special buffers +The \f[CR]RTC_BUFFER_TYPE_NORMAL\f[R], +\f[CR]RTC_BUFFER_TYPE_TANGENT\f[R], and +\f[CR]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R] are special buffers required to assign per vertex normals, tangents, and normal derivatives for some curve types. .PP -The \f[V]RTC_BUFFER_TYPE_GRID\f[R] buffer is used to assign the grid +The \f[CR]RTC_BUFFER_TYPE_GRID\f[R] buffer is used to assign the grid primitive buffer for grid geometries (see [RTC_GEOMETRY_TYPE_GRID]). .PP -The \f[V]RTC_BUFFER_TYPE_FACE\f[R], \f[V]RTC_BUFFER_TYPE_LEVEL\f[R], -\f[V]RTC_BUFFER_TYPE_EDGE_CREASE_INDEX\f[R], -\f[V]RTC_BUFFER_TYPE_EDGE_CREASE_WEIGHT\f[R], -\f[V]RTC_BUFFER_TYPE_VERTEX_CREASE_INDEX\f[R], -\f[V]RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT\f[R], and -\f[V]RTC_BUFFER_TYPE_HOLE\f[R] are special buffers required to create +The \f[CR]RTC_BUFFER_TYPE_FACE\f[R], \f[CR]RTC_BUFFER_TYPE_LEVEL\f[R], +\f[CR]RTC_BUFFER_TYPE_EDGE_CREASE_INDEX\f[R], +\f[CR]RTC_BUFFER_TYPE_EDGE_CREASE_WEIGHT\f[R], +\f[CR]RTC_BUFFER_TYPE_VERTEX_CREASE_INDEX\f[R], +\f[CR]RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT\f[R], and +\f[CR]RTC_BUFFER_TYPE_HOLE\f[R] are special buffers required to create subdivision meshes (see [RTC_GEOMETRY_TYPE_SUBDIVISION]). .PP -The \f[V]RTC_BUFFER_TYPE_TRANSFORM\f[R] buffer is used to provide +The \f[CR]RTC_BUFFER_TYPE_TRANSFORM\f[R] buffer is used to provide instance transformation information for instance array geometries (see [RTC_GEOMETRY_TYPE_INSTANCE_ARRAY]). .PP -The \f[V]RTC_BUFFER_TYPE_FLAGS\f[R] can get used to add additional flag +The \f[CR]RTC_BUFFER_TYPE_FLAGS\f[R] can get used to add additional flag per primitive of a geometry, and is currently only used for linear curves. .SS EXIT STATUS .SS SEE ALSO -.PP [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer], [rtcSetNewGeometryBuffer] diff --git a/man/man3/RTCCurveFlags.3embree4 b/man/man3/RTCCurveFlags.3embree4 index 35c9981ff8..dfaced6323 100644 --- a/man/man3/RTCCurveFlags.3embree4 +++ b/man/man3/RTCCurveFlags.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCCurveFlags" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCCurveFlags - per segment flags for curve geometry -\f[R] -.fi +.EX +RTCCurveFlags \- per segment flags for curve geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCCurveFlags @@ -34,10 +16,8 @@ enum RTCCurveFlags RTC_CURVE_FLAG_NEIGHBOR_LEFT = (1 << 0), RTC_CURVE_FLAG_NEIGHBOR_RIGHT = (1 << 1) }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP The RTCCurveFlags type is used for linear curves to determine if the left and/or right neighbor segment exist. Therefore one attaches a buffer of type RTC_BUFFER_TYPE_FLAGS to the @@ -58,5 +38,4 @@ rendering at the ending of these curves may not look correct, in particular when round linear curves are viewed from the inside. .SS EXIT STATUS .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_CURVE] diff --git a/man/man3/RTCFeatureFlags.3embree4 b/man/man3/RTCFeatureFlags.3embree4 index b60232c281..0b7df91604 100644 --- a/man/man3/RTCFeatureFlags.3embree4 +++ b/man/man3/RTCFeatureFlags.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCFeatureFlags" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCFeatureFlags - specifies features to enable +.EX +RTCFeatureFlags \- specifies features to enable for ray queries -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCFeatureFlags @@ -90,27 +72,25 @@ enum RTCFeatureFlags RTC_FEATURE_FLAG_ALL = 0xffffffff }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTCFeatureFlags\f[R] enum specify a bit mask to enable specific -ray tracing features for ray query operations. -The feature flags are passed to the \f[V]rtcIntersect1/4/8/16\f[R] and -\f[V]rtcOccluded1/4/8/16\f[R] functions through the -\f[V]RTCIntersectArguments\f[R] and \f[V]RTCOccludedArguments\f[R] +The \f[CR]RTCFeatureFlags\f[R] enum specify a bit mask to enable +specific ray tracing features for ray query operations. +The feature flags are passed to the \f[CR]rtcIntersect1/4/8/16\f[R] and +\f[CR]rtcOccluded1/4/8/16\f[R] functions through the +\f[CR]RTCIntersectArguments\f[R] and \f[CR]RTCOccludedArguments\f[R] structures. Only a ray tracing feature whose bit is enabled in the feature mask can get used. If a feature bit is not set, the behaviour is undefined, thus the feature may work or not. To enable multiple features the respective features have to get combined -using a bitwise \f[V]OR\f[R] operation. +using a bitwise \f[CR]OR\f[R] operation. .PP The purpose of feature flags is to reduce code size on the GPU by enabling just the features required to render the scene. On the CPU there is no need to use feature flags, and the default of all -features enabled (\f[V]RTC_FEATURE_FLAG_ALL\f[R]) can just be kept. +features enabled (\f[CR]RTC_FEATURE_FLAG_ALL\f[R]) can just be kept. .PP The following features can get enabled using feature flags: .IP \[bu] 2 @@ -148,7 +128,7 @@ RTC_FEATURE_FLAG_LINEAR_CURVES: Enables all linear curves RTC_FEATURE_FLAG_BEZIER_CURVES: Enables all Bézier curves (RTC_GEOMETRY_TYPE_XXX_BEZIER_CURVE). .IP \[bu] 2 -RTC_FEATURE_FLAG_BSPLINE_CURVES: Enables all B-spline curves +RTC_FEATURE_FLAG_BSPLINE_CURVES: Enables all B\-spline curves (RTC_GEOMETRY_TYPE_XXX_BSPLINE_CURVE). .IP \[bu] 2 RTC_FEATURE_FLAG_HERMITE_CURVES: Enables all Hermite curves @@ -172,14 +152,14 @@ RTC_FEATURE_FLAG_FLAT_BEZIER_CURVE: Enables flat Bézier curves RTC_FEATURE_FLAG_NORMAL_ORIENTED_BEZIER_CURVE: Enables normal oriented Bézier curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE). .IP \[bu] 2 -RTC_FEATURE_FLAG_ROUND_BSPLINE_CURVE: Enables round B-spline curves +RTC_FEATURE_FLAG_ROUND_BSPLINE_CURVE: Enables round B\-spline curves (RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE). .IP \[bu] 2 -RTC_FEATURE_FLAG_FLAT_BSPLINE_CURVE: Enables flat B-spline curves +RTC_FEATURE_FLAG_FLAT_BSPLINE_CURVE: Enables flat B\-spline curves (RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE). .IP \[bu] 2 RTC_FEATURE_FLAG_NORMAL_ORIENTED_BSPLINE_CURVE: Enables normal oriented -B-spline curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE). +B\-spline curves (RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE). .IP \[bu] 2 RTC_FEATURE_FLAG_ROUND_HERMITE_CURVE: Enables round Hermite curves (RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE). @@ -239,6 +219,5 @@ correctly. RTC_FEATURE_FLAG_ALL: Enables all features (default). .SS EXIT STATUS .SS SEE ALSO -.PP [rtcIntersect1], [rtcIntersect4/8/16], [rtcOccluded1], [rtcOccluded4/8/16], diff --git a/man/man3/RTCFormat.3embree4 b/man/man3/RTCFormat.3embree4 index 0de8dc1fa5..d43b389955 100644 --- a/man/man3/RTCFormat.3embree4 +++ b/man/man3/RTCFormat.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCFormat" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCFormat - specifies format of data in buffers -\f[R] -.fi +.EX +RTCFormat \- specifies format of data in buffers +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCFormat @@ -63,47 +45,44 @@ enum RTCFormat RTC_FORMAT_QUATERNION_DECOMPOSITION }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTFormat\f[R] structure defines the data format stored in data +The \f[CR]RTFormat\f[R] structure defines the data format stored in data buffers provided to Embree using the [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer], and [rtcSetNewGeometryBuffer] API calls. .PP -The \f[V]RTC_FORMAT_UINT/2/3/4\f[R] format are used to specify that data -buffers store unsigned integers, or unsigned integer vectors of size 2,3 -or 4. +The \f[CR]RTC_FORMAT_UINT/2/3/4\f[R] format are used to specify that +data buffers store unsigned integers, or unsigned integer vectors of +size 2,3 or 4. This format has typically to get used when specifying index buffers, -e.g.\ \f[V]RTC_FORMAT_UINT3\f[R] for triangle meshes. +e.g.\ \f[CR]RTC_FORMAT_UINT3\f[R] for triangle meshes. .PP -The \f[V]RTC_FORMAT_FLOAT/2/3/4...\f[R] format are used to specify that +The \f[CR]RTC_FORMAT_FLOAT/2/3/4...\f[R] format are used to specify that data buffers store single precision floating point values, or vectors there of (size 2,3,4, etc.). This format is typcally used to specify to format of vertex buffers, -e.g.\ the \f[V]RTC_FORMAT_FLOAT3\f[R] type for vertex buffers of +e.g.\ the \f[CR]RTC_FORMAT_FLOAT3\f[R] type for vertex buffers of triangle meshes. .PP -The \f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R] and -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R] formats, specify a 3x4 +The \f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R] and +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R] formats, specify a 3x4 floating point matrix layed out either row major or column major. -The \f[V]RTC_FORMAT_FLOAT4X4_ROW_MAJOR\f[R] and -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R] formats, specify a 4x4 +The \f[CR]RTC_FORMAT_FLOAT4X4_ROW_MAJOR\f[R] and +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R] formats, specify a 4x4 floating point matrix layed out either row major or column major. -The \f[V]RTC_FORMAT_QUATERNION_DECOMPOSITION\f[R] format specifies a +The \f[CR]RTC_FORMAT_QUATERNION_DECOMPOSITION\f[R] format specifies a structure that represents a quaternion decomposition (see [RTCQuaternionDecomposition]) of an affine transformation. These formats are used in the [rtcSetGeometryTransform] function or in -geometry buffers with type \f[V]RTC_BUFFER_TYPE_TRANSFORM\f[R] in order +geometry buffers with type \f[CR]RTC_BUFFER_TYPE_TRANSFORM\f[R] in order to set a transformation matrix for instance and instance array geometries. .PP -The \f[V]RTC_FORMAT_GRID\f[R] is a special data format used to specify +The \f[CR]RTC_FORMAT_GRID\f[R] is a special data format used to specify grid primitives of layout RTCGrid when creating grid geometries (see [RTC_GEOMETRY_TYPE_GRID]). .SS EXIT STATUS .SS SEE ALSO -.PP [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer], [rtcSetNewGeometryBuffer], [rtcSetGeometryTransform] [RTCQuaternionDecomposition] diff --git a/man/man3/RTCHit.3embree4 b/man/man3/RTCHit.3embree4 index b72ab2ed50..45cd22b6a2 100644 --- a/man/man3/RTCHit.3embree4 +++ b/man/man3/RTCHit.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCHit" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCHit - single hit structure -\f[R] -.fi +.EX +RTCHit \- single hit structure +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCHit @@ -42,28 +24,25 @@ struct RTCHit unsigned int geomID; // primitive ID unsigned int instID[RTC_MAX_INSTANCE_LEVEL_COUNT]; // instance ID }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTCHit\f[R] type defines the type of a ray/primitive +The \f[CR]RTCHit\f[R] type defines the type of a ray/primitive intersection result. The hit contains the unnormalized geometric normal in object space at -the hit location (\f[V]Ng_x\f[R], \f[V]Ng_y\f[R], \f[V]Ng_z\f[R] -members), the barycentric u/v coordinates of the hit (\f[V]u\f[R] and -\f[V]v\f[R] members), as well as the primitive ID (\f[V]primID\f[R] -member), geometry ID (\f[V]geomID\f[R] member), and instance ID stack -(\f[V]instID\f[R] member) of the hit. +the hit location (\f[CR]Ng_x\f[R], \f[CR]Ng_y\f[R], \f[CR]Ng_z\f[R] +members), the barycentric u/v coordinates of the hit (\f[CR]u\f[R] and +\f[CR]v\f[R] members), as well as the primitive ID (\f[CR]primID\f[R] +member), geometry ID (\f[CR]geomID\f[R] member), and instance ID stack +(\f[CR]instID\f[R] member) of the hit. The parametric intersection distance is not stored inside the hit, but -stored inside the \f[V]tfar\f[R] member of the ray. +stored inside the \f[CR]tfar\f[R] member of the ray. .PP -The \f[V]embree4/rtcore_ray.h\f[R] header additionally defines the same +The \f[CR]embree4/rtcore_ray.h\f[R] header additionally defines the same hit structure in structure of array (SOA) layout for hit packets of size -4 (\f[V]RTCHit4\f[R] type), size 8 (\f[V]RTCHit8\f[R] type), and size 16 -(\f[V]RTCHit16\f[R] type). -The header additionally defines an \f[V]RTCHitNt\f[R] template for hit -packets of an arbitrary compile-time size. +4 (\f[CR]RTCHit4\f[R] type), size 8 (\f[CR]RTCHit8\f[R] type), and size +16 (\f[CR]RTCHit16\f[R] type). +The header additionally defines an \f[CR]RTCHitNt\f[R] template for hit +packets of an arbitrary compile\-time size. .SS EXIT STATUS .SS SEE ALSO -.PP -[RTCRay], [Multi-Level Instancing] +[RTCRay], [Multi\-Level Instancing] diff --git a/man/man3/RTCHitN.3embree4 b/man/man3/RTCHitN.3embree4 index 3f86db5851..0649f61381 100644 --- a/man/man3/RTCHitN.3embree4 +++ b/man/man3/RTCHitN.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCHitN" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCHitN - hit packet of runtime size -\f[R] -.fi +.EX +RTCHitN \- hit packet of runtime size +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct HitN; @@ -41,26 +23,23 @@ float& RTCHitN_v(RTCHitN* hit, unsigned int N, unsigned int i); unsigned& RTCHitN_primID(RTCHitN* hit, unsigned int N, unsigned int i); unsigned& RTCHitN_geomID(RTCHitN* hit, unsigned int N, unsigned int i); unsigned& RTCHitN_instID(RTCHitN* hit, unsigned int N, unsigned int i, unsigned int level); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP When the hit packet size is not known at compile time (e.g.\ when Embree -returns a hit packet in the \f[V]RTCFilterFuncN\f[R] callback function), -Embree uses the \f[V]RTCHitN\f[R] type for hit packets. +returns a hit packet in the \f[CR]RTCFilterFuncN\f[R] callback +function), Embree uses the \f[CR]RTCHitN\f[R] type for hit packets. These hit packets can only have sizes of 1, 4, 8, or 16. No other packet size will be used. .PP You can either implement different special code paths for each of these possible packet sizes and cast the hit to the appropriate hit packet type, or implement one general code path that uses the -\f[V]RTCHitN_XXX\f[R] helper functions to access hit packet components. +\f[CR]RTCHitN_XXX\f[R] helper functions to access hit packet components. .PP -These helper functions get a pointer to the hit packet (\f[V]hit\f[R] -argument), the packet size (\f[V]N\f[R] argument), and returns a -reference to a component (e.g.\ x component of \f[V]Ng\f[R]) of the the -i-th hit of the packet (\f[V]i\f[R] argument). +These helper functions get a pointer to the hit packet (\f[CR]hit\f[R] +argument), the packet size (\f[CR]N\f[R] argument), and returns a +reference to a component (e.g.\ x component of \f[CR]Ng\f[R]) of the the +i\-th hit of the packet (\f[CR]i\f[R] argument). .SS EXIT STATUS .SS SEE ALSO -.PP [RTCRayN] diff --git a/man/man3/RTCQuaternionDecomposition.3embree4 b/man/man3/RTCQuaternionDecomposition.3embree4 index 71c1e52736..e0d269b050 100644 --- a/man/man3/RTCQuaternionDecomposition.3embree4 +++ b/man/man3/RTCQuaternionDecomposition.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCQuaternionDecomposition" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCQuaternionDecomposition - structure that represents a quaternion +.EX +RTCQuaternionDecomposition \- structure that represents a quaternion decomposition of an affine transformation -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX struct RTCQuaternionDecomposition { float scale_x, scale_y, scale_z; @@ -36,11 +18,9 @@ struct RTCQuaternionDecomposition float quaternion_r, quaternion_i, quaternion_j, quaternion_k; float translation_x, translation_y, translation_z; }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The struct \f[V]RTCQuaternionDecomposition\f[R] represents an affine +The struct \f[CR]RTCQuaternionDecomposition\f[R] represents an affine transformation decomposed into three parts. An upper triangular scaling/skew/shift matrix .PP @@ -77,24 +57,22 @@ units. The passed quaternion will be normalized internally. .PP The affine transformation matrix corresponding to a -\f[V]RTCQuaternionDecomposition\f[R] is +\f[CR]RTCQuaternionDecomposition\f[R] is \f[I]T\f[R]\f[I]R\f[R]\f[I]S\f[R] and a point -\f[I]p\f[R] = (\f[I]p\f[R]~\f[I]x\f[R]~,\f[I]p\f[R]~\f[I]y\f[R]~,\f[I]p\f[R]~\f[I]z\f[R]~,1)^\f[I]T\f[R]^ +\f[I]p\f[R] = (\f[I]p\f[R]~\f[I]x\f[R]~, \f[I]p\f[R]~\f[I]y\f[R]~, \f[I]p\f[R]~\f[I]z\f[R]~, 1)^\f[I]T\f[R]^ will be transformed as .RS \f[I]p\f[R]′ = \f[I]T\f[R]\ \f[I]R\f[R]\ \f[I]S\f[R]\ \f[I]p\f[R]. .RE .PP -The functions \f[V]rtcInitQuaternionDecomposition\f[R], -\f[V]rtcQuaternionDecompositionSetQuaternion\f[R], -\f[V]rtcQuaternionDecompositionSetScale\f[R], -\f[V]rtcQuaternionDecompositionSetSkew\f[R], -\f[V]rtcQuaternionDecompositionSetShift\f[R], and -\f[V]rtcQuaternionDecompositionSetTranslation\f[R] allow to set the +The functions \f[CR]rtcInitQuaternionDecomposition\f[R], +\f[CR]rtcQuaternionDecompositionSetQuaternion\f[R], +\f[CR]rtcQuaternionDecompositionSetScale\f[R], +\f[CR]rtcQuaternionDecompositionSetSkew\f[R], +\f[CR]rtcQuaternionDecompositionSetShift\f[R], and +\f[CR]rtcQuaternionDecompositionSetTranslation\f[R] allow to set the fields of the structure more conveniently. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcSetGeometryTransformQuaternion], [rtcInitQuaternionDecomposition] diff --git a/man/man3/RTCRay.3embree4 b/man/man3/RTCRay.3embree4 index 6b8a27cc3e..05a54a5c2c 100644 --- a/man/man3/RTCRay.3embree4 +++ b/man/man3/RTCRay.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCRay" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCRay - single ray structure -\f[R] -.fi +.EX +RTCRay \- single ray structure +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTC_ALIGN(16) RTCRay @@ -46,37 +28,34 @@ struct RTC_ALIGN(16) RTCRay unsigned int id; // ray ID unsigned int flags; // ray flags }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTCRay\f[R] structure defines the ray layout for a single ray. -The ray contains the origin (\f[V]org_x\f[R], \f[V]org_y\f[R], -\f[V]org_z\f[R] members), direction vector (\f[V]dir_x\f[R], -\f[V]dir_y\f[R], \f[V]dir_z\f[R] members), and ray segment -(\f[V]tnear\f[R] and \f[V]tfar\f[R] members). +The \f[CR]RTCRay\f[R] structure defines the ray layout for a single ray. +The ray contains the origin (\f[CR]org_x\f[R], \f[CR]org_y\f[R], +\f[CR]org_z\f[R] members), direction vector (\f[CR]dir_x\f[R], +\f[CR]dir_y\f[R], \f[CR]dir_z\f[R] members), and ray segment +(\f[CR]tnear\f[R] and \f[CR]tfar\f[R] members). The ray direction does not have to be normalized, and only the parameter -range specified by the \f[V]tnear\f[R]/\f[V]tfar\f[R] interval is +range specified by the \f[CR]tnear\f[R]/\f[CR]tfar\f[R] interval is considered valid. .PP -The ray segment must be in the range [0,∞], thus ranges that start +The ray segment must be in the range [0, ∞], thus ranges that start behind the ray origin are not allowed, but ranges can reach to infinity. .PP -The ray further contains a motion blur time in the range [0,1] -(\f[V]time\f[R] member), a ray mask (\f[V]mask\f[R] member), a ray ID -(\f[V]id\f[R] member), and ray flags (\f[V]flags\f[R] member). +The ray further contains a motion blur time in the range [0, 1] +(\f[CR]time\f[R] member), a ray mask (\f[CR]mask\f[R] member), a ray ID +(\f[CR]id\f[R] member), and ray flags (\f[CR]flags\f[R] member). The ray mask can be used to mask out some geometries for some rays (see -\f[V]rtcSetGeometryMask\f[R] for more details). +\f[CR]rtcSetGeometryMask\f[R] for more details). The ray ID can be used to identify a ray inside a callback function, even if the order of rays inside a ray packet has changed. .PP -The \f[V]embree4/rtcore_ray.h\f[R] header additionally defines the same +The \f[CR]embree4/rtcore_ray.h\f[R] header additionally defines the same ray structure in structure of array (SOA) layout for API functions -accepting ray packets of size 4 (\f[V]RTCRay4\f[R] type), size 8 -(\f[V]RTCRay8\f[R] type), and size 16 (\f[V]RTCRay16\f[R] type). -The header additionally defines an \f[V]RTCRayNt\f[R] template for ray -packets of an arbitrary compile-time size. +accepting ray packets of size 4 (\f[CR]RTCRay4\f[R] type), size 8 +(\f[CR]RTCRay8\f[R] type), and size 16 (\f[CR]RTCRay16\f[R] type). +The header additionally defines an \f[CR]RTCRayNt\f[R] template for ray +packets of an arbitrary compile\-time size. .SS EXIT STATUS .SS SEE ALSO -.PP [RTCHit] diff --git a/man/man3/RTCRayHit.3embree4 b/man/man3/RTCRayHit.3embree4 index 1827c81571..98e2f8afce 100644 --- a/man/man3/RTCRayHit.3embree4 +++ b/man/man3/RTCRayHit.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCRay" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCRayHit - combined single ray/hit structure -\f[R] -.fi +.EX +RTCRayHit \- combined single ray/hit structure +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCORE_ALIGN(16) RTCRayHit @@ -34,21 +16,18 @@ struct RTCORE_ALIGN(16) RTCRayHit struct RTCRay ray; struct RTCHit hit; }; -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]RTCRayHit\f[R] structure is used as input for the -\f[V]rtcIntersect\f[R]-type functions and stores the ray to intersect +The \f[CR]RTCRayHit\f[R] structure is used as input for the +\f[CR]rtcIntersect\f[R]\-type functions and stores the ray to intersect and some hit fields that hold the intersection result afterwards. .PP -The \f[V]embree4/rtcore_ray.h\f[R] header additionally defines the same +The \f[CR]embree4/rtcore_ray.h\f[R] header additionally defines the same ray/hit structure in structure of array (SOA) layout for API functions -accepting ray packets of size 4 (\f[V]RTCRayHit4\f[R] type), size 8 -(\f[V]RTCRayHit8\f[R] type), and size 16 (\f[V]RTCRayHit16\f[R] type). -The header additionally defines an \f[V]RTCRayHitNt\f[R] template to -generate ray/hit packets of an arbitrary compile-time size. +accepting ray packets of size 4 (\f[CR]RTCRayHit4\f[R] type), size 8 +(\f[CR]RTCRayHit8\f[R] type), and size 16 (\f[CR]RTCRayHit16\f[R] type). +The header additionally defines an \f[CR]RTCRayHitNt\f[R] template to +generate ray/hit packets of an arbitrary compile\-time size. .SS EXIT STATUS .SS SEE ALSO -.PP [RTCRay], [RTCHit] diff --git a/man/man3/RTCRayHitN.3embree4 b/man/man3/RTCRayHitN.3embree4 index fd3128dd73..08c7328ebf 100644 --- a/man/man3/RTCRayHitN.3embree4 +++ b/man/man3/RTCRayHitN.3embree4 @@ -1,57 +1,36 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCRayHitN" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCRayHitN - combined ray/hit packet of runtime size -\f[R] -.fi +.EX +RTCRayHitN \- combined ray/hit packet of runtime size +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCRayHitN; struct RTCRayN* RTCRayHitN_RayN(struct RTCRayHitN* rayhit, unsigned int N); struct RTCHitN* RTCRayHitN_HitN(struct RTCRayHitN* rayhit, unsigned int N); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP When the packet size of a ray/hit structure is not known at compile time (e.g.\ when Embree returns a ray/hit packet in the -\f[V]RTCIntersectFunctionN\f[R] callback function), Embree uses the -\f[V]RTCRayHitN\f[R] type for ray packets. +\f[CR]RTCIntersectFunctionN\f[R] callback function), Embree uses the +\f[CR]RTCRayHitN\f[R] type for ray packets. These ray/hit packets can only have sizes of 1, 4, 8, or 16. No other packet size will be used. .PP You can either implement different special code paths for each of these possible packet sizes and cast the ray/hit to the appropriate ray/hit -packet type, or extract the \f[V]RTCRayN\f[R] and \f[V]RTCHitN\f[R] -components using the \f[V]rtcGetRayN\f[R] and \f[V]rtcGetHitN\f[R] -helper functions and use the \f[V]RTCRayN_XXX\f[R] and -\f[V]RTCHitN_XXX\f[R] functions to access the ray and hit parts of the +packet type, or extract the \f[CR]RTCRayN\f[R] and \f[CR]RTCHitN\f[R] +components using the \f[CR]rtcGetRayN\f[R] and \f[CR]rtcGetHitN\f[R] +helper functions and use the \f[CR]RTCRayN_XXX\f[R] and +\f[CR]RTCHitN_XXX\f[R] functions to access the ray and hit parts of the structure. .SS EXIT STATUS .SS SEE ALSO -.PP [RTCHitN] diff --git a/man/man3/RTCRayN.3embree4 b/man/man3/RTCRayN.3embree4 index 36e01d8201..09522234ed 100644 --- a/man/man3/RTCRayN.3embree4 +++ b/man/man3/RTCRayN.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTCRayN" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTCRayN - ray packet of runtime size -\f[R] -.fi +.EX +RTCRayN \- ray packet of runtime size +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCRayN; @@ -45,27 +27,24 @@ float& RTCRayN_tfar (RTCRayN* ray, unsigned int N, unsigned int i); unsigned int& RTCRayN_mask (RTCRayN* ray, unsigned int N, unsigned int i); unsigned int& RTCRayN_id (RTCRayN* ray, unsigned int N, unsigned int i); unsigned int& RTCRayN_flags(RTCRayN* ray, unsigned int N, unsigned int i); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP When the ray packet size is not known at compile time (e.g.\ when Embree -returns a ray packet in the \f[V]RTCFilterFuncN\f[R] callback function), -Embree uses the \f[V]RTCRayN\f[R] type for ray packets. +returns a ray packet in the \f[CR]RTCFilterFuncN\f[R] callback +function), Embree uses the \f[CR]RTCRayN\f[R] type for ray packets. These ray packets can only have sizes of 1, 4, 8, or 16. No other packet size will be used. .PP You can either implement different special code paths for each of these possible packet sizes and cast the ray to the appropriate ray packet type, or implement one general code path that uses the -\f[V]RTCRayN_XXX\f[R] helper functions to access the ray packet +\f[CR]RTCRayN_XXX\f[R] helper functions to access the ray packet components. .PP -These helper functions get a pointer to the ray packet (\f[V]ray\f[R] -argument), the packet size (\f[V]N\f[R] argument), and returns a -reference to a component (e.g.\ x-component of origin) of the the i-th -ray of the packet (\f[V]i\f[R] argument). +These helper functions get a pointer to the ray packet (\f[CR]ray\f[R] +argument), the packet size (\f[CR]N\f[R] argument), and returns a +reference to a component (e.g.\ x\-component of origin) of the the i\-th +ray of the packet (\f[CR]i\f[R] argument). .SS EXIT STATUS .SS SEE ALSO -.PP [RTCHitN] diff --git a/man/man3/RTC_GEOMETRY_TYPE_CURVE.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_CURVE.3embree4 index ab2b6334b2..dfc46aa037 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_CURVE.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_CURVE.3embree4 @@ -1,75 +1,57 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_*_CURVE" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE - +.EX +RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE \- flat curve geometry with linear basis -RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE - +RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE \- flat curve geometry with cubic Bézier basis -RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE - - flat curve geometry with cubic B-spline basis +RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE \- + flat curve geometry with cubic B\-spline basis -RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE - +RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE \- flat curve geometry with cubic Hermite basis -RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE - - flat curve geometry with Catmull-Rom basis +RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE \- + flat curve geometry with Catmull\-Rom basis -RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE - +RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE \- flat normal oriented curve geometry with cubic Bézier basis -RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE - - flat normal oriented curve geometry with cubic B-spline basis +RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE \- + flat normal oriented curve geometry with cubic B\-spline basis -RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_HERMITE_CURVE - +RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_HERMITE_CURVE \- flat normal oriented curve geometry with cubic Hermite basis -RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE - - flat normal oriented curve geometry with Catmull-Rom basis +RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE \- + flat normal oriented curve geometry with Catmull\-Rom basis -RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE - - capped cone curve geometry with linear basis - discontinuous at edge boundaries +RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE \- + capped cone curve geometry with linear basis \- discontinuous at edge boundaries -RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE - +RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE \- capped cone curve geometry with linear basis and spherical ending -RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE - +RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE \- swept surface curve geometry with cubic Bézier basis -RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE - - swept surface curve geometry with cubic B-spline basis +RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE \- + swept surface curve geometry with cubic B\-spline basis -RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE - +RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE \- swept surface curve geometry with cubic Hermite basis -RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE - - swept surface curve geometry with Catmull-Rom basis -\f[R] -.fi +RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE \- + swept surface curve geometry with Catmull\-Rom basis +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include rtcNewGeometry(device, RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE); @@ -87,78 +69,76 @@ rtcNewGeometry(device, RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE); rtcNewGeometry(device, RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE); rtcNewGeometry(device, RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE); rtcNewGeometry(device, RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Curves with per vertex radii are supported with linear, cubic Bézier, -cubic B-spline, and cubic Hermite bases. +cubic B\-spline, and cubic Hermite bases. Such curve geometries are created by passing -\f[V]RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_HERMITE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_CATMULL_ROM_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE\f[R], or -\f[V]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] to the -\f[V]rtcNewGeometry\f[R] function. +\f[CR]RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_HERMITE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_FLAT_CATMULL_ROM_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE\f[R], or +\f[CR]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] to the +\f[CR]rtcNewGeometry\f[R] function. The curve indices can be specified through an index buffer -(\f[V]RTC_BUFFER_TYPE_INDEX\f[R]) and the curve vertices through a -vertex buffer (\f[V]RTC_BUFFER_TYPE_VERTEX\f[R]). +(\f[CR]RTC_BUFFER_TYPE_INDEX\f[R]) and the curve vertices through a +vertex buffer (\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R]). For the Hermite basis a tangent buffer -(\f[V]RTC_BUFFER_TYPE_TANGENT\f[R]), normal oriented curves a normal -buffer (\f[V]RTC_BUFFER_TYPE_NORMAL\f[R]), and for normal oriented +(\f[CR]RTC_BUFFER_TYPE_TANGENT\f[R]), normal oriented curves a normal +buffer (\f[CR]RTC_BUFFER_TYPE_NORMAL\f[R]), and for normal oriented Hermite curves a normal derivative buffer -(\f[V]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R]) has to get specified +(\f[CR]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R]) has to get specified additionally. -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. .PP -The index buffer contains an array of 32-bit indices -(\f[V]RTC_FORMAT_UINT\f[R] format), each pointing to the first control +The index buffer contains an array of 32\-bit indices +(\f[CR]RTC_FORMAT_UINT\f[R] format), each pointing to the first control vertex in the vertex buffer, but also to the first tangent in the tangent buffer, and first normal in the normal buffer if these buffers are present. .PP The vertex buffer stores each control vertex in the form of a single -precision position and radius stored in (\f[V]x\f[R], \f[V]y\f[R], -\f[V]z\f[R], \f[V]r\f[R]) order in memory (\f[V]RTC_FORMAT_FLOAT4\f[R] -format). +precision position and radius stored in (\f[CR]x\f[R], \f[CR]y\f[R], +\f[CR]z\f[R], \f[CR]r\f[R]) order in memory +(\f[CR]RTC_FORMAT_FLOAT4\f[R] format). The number of vertices is inferred from the size of this buffer. The radii may be smaller than zero but the interpolated radii should always be greater or equal to zero. Similarly, the tangent buffer stores the derivative of each control -vertex (\f[V]x\f[R], \f[V]y\f[R], \f[V]z\f[R], \f[V]r\f[R] order and -\f[V]RTC_FORMAT_FLOAT4\f[R] format) and the normal buffer stores a -single precision normal per control vertex (\f[V]x\f[R], \f[V]y\f[R], -\f[V]z\f[R] order and \f[V]RTC_FORMAT_FLOAT3\f[R] format). +vertex (\f[CR]x\f[R], \f[CR]y\f[R], \f[CR]z\f[R], \f[CR]r\f[R] order and +\f[CR]RTC_FORMAT_FLOAT4\f[R] format) and the normal buffer stores a +single precision normal per control vertex (\f[CR]x\f[R], \f[CR]y\f[R], +\f[CR]z\f[R] order and \f[CR]RTC_FORMAT_FLOAT3\f[R] format). .SS Linear Basis -.PP For the linear basis the indices point to the first of 2 consecutive control points in the vertex buffer. The first control point is the start and the second control point the end of the line segment. -When constructing hair strands in this basis, the end-point can be +When constructing hair strands in this basis, the end\-point can be shared with the start of the next line segment. .PP For the linear basis the user optionally can provide a flags buffer of -type \f[V]RTC_BUFFER_TYPE_FLAGS\f[R] which contains bytes that encode if -the left neighbor segment (\f[V]RTC_CURVE_FLAG_NEIGHBOR_LEFT\f[R] flag) -and/or right neighbor segment (\f[V]RTC_CURVE_FLAG_NEIGHBOR_RIGHT\f[R] -flags) exist (see [RTCCurveFlags]). +type \f[CR]RTC_BUFFER_TYPE_FLAGS\f[R] which contains bytes that encode +if the left neighbor segment (\f[CR]RTC_CURVE_FLAG_NEIGHBOR_LEFT\f[R] +flag) and/or right neighbor segment +(\f[CR]RTC_CURVE_FLAG_NEIGHBOR_RIGHT\f[R] flags) exist (see +[RTCCurveFlags]). If this buffer is not set, than the left/right neighbor bits are automatically calculated base on the index buffer (left segment exists -if segment(id-1)+1 == segment(id) and right segment exists if -segment(id+1)-1 == segment(id)). +if segment(id\-1)+1 == segment(id) and right segment exists if +segment(id+1)\-1 == segment(id)). .PP A left neighbor segment is assumed to end at the start vertex of the current segment, and to start at the previous vertex in the vertex @@ -171,7 +151,6 @@ Only when the left and right bits are properly specified the current segment can properly attach to the left and/or right neighbor, otherwise the touching area may not get rendered properly. .SS Bézier Basis -.PP For the cubic Bézier basis the indices point to the first of 4 consecutive control points in the vertex buffer. These control points use the cubic Bézier basis, where the first control @@ -179,11 +158,10 @@ point represents the start point of the curve, and the 4th control point the end point of the curve. The Bézier basis is interpolating, thus the curve does go exactly through the first and fourth control vertex. -.SS B-spline Basis -.PP -For the cubic B-spline basis the indices point to the first of 4 +.SS B\-spline Basis +For the cubic B\-spline basis the indices point to the first of 4 consecutive control points in the vertex buffer. -These control points make up a cardinal cubic B-spline (implicit +These control points make up a cardinal cubic B\-spline (implicit equidistant knot vector). This basis is not interpolating, thus the curve does in general not go through any of the control points directly. @@ -191,9 +169,8 @@ A big advantage of this basis is that 3 control points can be shared for two continuous neighboring curve segments, e.g.\ the curves (p0,p1,p2,p3) and (p1,p2,p3,p4) are C1 continuous. This feature makes this basis a good choice to construct continuous -multi-segment curves, as memory consumption can be kept minimal. +multi\-segment curves, as memory consumption can be kept minimal. .SS Hermite Basis -.PP For the cubic Hermite basis the indices point to the first of 2 consecutive points in the vertex buffer, and the first of 2 consecutive tangents in the tangent buffer. @@ -203,41 +180,39 @@ second control point, and the first order derivative at the begin and end matches exactly the value specified in the tangent buffer. When connecting two segments continuously, the end point and tangent of the previous segment can be shared. -Different versions of Catmull-Rom splines can be easily constructed +Different versions of Catmull\-Rom splines can be easily constructed using the Hermite basis, by calculating a proper tangent buffer from the control points. -.SS Catmull-Rom Basis -.PP -For the Catmull-Rom basis the indices point to the first of 4 +.SS Catmull\-Rom Basis +For the Catmull\-Rom basis the indices point to the first of 4 consecutive control points in the vertex buffer. -This basis goes through p1 and p2, with tangents (p2-p0)/2 and -(p3-p1)/2. +This basis goes through p1 and p2, with tangents (p2\-p0)/2 and +(p3\-p1)/2. .SS Flat Curves -.PP -The \f[V]RTC_GEOMETRY_TYPE_FLAT_*\f[R] flat mode is a fast mode designed -to render distant hair. +The \f[CR]RTC_GEOMETRY_TYPE_FLAT_*\f[R] flat mode is a fast mode +designed to render distant hair. In this mode the curve is rendered as a connected sequence of ray facing quads. Individual quads are considered to have subpixel size, and zooming onto the curve might show geometric artifacts. The number of quads to subdivide into can be specified through the -\f[V]rtcSetGeometryTessellationRate\f[R] function. +\f[CR]rtcSetGeometryTessellationRate\f[R] function. By default the tessellation rate is 4. .SS Normal Oriented Curves -.PP -The \f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_*\f[R] mode is a mode +The \f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_*\f[R] mode is a mode designed to render blades of grass. In this mode a vertex spline has to get specified as for the previous modes, but additionally a normal spline is required. -If the Hermite basis is used, the \f[V]RTC_BUFFER_TYPE_NORMAL\f[R] and -\f[V]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R] buffers have both to be set. +If the Hermite basis is used, the \f[CR]RTC_BUFFER_TYPE_NORMAL\f[R] and +\f[CR]RTC_BUFFER_TYPE_NORMAL_DERIVATIVE\f[R] buffers have both to be +set. .PP The curve is rendered as a flat band whose center approximately follows the provided vertex spline, whose half width approximately follows the provided radius spline, and whose normal orientation approximately follows the provided normal spline. .PP -To intersect the normal oriented curve, we perform a newton-raphson +To intersect the normal oriented curve, we perform a newton\-raphson style intersection of a ray with a tensor product surface of a linear basis (perpendicular to the curve) and cubic Bézier basis (along the curve). @@ -256,13 +231,12 @@ We further assume second order derivatives of the center curve to be zero for this construction, as otherwise very large curvatures occurring in corner cases, can thicken the constructed curve significantly. .SS Round Curves -.PP -In the \f[V]RTC_GEOMETRY_TYPE_ROUND_*\f[R] round mode, a real geometric +In the \f[CR]RTC_GEOMETRY_TYPE_ROUND_*\f[R] round mode, a real geometric surface is rendered for the curve, which is more expensive but allows closeup views. .PP For the linear basis the round mode renders a cone that tangentially -touches a start-sphere and end-sphere. +touches a start\-sphere and end\-sphere. The start sphere is rendered when no previous segments is indicated by the neighbor bits. The end sphere is always rendered but parts that lie inside the next @@ -278,21 +252,21 @@ As a limitation, the radius of the curve has to be smaller than the curvature radius of the curve at each location on the curve. .PP The intersection with the curve segment stores the parametric hit -location along the curve segment as u-coordinate (range 0 to +1). +location along the curve segment as u\-coordinate (range 0 to +1). .PP -For flat curves, the v-coordinate is set to the normalized distance in -the range -1 to +1. -For normal oriented curves the v-coordinate is in the range 0 to 1. -For the linear basis and in round mode the v-coordinate is set to zero. +For flat curves, the v\-coordinate is set to the normalized distance in +the range \-1 to +1. +For normal oriented curves the v\-coordinate is in the range 0 to 1. +For the linear basis and in round mode the v\-coordinate is set to zero. .PP -In flat mode, the geometry normal \f[V]Ng\f[R] is set to the tangent of +In flat mode, the geometry normal \f[CR]Ng\f[R] is set to the tangent of the curve at the hit location. In round mode and for normal oriented curves, the geometry normal -\f[V]Ng\f[R] is set to the non-normalized geometric normal of the +\f[CR]Ng\f[R] is set to the non\-normalized geometric normal of the surface. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers must have the same stride and size. For the Hermite basis also a tangent buffer has to be set for each time @@ -302,9 +276,7 @@ for each time step. Also see tutorials [Hair] and [Curves] for examples of how to create and use curve geometries. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [RTCCurveFlags] diff --git a/man/man3/RTC_GEOMETRY_TYPE_GRID.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_GRID.3embree4 index 2fc57ef425..40ac600950 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_GRID.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_GRID.3embree4 @@ -1,98 +1,74 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_GRID" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_GRID - grid geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_GRID \- grid geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_GRID); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Grid meshes are created by passing \f[V]RTC_GEOMETRY_TYPE_GRID\f[R] to -the \f[V]rtcNewGeometry\f[R] function call, and contain an array of grid -primitives. +Grid meshes are created by passing \f[CR]RTC_GEOMETRY_TYPE_GRID\f[R] to +the \f[CR]rtcNewGeometry\f[R] function call, and contain an array of +grid primitives. This array of grids can be specified by setting up a grid buffer (with -\f[V]RTC_BUFFER_TYPE_GRID\f[R] type and \f[V]RTC_FORMAT_GRID\f[R] +\f[CR]RTC_BUFFER_TYPE_GRID\f[R] type and \f[CR]RTC_FORMAT_GRID\f[R] format) and the grid mesh vertices by setting a vertex buffer -(\f[V]RTC_BUFFER_TYPE_VERTEX\f[R] type). -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +(\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] type). +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. The number of grid primitives in the grid mesh is inferred from the size of the grid buffer. .PP -The vertex buffer contains an array of single precision \f[V]x\f[R], -\f[V]y\f[R], \f[V]z\f[R] floating point coordinates -(\f[V]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices is +The vertex buffer contains an array of single precision \f[CR]x\f[R], +\f[CR]y\f[R], \f[CR]z\f[R] floating point coordinates +(\f[CR]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices is inferred from the size of that buffer. .PP -Each grid in the grid buffer is of the type \f[V]RTCGrid\f[R]: +Each grid in the grid buffer is of the type \f[CR]RTCGrid\f[R]: .IP -.nf -\f[C] +.EX struct RTCGrid { unsigned int startVertexID; unsigned int stride; unsigned short width,height; }; -\f[R] -.fi +.EE .PP -The \f[V]RTCGrid\f[R] structure describes a 2D grid of vertices (with +The \f[CR]RTCGrid\f[R] structure describes a 2D grid of vertices (with respect to the vertex buffer of the grid mesh). -The \f[V]width\f[R] and \f[V]height\f[R] members specify the number of -vertices in u and v direction, e.g.\ setting both \f[V]width\f[R] and -\f[V]height\f[R] to 3 sets up a 3×3 vertex grid. -The maximum allowed \f[V]width\f[R] and \f[V]height\f[R] is 32767. -The \f[V]startVertexID\f[R] specifies the ID of the top-left vertex in -the vertex grid, while the \f[V]stride\f[R] parameter specifies a stride -(in number of vertices) used to step to the next row. +The \f[CR]width\f[R] and \f[CR]height\f[R] members specify the number of +vertices in u and v direction, e.g.\ setting both \f[CR]width\f[R] and +\f[CR]height\f[R] to 3 sets up a 3×3 vertex grid. +The maximum allowed \f[CR]width\f[R] and \f[CR]height\f[R] is 32767. +The \f[CR]startVertexID\f[R] specifies the ID of the top\-left vertex in +the vertex grid, while the \f[CR]stride\f[R] parameter specifies a +stride (in number of vertices) used to step to the next row. .PP -A vertex grid of dimensions \f[V]width\f[R] and \f[V]height\f[R] is -treated as a \f[V](width-1)\f[R] x \f[V](height-1)\f[R] grid of -\f[V]quads\f[R] (triangle-pairs), with the same shared edge handling as -for regular quad meshes. -However, the \f[V]u\f[R]/\f[V]v\f[R] coordinates have the uniform range -\f[V][0..1]\f[R] for an entire vertex grid. -The \f[V]u\f[R] direction follows the \f[V]width\f[R] of the grid while -the \f[V]v\f[R] direction the \f[V]height\f[R]. +A vertex grid of dimensions \f[CR]width\f[R] and \f[CR]height\f[R] is +treated as a \f[CR](width\-1)\f[R] x \f[CR](height\-1)\f[R] grid of +\f[CR]quads\f[R] (triangle\-pairs), with the same shared edge handling +as for regular quad meshes. +However, the \f[CR]u\f[R]/\f[CR]v\f[R] coordinates have the uniform +range \f[CR][0..1]\f[R] for an entire vertex grid. +The \f[CR]u\f[R] direction follows the \f[CR]width\f[R] of the grid +while the \f[CR]v\f[R] direction the \f[CR]height\f[R]. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers must have the same stride and size. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry] diff --git a/man/man3/RTC_GEOMETRY_TYPE_INSTANCE.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_INSTANCE.3embree4 index 059c62a815..b679dbbb7b 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_INSTANCE.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_INSTANCE.3embree4 @@ -1,95 +1,74 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_INSTANCE" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_INSTANCE - instance geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_INSTANCE \- instance geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_INSTANCE); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Embree supports instancing of scenes using affine transformations (3×3 matrix plus translation). As the instanced scene is stored only a single time, even if instanced to multiple locations, this feature can be used to create very complex scenes with small memory footprint. .PP -Embree supports both single-level instancing and multi-level instancing. +Embree supports both single\-level instancing and multi\-level +instancing. The maximum instance nesting depth is -\f[V]RTC_MAX_INSTANCE_LEVEL_COUNT\f[R]; it can be configured at -compile-time using the constant -\f[V]EMBREE_MAX_INSTANCE_LEVEL_COUNT\f[R]. +\f[CR]RTC_MAX_INSTANCE_LEVEL_COUNT\f[R]; it can be configured at +compile\-time using the constant +\f[CR]EMBREE_MAX_INSTANCE_LEVEL_COUNT\f[R]. Users should adapt this constant to their needs: instances nested any deeper are silently ignored in release mode, and cause assertions in debug mode. .PP -Instances are created by passing \f[V]RTC_GEOMETRY_TYPE_INSTANCE\f[R] to -the \f[V]rtcNewGeometry\f[R] function call. +Instances are created by passing \f[CR]RTC_GEOMETRY_TYPE_INSTANCE\f[R] +to the \f[CR]rtcNewGeometry\f[R] function call. The instanced scene can be set using the -\f[V]rtcSetGeometryInstancedScene\f[R] call, and the affine -transformation can be set using the \f[V]rtcSetGeometryTransform\f[R] +\f[CR]rtcSetGeometryInstancedScene\f[R] call, and the affine +transformation can be set using the \f[CR]rtcSetGeometryTransform\f[R] function. .PP -Please note that \f[V]rtcCommitScene\f[R] on the instanced scene should -be called first, followed by \f[V]rtcCommitGeometry\f[R] on the -instance, followed by \f[V]rtcCommitScene\f[R] for the top-level scene +Please note that \f[CR]rtcCommitScene\f[R] on the instanced scene should +be called first, followed by \f[CR]rtcCommitGeometry\f[R] on the +instance, followed by \f[CR]rtcCommitScene\f[R] for the top\-level scene containing the instance. .PP -If a ray hits the instance, the \f[V]geomID\f[R] and \f[V]primID\f[R] +If a ray hits the instance, the \f[CR]geomID\f[R] and \f[CR]primID\f[R] members of the hit are set to the geometry ID and primitive ID of the -hit primitive in the instanced scene, and the \f[V]instID\f[R] member of -the hit is set to the geometry ID of the instance in the top-level +hit primitive in the instanced scene, and the \f[CR]instID\f[R] member +of the hit is set to the geometry ID of the instance in the top\-level scene. .PP The instancing scheme can also be implemented using user geometries. -To achieve this, the user geometry code should set the \f[V]instID\f[R] +To achieve this, the user geometry code should set the \f[CR]instID\f[R] member of the ray query context to the geometry ID of the instance, then -trace the transformed ray, and finally set the \f[V]instID\f[R] field of -the ray query context again to -1. -The \f[V]instID\f[R] field is copied automatically by each primitive -intersector into the \f[V]instID\f[R] field of the hit structure when +trace the transformed ray, and finally set the \f[CR]instID\f[R] field +of the ray query context again to \-1. +The \f[CR]instID\f[R] field is copied automatically by each primitive +intersector into the \f[CR]instID\f[R] field of the hit structure when the primitive is hit. See the [User Geometry] tutorial for an example. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] function. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] function. Then a transformation for each time step can be specified using the -\f[V]rtcSetGeometryTransform\f[R] function. +\f[CR]rtcSetGeometryTransform\f[R] function. .PP See tutorials [Instanced Geometry] and [Multi Level Instancing] for examples of how to use instances. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcSetGeometryInstancedScene], [rtcSetGeometryTransform] diff --git a/man/man3/RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.3embree4 index 1fbc6f8530..fd61c9d1e7 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_INSTANCE_ARRAY.3embree4 @@ -1,40 +1,20 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_INSTANCE_ARRAY" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_INSTANCE_ARRAY - instance array geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_INSTANCE_ARRAY \- instance array geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_INSTANCE_ARRAY); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Embree supports instance arrays, which is a more memory efficient way to represent large amounts of instances of the same or a small set of (sub)scenes. @@ -49,68 +29,66 @@ corresponding index buffer that specifies which instance of the instance array instances which of the scenes in the scenes array. .PP Instance arrays are created by passing -\f[V]RTC_GEOMETRY_TYPE_INSTANCE_ARRAY\f[R] to the -\f[V]rtcNewGeometry\f[R] function call. +\f[CR]RTC_GEOMETRY_TYPE_INSTANCE_ARRAY\f[R] to the +\f[CR]rtcNewGeometry\f[R] function call. The instanced scene can be either be set using the -\f[V]rtcSetGeometryInstancedScene\f[R] call, or if multiple scenes +\f[CR]rtcSetGeometryInstancedScene\f[R] call, or if multiple scenes should be instanced by passing an array of scenes using -\f[V]rtcSetGeometryInstancedScenes\f[R]. +\f[CR]rtcSetGeometryInstancedScenes\f[R]. The latter also requires to specify an index buffer using -\f[V]rtcSetNewGeometryBuffer\f[R] or -\f[V]rtcSetSharedGeometryBuffer\f[R] with -\f[V]RTC_BUFFER_TYPE_INDEX\f[R] as the buffer type. +\f[CR]rtcSetNewGeometryBuffer\f[R] or +\f[CR]rtcSetSharedGeometryBuffer\f[R] with +\f[CR]RTC_BUFFER_TYPE_INDEX\f[R] as the buffer type. .PP Because the transformation information can become large for a large amount of instances, the instance array allows to share the transformation buffer between the user application and Embree. It can be either stored in a buffer created by Embree with -\f[V]rtcSetNewGeometryBuffer\f[R] or an already existing buffer can be -shared using \f[V]rtcSetSharedGeometryBuffer\f[R]. +\f[CR]rtcSetNewGeometryBuffer\f[R] or an already existing buffer can be +shared using \f[CR]rtcSetSharedGeometryBuffer\f[R]. In either case, the buffer type has to be -\f[V]RTC_BUFFER_TYPE_TRANSFORM\f[R] and the allowed formats are -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R], -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R], -\f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R], and -\f[V]RTC_FORMAT_QUATERNION_DECOMPOSITION\f[R]. +\f[CR]RTC_BUFFER_TYPE_TRANSFORM\f[R] and the allowed formats are +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R], +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R], +\f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R], and +\f[CR]RTC_FORMAT_QUATERNION_DECOMPOSITION\f[R]. Embree will not modify the data in the transformation buffer. .PP -Embree instance arrays support both single-level instancing and -multi-level instancing. +Embree instance arrays support both single\-level instancing and +multi\-level instancing. The maximum instance nesting depth is -\f[V]RTC_MAX_INSTANCE_LEVEL_COUNT\f[R]; it can be configured at -compile-time using the constant -\f[V]EMBREE_MAX_INSTANCE_LEVEL_COUNT\f[R]. +\f[CR]RTC_MAX_INSTANCE_LEVEL_COUNT\f[R]; it can be configured at +compile\-time using the constant +\f[CR]EMBREE_MAX_INSTANCE_LEVEL_COUNT\f[R]. Users should adapt this constant to their needs: instances nested any deeper are silently ignored in release mode, and cause assertions in debug mode. .PP -Please note that \f[V]rtcCommitScene\f[R] on the instanced scene(s) -should be called first, followed by \f[V]rtcCommitGeometry\f[R] on the -instance array, followed by \f[V]rtcCommitScene\f[R] for the top-level +Please note that \f[CR]rtcCommitScene\f[R] on the instanced scene(s) +should be called first, followed by \f[CR]rtcCommitGeometry\f[R] on the +instance array, followed by \f[CR]rtcCommitScene\f[R] for the top\-level scene containing the instance array. .PP -If a ray hits the instance, the \f[V]geomID\f[R] and \f[V]primID\f[R] +If a ray hits the instance, the \f[CR]geomID\f[R] and \f[CR]primID\f[R] members of the hit are set to the geometry ID and primitive ID of the hit primitive in the instanced scene. -The \f[V]instID\f[R] member of the hit is set to the geometry ID of the -instance array in the top-level scene and the \f[V]instPrimID\f[R] +The \f[CR]instID\f[R] member of the hit is set to the geometry ID of the +instance array in the top\-level scene and the \f[CR]instPrimID\f[R] member is set to the index of the hit instance of the instance array. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] function. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] function. Then a transformation for each time step can be specified using the -\f[V]rtcSetNewGeometryBuffer\f[R] or -\f[V]rtcSetSharedGeometryBuffer\f[R] function and passing the time step -as the \f[V]slot\f[R] parameter of these calls. +\f[CR]rtcSetNewGeometryBuffer\f[R] or +\f[CR]rtcSetSharedGeometryBuffer\f[R] function and passing the time step +as the \f[CR]slot\f[R] parameter of these calls. .PP See the [Instance Array Geometry] tutorial for an example of how to use instance arrays. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcSetGeometryInstancedScene], [rtcSetGeometryInstancedScenes], [rtcSetNewGeometryBuffer], [rtcSetSharedGeometryBuffer], [rtcGetGeometryTransformEx] diff --git a/man/man3/RTC_GEOMETRY_TYPE_POINT.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_POINT.3embree4 index 5bbf026a83..64eb9e25d0 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_POINT.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_POINT.3embree4 @@ -1,81 +1,61 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_*_POINT" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_SPHERE_POINT - +.EX +RTC_GEOMETRY_TYPE_SPHERE_POINT \- point geometry spheres -RTC_GEOMETRY_TYPE_DISC_POINT - - point geometry with ray-oriented discs +RTC_GEOMETRY_TYPE_DISC_POINT \- + point geometry with ray\-oriented discs -RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT - - point geometry with normal-oriented discs -\f[R] -.fi +RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT \- + point geometry with normal\-oriented discs +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include rtcNewGeometry(device, RTC_GEOMETRY_TYPE_SPHERE_POINT); rtcNewGeometry(device, RTC_GEOMETRY_TYPE_DISC_POINT); rtcNewGeometry(device, RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Points with per vertex radii are supported with sphere, ray-oriented -discs, and normal-oriented discs geometric representations. +Points with per vertex radii are supported with sphere, ray\-oriented +discs, and normal\-oriented discs geometric representations. Such point geometries are created by passing -\f[V]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R], -\f[V]RTC_GEOMETRY_TYPE_DISC_POINT\f[R], or -\f[V]RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT\f[R] to the -\f[V]rtcNewGeometry\f[R] function. +\f[CR]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R], +\f[CR]RTC_GEOMETRY_TYPE_DISC_POINT\f[R], or +\f[CR]RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT\f[R] to the +\f[CR]rtcNewGeometry\f[R] function. The point vertices can be specified t through a vertex buffer -(\f[V]RTC_BUFFER_TYPE_VERTEX\f[R]). +(\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R]). For the normal oriented discs a normal buffer -(\f[V]RTC_BUFFER_TYPE_NORMAL\f[R]) has to get specified additionally. -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +(\f[CR]RTC_BUFFER_TYPE_NORMAL\f[R]) has to get specified additionally. +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. .PP The vertex buffer stores each control vertex in the form of a single -precision position and radius stored in (\f[V]x\f[R], \f[V]y\f[R], -\f[V]z\f[R], \f[V]r\f[R]) order in memory (\f[V]RTC_FORMAT_FLOAT4\f[R] -format). +precision position and radius stored in (\f[CR]x\f[R], \f[CR]y\f[R], +\f[CR]z\f[R], \f[CR]r\f[R]) order in memory +(\f[CR]RTC_FORMAT_FLOAT4\f[R] format). The number of vertices is inferred from the size of this buffer. Similarly, the normal buffer stores a single precision normal per -control vertex (\f[V]x\f[R], \f[V]y\f[R], \f[V]z\f[R] order and -\f[V]RTC_FORMAT_FLOAT3\f[R] format). +control vertex (\f[CR]x\f[R], \f[CR]y\f[R], \f[CR]z\f[R] order and +\f[CR]RTC_FORMAT_FLOAT3\f[R] format). .PP -In the \f[V]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R] mode, a real geometric +In the \f[CR]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R] mode, a real geometric surface is rendered for the curve, which is more expensive but allows closeup views. .PP -The \f[V]RTC_GEOMETRY_TYPE_DISC_POINT\f[R] flat mode is a fast mode +The \f[CR]RTC_GEOMETRY_TYPE_DISC_POINT\f[R] flat mode is a fast mode designed to render distant points. In this mode the point is rendered as a ray facing disc. .PP -The \f[V]RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT\f[R] mode is a mode +The \f[CR]RTC_GEOMETRY_TYPE_ORIENTED_DISC_POINT\f[R] mode is a mode designed as a midpoint geometrically between ray facing discs and spheres. In this mode the point is rendered as a normal oriented disc. @@ -83,17 +63,15 @@ In this mode the point is rendered as a normal oriented disc. For all point types, only the hit distance and geometry normal is returned as hit information, u and v are set to zero. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers must have the same stride and size. .PP Also see tutorial [Points] for an example of how to create and use point geometries. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry] diff --git a/man/man3/RTC_GEOMETRY_TYPE_QUAD.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_QUAD.3embree4 index 53453135dd..774b54a3c5 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_QUAD.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_QUAD.3embree4 @@ -1,99 +1,73 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_QUAD" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_QUAD - quad geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_QUAD \- quad geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_QUAD); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Quad meshes are created by passing \f[V]RTC_GEOMETRY_TYPE_QUAD\f[R] to -the \f[V]rtcNewGeometry\f[R] function call. +Quad meshes are created by passing \f[CR]RTC_GEOMETRY_TYPE_QUAD\f[R] to +the \f[CR]rtcNewGeometry\f[R] function call. The quad indices can be specified by setting an index buffer -(\f[V]RTC_BUFFER_TYPE_INDEX\f[R] type) and the quad vertices by setting -a vertex buffer (\f[V]RTC_BUFFER_TYPE_VERTEX\f[R] type). -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +(\f[CR]RTC_BUFFER_TYPE_INDEX\f[R] type) and the quad vertices by setting +a vertex buffer (\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] type). +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. -The index buffer contains an array of four 32-bit indices per quad -(\f[V]RTC_FORMAT_UINT4\f[R] format), and the number of primitives is +The index buffer contains an array of four 32\-bit indices per quad +(\f[CR]RTC_FORMAT_UINT4\f[R] format), and the number of primitives is inferred from the size of that buffer. -The vertex buffer contains an array of single precision \f[V]x\f[R], -\f[V]y\f[R], \f[V]z\f[R] floating point coordinates -(\f[V]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices is +The vertex buffer contains an array of single precision \f[CR]x\f[R], +\f[CR]y\f[R], \f[CR]z\f[R] floating point coordinates +(\f[CR]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices is inferred from the size of that buffer. The vertex buffer can be at most 16 GB large. .PP A quad is internally handled as a pair of two triangles -\f[V]v0,v1,v3\f[R] and \f[V]v2,v3,v1\f[R], with the -\f[V]u\[aq]\f[R]/\f[V]v\[aq]\f[R] coordinates of the second triangle -corrected by \f[V]u = 1-u\[aq]\f[R] and \f[V]v = 1-v\[aq]\f[R] to -produce a quad parametrization where \f[V]u\f[R] and \f[V]v\f[R] are in -the range 0 to 1. -Thus the parametrization of a quad uses the first vertex \f[V]p0\f[R] as -base point, and the vector \f[V]p1 - p0\f[R] as \f[V]u\f[R]-direction, -and \f[V]p3 - p0\f[R] as v-direction. -Thus vertex attributes \f[V]t0,t1,t2,t3\f[R] can be bilinearly +\f[CR]v0,v1,v3\f[R] and \f[CR]v2,v3,v1\f[R], with the +\f[CR]u\[aq]\f[R]/\f[CR]v\[aq]\f[R] coordinates of the second triangle +corrected by \f[CR]u = 1\-u\[aq]\f[R] and \f[CR]v = 1\-v\[aq]\f[R] to +produce a quad parametrization where \f[CR]u\f[R] and \f[CR]v\f[R] are +in the range 0 to 1. +Thus the parametrization of a quad uses the first vertex \f[CR]p0\f[R] +as base point, and the vector \f[CR]p1 \- p0\f[R] as +\f[CR]u\f[R]\-direction, and \f[CR]p3 \- p0\f[R] as v\-direction. +Thus vertex attributes \f[CR]t0,t1,t2,t3\f[R] can be bilinearly interpolated over the quadrilateral the following way: .IP -.nf -\f[C] -t_uv = (1-v)((1-u)*t0 + u*t1) + v*((1-u)*t3 + u*t2) -\f[R] -.fi +.EX +t_uv = (1\-v)((1\-u)*t0 + u*t1) + v*((1\-u)*t3 + u*t2) +.EE .PP Mixed triangle/quad meshes are supported by encoding a triangle as a quad, which can be achieved by replicating the last triangle vertex -(\f[V]v0,v1,v2\f[R] -> \f[V]v0,v1,v2,v2\f[R]). +(\f[CR]v0,v1,v2\f[R] \-> \f[CR]v0,v1,v2,v2\f[R]). This way the second triangle is a line (which can never get hit), and the parametrization of the first triangle is compatible with the standard triangle parametrization. .PP -A quad whose vertices are laid out counter-clockwise has its geometry +A quad whose vertices are laid out counter\-clockwise has its geometry normal pointing upwards outside the front face, like illustrated in the following picture. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers must have the same stride and size. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry] diff --git a/man/man3/RTC_GEOMETRY_TYPE_SUBDIVISION.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_SUBDIVISION.3embree4 index d861baad0e..cca850496b 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_SUBDIVISION.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_SUBDIVISION.3embree4 @@ -1,88 +1,68 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_SUBDIVISION" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_SUBDIVISION - subdivision geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_SUBDIVISION \- subdivision geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_SUBDIVISION); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Catmull-Clark subdivision meshes are supported, including support for -edge creases, vertex creases, holes, non-manifold geometry, and -face-varying interpolation. +Catmull\-Clark subdivision meshes are supported, including support for +edge creases, vertex creases, holes, non\-manifold geometry, and +face\-varying interpolation. The number of vertices per face can be in the range of 3 to 15 vertices (triangles, quadrilateral, pentagons, etc). .PP Subdivision meshes are created by passing -\f[V]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R] to the \f[V]rtcNewGeometry\f[R] -function. +\f[CR]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R] to the +\f[CR]rtcNewGeometry\f[R] function. Various buffers need to be set by the application to set up the subdivision mesh. -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. -The face buffer (\f[V]RTC_BUFFER_TYPE_FACE\f[R] type and -\f[V]RTC_FORMAT_UINT\f[R] format) contains the number of edges/indices +The face buffer (\f[CR]RTC_BUFFER_TYPE_FACE\f[R] type and +\f[CR]RTC_FORMAT_UINT\f[R] format) contains the number of edges/indices of each face (3 to 15), and the number of faces is inferred from the size of this buffer. -The index buffer (\f[V]RTC_BUFFER_TYPE_INDEX\f[R] type) contains -multiple (3 to 15) 32-bit vertex indices (\f[V]RTC_FORMAT_UINT\f[R] +The index buffer (\f[CR]RTC_BUFFER_TYPE_INDEX\f[R] type) contains +multiple (3 to 15) 32\-bit vertex indices (\f[CR]RTC_FORMAT_UINT\f[R] format) for each face, and the number of edges is inferred from the size of this buffer. -The vertex buffer (\f[V]RTC_BUFFER_TYPE_VERTEX\f[R] type) stores an -array of single precision \f[V]x\f[R], \f[V]y\f[R], \f[V]z\f[R] floating -point coordinates (\f[V]RTC_FORMAT_FLOAT3\f[R] format), and the number -of vertices is inferred from the size of this buffer. +The vertex buffer (\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] type) stores an +array of single precision \f[CR]x\f[R], \f[CR]y\f[R], \f[CR]z\f[R] +floating point coordinates (\f[CR]RTC_FORMAT_FLOAT3\f[R] format), and +the number of vertices is inferred from the size of this buffer. .PP Optionally, the application may set additional index buffers using different buffer slots if multiple topologies are required for -face-varying interpolation. -The standard vertex buffers (\f[V]RTC_BUFFER_TYPE_VERTEX\f[R]) are +face\-varying interpolation. +The standard vertex buffers (\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R]) are always bound to the geometry topology (topology 0) thus use -\f[V]RTC_BUFFER_TYPE_INDEX\f[R] with buffer slot 0. +\f[CR]RTC_BUFFER_TYPE_INDEX\f[R] with buffer slot 0. User vertex data interpolation may use different topologies as described later. .PP Optionally, the application can set up the hole buffer -(\f[V]RTC_BUFFER_TYPE_HOLE\f[R]) which contains an array of 32-bit -indices (\f[V]RTC_FORMAT_UINT\f[R] format) of faces that should be -considered non-existing in all topologies. +(\f[CR]RTC_BUFFER_TYPE_HOLE\f[R]) which contains an array of 32\-bit +indices (\f[CR]RTC_FORMAT_UINT\f[R] format) of faces that should be +considered non\-existing in all topologies. The number of holes is inferred from the size of this buffer. .PP Optionally, the application can fill the level buffer -(\f[V]RTC_BUFFER_TYPE_LEVEL\f[R]) with a tessellation rate for each of +(\f[CR]RTC_BUFFER_TYPE_LEVEL\f[R]) with a tessellation rate for each of the edges of each face. This buffer must have the same size as the index buffer. The tessellation level is a positive floating point value -(\f[V]RTC_FORMAT_FLOAT\f[R] format) that specifies how many quads along +(\f[CR]RTC_FORMAT_FLOAT\f[R] format) that specifies how many quads along the edge should be generated during tessellation. If no level buffer is specified, a level of 1 is used. The maximally supported edge level is 4096, and larger levels are @@ -91,20 +71,20 @@ Note that edges may be shared between (typically 2) faces. To guarantee a watertight tessellation, the level of these shared edges should be identical. A uniform tessellation rate for an entire subdivision mesh can be set by -using the \f[V]rtcSetGeometryTessellationRate\f[R] function. +using the \f[CR]rtcSetGeometryTessellationRate\f[R] function. The existence of a level buffer has precedence over the uniform tessellation rate. .PP Optionally, the application can fill the sparse edge crease buffers to make edges appear sharper. The edge crease index buffer -(\f[V]RTC_BUFFER_TYPE_EDGE_CREASE_INDEX\f[R]) contains an array of pairs -of 32-bit vertex indices (\f[V]RTC_FORMAT_UINT2\f[R] format) that -specify unoriented edges in the geometry topology. +(\f[CR]RTC_BUFFER_TYPE_EDGE_CREASE_INDEX\f[R]) contains an array of +pairs of 32\-bit vertex indices (\f[CR]RTC_FORMAT_UINT2\f[R] format) +that specify unoriented edges in the geometry topology. The edge crease weight buffer -(\f[V]RTC_BUFFER_TYPE_EDGE_CREASE_WEIGHT\f[R]) stores for each of these +(\f[CR]RTC_BUFFER_TYPE_EDGE_CREASE_WEIGHT\f[R]) stores for each of these crease edges a positive floating point weight -(\f[V]RTC_FORMAT_FLOAT\f[R] format). +(\f[CR]RTC_FORMAT_FLOAT\f[R] format). The number of edge creases is inferred from the size of these buffers, which has to be identical. The larger a weight, the sharper the edge. @@ -121,13 +101,13 @@ Edge crease features are shared between all topologies. Optionally, the application can fill the sparse vertex crease buffers to make vertices appear sharper. The vertex crease index buffer -(\f[V]RTC_BUFFER_TYPE_VERTEX_CREASE_INDEX\f[R]), contains an array of -32-bit vertex indices (\f[V]RTC_FORMAT_UINT\f[R] format) to specify a +(\f[CR]RTC_BUFFER_TYPE_VERTEX_CREASE_INDEX\f[R]), contains an array of +32\-bit vertex indices (\f[CR]RTC_FORMAT_UINT\f[R] format) to specify a set of vertices from the geometry topology. The vertex crease weight buffer -(\f[V]RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT\f[R]) specifies for each of +(\f[CR]RTC_BUFFER_TYPE_VERTEX_CREASE_WEIGHT\f[R]) specifies for each of these vertices a positive floating point weight -(\f[V]RTC_FORMAT_FLOAT\f[R] format). +(\f[CR]RTC_FORMAT_FLOAT\f[R] format). The number of vertex creases is inferred from the size of these buffers, and has to be identical. The larger a weight, the sharper the vertex. @@ -140,11 +120,11 @@ undefined behavior. Vertex crease features are shared between all topologies. .PP Subdivision modes can be used to force linear interpolation for parts of -the subdivision mesh; see \f[V]rtcSetGeometrySubdivisionMode\f[R] for +the subdivision mesh; see \f[CR]rtcSetGeometrySubdivisionMode\f[R] for more details. .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers have to have the same stride and size. @@ -152,73 +132,67 @@ size. Also see tutorial [Subdivision Geometry] for an example of how to create subdivision surfaces. .SS Parametrization -.PP The parametrization for subdivision faces is different for -quadrilaterals and non-quadrilateral faces. +quadrilaterals and non\-quadrilateral faces. .PP The parametrization of a quadrilateral face uses the first vertex -\f[V]p0\f[R] as base point, and the vector \f[V]p1 - p0\f[R] as -u-direction and \f[V]p3 - p0\f[R] as v-direction. +\f[CR]p0\f[R] as base point, and the vector \f[CR]p1 \- p0\f[R] as +u\-direction and \f[CR]p3 \- p0\f[R] as v\-direction. .PP The parametrization for all other face types (with number of vertices not equal 4), have a special parametrization where the subpatch ID -\f[V]n\f[R] (of the \f[V]n\f[R]-th quadrilateral that would be obtained -by a single subdivision step) and the local hit location inside this -quadrilateral are encoded in the UV coordinates. -The following code extracts the sub-patch ID \f[V]i\f[R] and local UVs +\f[CR]n\f[R] (of the \f[CR]n\f[R]\-th quadrilateral that would be +obtained by a single subdivision step) and the local hit location inside +this quadrilateral are encoded in the UV coordinates. +The following code extracts the sub\-patch ID \f[CR]i\f[R] and local UVs of this subpatch: .IP -.nf -\f[C] +.EX unsigned int l = floorf(0.5f*U); unsigned int h = floorf(0.5f*V); unsigned int i = 4*h+l; -float u = 2.0f*fracf(0.5f*U)-0.5f; -float v = 2.0f*fracf(0.5f*V)-0.5f; -\f[R] -.fi +float u = 2.0f*fracf(0.5f*U)\-0.5f; +float v = 2.0f*fracf(0.5f*V)\-0.5f; +.EE .PP This encoding allows local subpatch UVs to be in the range -\f[V][-0.5,1.5[\f[R] thus negative subpatch UVs can be passed to -\f[V]rtcInterpolate\f[R] to sample subpatches slightly out of bounds. +\f[CR][\-0.5,1.5[\f[R] thus negative subpatch UVs can be passed to +\f[CR]rtcInterpolate\f[R] to sample subpatches slightly out of bounds. This can be useful to calculate derivatives using finite differences if required. The encoding further has the property that one can just move the value -\f[V]u\f[R] (or \f[V]v\f[R]) on a subpatch by adding \f[V]du\f[R] (or -\f[V]dv\f[R]) to the special UV encoding as long as it does not fall out -of the \f[V][-0.5,1.5[\f[R] range. +\f[CR]u\f[R] (or \f[CR]v\f[R]) on a subpatch by adding \f[CR]du\f[R] (or +\f[CR]dv\f[R]) to the special UV encoding as long as it does not fall +out of the \f[CR][\-0.5,1.5[\f[R] range. .PP To smoothly interpolate vertex attributes over the subdivision surface -we recommend using the \f[V]rtcInterpolate\f[R] function, which will +we recommend using the \f[CR]rtcInterpolate\f[R] function, which will apply the standard subdivision rules for interpolation and automatically -takes care of the special UV encoding for non-quadrilaterals. -.SS Face-Varying Data -.PP -Face-varying interpolation is supported through multiple topologies per +takes care of the special UV encoding for non\-quadrilaterals. +.SS Face\-Varying Data +Face\-varying interpolation is supported through multiple topologies per subdivision mesh and binding such topologies to vertex attribute buffers to interpolate. This way, texture coordinates may use a different topology with additional boundaries to construct separate UV regions inside one subdivision mesh. .PP -Each such topology \f[V]i\f[R] has a separate index buffer (specified -using \f[V]RTC_BUFFER_TYPE_INDEX\f[R] with buffer slot \f[V]i\f[R]) and -separate subdivision mode that can be set using -\f[V]rtcSetGeometrySubdivisionMode\f[R]. -A vertex attribute buffer \f[V]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R] -bound to a buffer slot \f[V]j\f[R] can be assigned to use a topology for -interpolation using the \f[V]rtcSetGeometryVertexAttributeTopology\f[R] -call. -.PP -The face buffer (\f[V]RTC_BUFFER_TYPE_FACE\f[R] type) is shared between -all topologies, which means that the \f[V]n\f[R]-th primitive always has -the same number of vertices (e.g.\ being a triangle or a quad) for each -topology. +Each such topology \f[CR]i\f[R] has a separate index buffer (specified +using \f[CR]RTC_BUFFER_TYPE_INDEX\f[R] with buffer slot \f[CR]i\f[R]) +and separate subdivision mode that can be set using +\f[CR]rtcSetGeometrySubdivisionMode\f[R]. +A vertex attribute buffer \f[CR]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R] +bound to a buffer slot \f[CR]j\f[R] can be assigned to use a topology +for interpolation using the +\f[CR]rtcSetGeometryVertexAttributeTopology\f[R] call. +.PP +The face buffer (\f[CR]RTC_BUFFER_TYPE_FACE\f[R] type) is shared between +all topologies, which means that the \f[CR]n\f[R]\-th primitive always +has the same number of vertices (e.g.\ being a triangle or a quad) for +each topology. However, the indices of the topologies themselves may be different. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry] diff --git a/man/man3/RTC_GEOMETRY_TYPE_TRIANGLE.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_TRIANGLE.3embree4 index 87b946816e..8782746cda 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_TRIANGLE.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_TRIANGLE.3embree4 @@ -1,82 +1,58 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_TRIANGLE" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_TRIANGLE - triangle geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_TRIANGLE \- triangle geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_TRIANGLE); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Triangle meshes are created by passing -\f[V]RTC_GEOMETRY_TYPE_TRIANGLE\f[R] to the \f[V]rtcNewGeometry\f[R] +\f[CR]RTC_GEOMETRY_TYPE_TRIANGLE\f[R] to the \f[CR]rtcNewGeometry\f[R] function call. The triangle indices can be specified by setting an index buffer -(\f[V]RTC_BUFFER_TYPE_INDEX\f[R] type) and the triangle vertices by -setting a vertex buffer (\f[V]RTC_BUFFER_TYPE_VERTEX\f[R] type). -See \f[V]rtcSetGeometryBuffer\f[R] and -\f[V]rtcSetSharedGeometryBuffer\f[R] for more details on how to set +(\f[CR]RTC_BUFFER_TYPE_INDEX\f[R] type) and the triangle vertices by +setting a vertex buffer (\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] type). +See \f[CR]rtcSetGeometryBuffer\f[R] and +\f[CR]rtcSetSharedGeometryBuffer\f[R] for more details on how to set buffers. -The index buffer must contain an array of three 32-bit indices per -triangle (\f[V]RTC_FORMAT_UINT3\f[R] format) and the number of +The index buffer must contain an array of three 32\-bit indices per +triangle (\f[CR]RTC_FORMAT_UINT3\f[R] format) and the number of primitives is inferred from the size of that buffer. -The vertex buffer must contain an array of single precision \f[V]x\f[R], -\f[V]y\f[R], \f[V]z\f[R] floating point coordinates -(\f[V]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices are +The vertex buffer must contain an array of single precision +\f[CR]x\f[R], \f[CR]y\f[R], \f[CR]z\f[R] floating point coordinates +(\f[CR]RTC_FORMAT_FLOAT3\f[R] format), and the number of vertices are inferred from the size of that buffer. The vertex buffer can be at most 16 GB large. .PP -The parametrization of a triangle uses the first vertex \f[V]p0\f[R] as -base point, the vector \f[V]p1 - p0\f[R] as u-direction and the vector -\f[V]p2 - p0\f[R] as v-direction. -Thus vertex attributes \f[V]t0,t1,t2\f[R] can be linearly interpolated +The parametrization of a triangle uses the first vertex \f[CR]p0\f[R] as +base point, the vector \f[CR]p1 \- p0\f[R] as u\-direction and the +vector \f[CR]p2 \- p0\f[R] as v\-direction. +Thus vertex attributes \f[CR]t0,t1,t2\f[R] can be linearly interpolated over the triangle the following way: .IP -.nf -\f[C] -t_uv = (1-u-v)*t0 + u*t1 + v*t2 - = t0 + u*(t1-t0) + v*(t2-t0) -\f[R] -.fi +.EX +t_uv = (1\-u\-v)*t0 + u*t1 + v*t2 + = t0 + u*(t1\-t0) + v*(t2\-t0) +.EE .PP -A triangle whose vertices are laid out counter-clockwise has its +A triangle whose vertices are laid out counter\-clockwise has its geometry normal pointing upwards outside the front face, like illustrated in the following picture: .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -For multi-segment motion blur, the number of time steps must be first -specified using the \f[V]rtcSetGeometryTimeStepCount\f[R] call. +For multi\-segment motion blur, the number of time steps must be first +specified using the \f[CR]rtcSetGeometryTimeStepCount\f[R] call. Then a vertex buffer for each time step can be set using different buffer slots, and all these buffers have to have the same stride and size. @@ -84,9 +60,7 @@ size. Also see tutorial [Triangle Geometry] for an example of how to create triangle meshes. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that be -get queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that be +get queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry] diff --git a/man/man3/RTC_GEOMETRY_TYPE_USER.3embree4 b/man/man3/RTC_GEOMETRY_TYPE_USER.3embree4 index a736aa0d10..3b5c559423 100644 --- a/man/man3/RTC_GEOMETRY_TYPE_USER.3embree4 +++ b/man/man3/RTC_GEOMETRY_TYPE_USER.3embree4 @@ -1,55 +1,35 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "RTC_GEOMETRY_TYPE_USER" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -RTC_GEOMETRY_TYPE_USER - user geometry type -\f[R] -.fi +.EX +RTC_GEOMETRY_TYPE_USER \- user geometry type +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_USER); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -User-defined geometries contain a number of user-defined primitives, +User\-defined geometries contain a number of user\-defined primitives, just like triangle meshes contain multiple triangles. -The shape of the user-defined primitives is specified through registered -callback functions, which enable extending Embree with arbitrary types -of primitives. +The shape of the user\-defined primitives is specified through +registered callback functions, which enable extending Embree with +arbitrary types of primitives. .PP -User-defined geometries are created by passing -\f[V]RTC_GEOMETRY_TYPE_USER\f[R] to the \f[V]rtcNewGeometry\f[R] +User\-defined geometries are created by passing +\f[CR]RTC_GEOMETRY_TYPE_USER\f[R] to the \f[CR]rtcNewGeometry\f[R] function call. One has to set the number of primitives (see -\f[V]rtcSetGeometryUserPrimitiveCount\f[R]), a user data pointer (see -\f[V]rtcSetGeometryUserData\f[R]), a bounding function closure (see -\f[V]rtcSetGeometryBoundsFunction\f[R]), as well as user-defined -intersect (see \f[V]rtcSetGeometryIntersectFunction\f[R]) and occluded -(see \f[V]rtcSetGeometryOccludedFunction\f[R]) callback functions. +\f[CR]rtcSetGeometryUserPrimitiveCount\f[R]), a user data pointer (see +\f[CR]rtcSetGeometryUserData\f[R]), a bounding function closure (see +\f[CR]rtcSetGeometryBoundsFunction\f[R]), as well as user\-defined +intersect (see \f[CR]rtcSetGeometryIntersectFunction\f[R]) and occluded +(see \f[CR]rtcSetGeometryOccludedFunction\f[R]) callback functions. The bounding function is used to query the bounds of all time steps of a user primitive, while the intersect and occluded callback functions are called to intersect the primitive with a ray. @@ -59,34 +39,30 @@ geometry. .PP The creation of a user geometry typically looks the following: .IP -.nf -\f[C] +.EX RTCGeometry geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_USER); rtcSetGeometryUserPrimitiveCount(geometry, numPrimitives); rtcSetGeometryUserData(geometry, userGeometryRepresentation); rtcSetGeometryBoundsFunction(geometry, boundsFunction); rtcSetGeometryIntersectFunction(geometry, intersectFunction); rtcSetGeometryOccludedFunction(geometry, occludedFunction); -\f[R] -.fi +.EE .PP -Please have a look at the \f[V]rtcSetGeometryBoundsFunction\f[R], -\f[V]rtcSetGeometryIntersectFunction\f[R], and -\f[V]rtcSetGeometryOccludedFunction\f[R] functions on the implementation -of the callback functions. +Please have a look at the \f[CR]rtcSetGeometryBoundsFunction\f[R], +\f[CR]rtcSetGeometryIntersectFunction\f[R], and +\f[CR]rtcSetGeometryOccludedFunction\f[R] functions on the +implementation of the callback functions. .PP Primitives of a user geometry are ignored during rendering when their bounds are empty, thus bounds have lower>upper in at least one dimension. .PP See tutorial [User Geometry] for an example of how to use the -user-defined geometries. +user\-defined geometries. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcSetGeometryUserPrimitiveCount], [rtcSetGeometryUserData], [rtcSetGeometryBoundsFunction], [rtcSetGeometryIntersectFunction], [rtcSetGeometryOccludedFunction] diff --git a/man/man3/rtcAttachGeometry.3embree4 b/man/man3/rtcAttachGeometry.3embree4 index e1533c8e3f..ac4648e2cc 100644 --- a/man/man3/rtcAttachGeometry.3embree4 +++ b/man/man3/rtcAttachGeometry.3embree4 @@ -1,52 +1,32 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcAttachGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcAttachGeometry - attaches a geometry to the scene -\f[R] -.fi +.EX +rtcAttachGeometry \- attaches a geometry to the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcAttachGeometry( RTCScene scene, RTCGeometry geometry ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcAttachGeometry\f[R] function attaches a geometry -(\f[V]geometry\f[R] argument) to a scene (\f[V]scene\f[R] argument) and -assigns a geometry ID to that geometry. +The \f[CR]rtcAttachGeometry\f[R] function attaches a geometry +(\f[CR]geometry\f[R] argument) to a scene (\f[CR]scene\f[R] argument) +and assigns a geometry ID to that geometry. All geometries attached to a scene are defined to be included inside the scene. A geometry can get attached to multiple scenes. The geometry ID is unique for the scene, and is used to identify the geometry when hit by a ray during ray queries. .PP -This function is thread-safe, thus multiple threads can attach +This function is thread\-safe, thus multiple threads can attach geometries to a scene in parallel. .PP The geometry IDs are assigned sequentially, starting from 0, as long as @@ -58,14 +38,12 @@ compact range of IDs. .PP These rules allow the application to manage a dynamic array to efficiently map from geometry IDs to its own geometry representation. -Alternatively, the application can also use per-geometry user data to +Alternatively, the application can also use per\-geometry user data to map to its geometry representation. -See \f[V]rtcSetGeometryUserData\f[R] and -\f[V]rtcGetGeometryUserData\f[R] for more information. +See \f[CR]rtcSetGeometryUserData\f[R] and +\f[CR]rtcGetGeometryUserData\f[R] for more information. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryUserData], [rtcGetGeometryUserData] diff --git a/man/man3/rtcAttachGeometryByID.3embree4 b/man/man3/rtcAttachGeometryByID.3embree4 index 2a6621d4e0..da28af85ac 100644 --- a/man/man3/rtcAttachGeometryByID.3embree4 +++ b/man/man3/rtcAttachGeometryByID.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcAttachGeometryByID" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcAttachGeometryByID - attaches a geometry to the scene +.EX +rtcAttachGeometryByID \- attaches a geometry to the scene using a specified geometry ID -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcAttachGeometryByID( @@ -35,36 +17,32 @@ void rtcAttachGeometryByID( RTCGeometry geometry, unsigned int geomID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcAttachGeometryByID\f[R] function attaches a geometry -(\f[V]geometry\f[R] argument) to a scene (\f[V]scene\f[R] argument) and -assigns a user provided geometry ID (\f[V]geomID\f[R] argument) to that -geometry. +The \f[CR]rtcAttachGeometryByID\f[R] function attaches a geometry +(\f[CR]geometry\f[R] argument) to a scene (\f[CR]scene\f[R] argument) +and assigns a user provided geometry ID (\f[CR]geomID\f[R] argument) to +that geometry. All geometries attached to a scene are defined to be included inside the scene. A geometry can get attached to multiple scenes. -The passed user-defined geometry ID is used to identify the geometry +The passed user\-defined geometry ID is used to identify the geometry when hit by a ray during ray queries. Using this function, it is possible to share the same IDs to refer to geometries inside the application and Embree. .PP -This function is thread-safe, thus multiple threads can attach +This function is thread\-safe, thus multiple threads can attach geometries to a scene in parallel. .PP -The user-provided geometry ID must be unused in the scene, otherwise the -creation of the geometry will fail. -Further, the user-provided geometry IDs should be compact, as Embree +The user\-provided geometry ID must be unused in the scene, otherwise +the creation of the geometry will fail. +Further, the user\-provided geometry IDs should be compact, as Embree internally creates a vector which size is equal to the largest geometry ID used. Creating very large geometry IDs for small scenes would thus cause a memory consumption and performance overhead. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcAttachGeometry] diff --git a/man/man3/rtcBuildBVH.3embree4 b/man/man3/rtcBuildBVH.3embree4 index 9d9cc69dcd..7b60e50db9 100644 --- a/man/man3/rtcBuildBVH.3embree4 +++ b/man/man3/rtcBuildBVH.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcBuildBVH" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcBuildBVH - builds a BVH -\f[R] -.fi +.EX +rtcBuildBVH \- builds a BVH +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTC_ALIGN(32) RTCBuildPrimitive @@ -116,116 +98,112 @@ struct RTCBuildArguments rtcDefaultBuildArguments(); void* rtcBuildBVH( const struct RTCBuildArguments* args ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcBuildBVH\f[R] function can be used to build a BVH in a -user-defined format over arbitrary primitives. +The \f[CR]rtcBuildBVH\f[R] function can be used to build a BVH in a +user\-defined format over arbitrary primitives. All arguments to the function are provided through the -\f[V]RTCBuildArguments\f[R] structure. +\f[CR]RTCBuildArguments\f[R] structure. The first member of that structure must be set to the size of the -structure in bytes (\f[V]bytesSize\f[R] member) which allows future +structure in bytes (\f[CR]bytesSize\f[R] member) which allows future extensions of the structure. It is recommended to initialize the build arguments structure using the -\f[V]rtcDefaultBuildArguments\f[R] function. +\f[CR]rtcDefaultBuildArguments\f[R] function. .PP -The \f[V]rtcBuildBVH\f[R] function gets passed the BVH to build -(\f[V]bvh\f[R] member), the array of primitives (\f[V]primitives\f[R] -member), the capacity of that array (\f[V]primitiveArrayCapacity\f[R] +The \f[CR]rtcBuildBVH\f[R] function gets passed the BVH to build +(\f[CR]bvh\f[R] member), the array of primitives (\f[CR]primitives\f[R] +member), the capacity of that array (\f[CR]primitiveArrayCapacity\f[R] member), the number of primitives stored inside the array -(\f[V]primitiveCount\f[R] member), callback function pointers, and a -user-defined pointer (\f[V]userPtr\f[R] member) that is passed to all +(\f[CR]primitiveCount\f[R] member), callback function pointers, and a +user\-defined pointer (\f[CR]userPtr\f[R] member) that is passed to all callback functions when invoked. -The \f[V]primitives\f[R] array can be freed by the application after the -BVH is built. +The \f[CR]primitives\f[R] array can be freed by the application after +the BVH is built. All callback functions are typically called from multiple threads, thus -their implementation must be thread-safe. +their implementation must be thread\-safe. .PP Four callback functions must be registered, which are invoked during -build to create BVH nodes (\f[V]createNode\f[R] member), to set the -pointers to all children (\f[V]setNodeChildren\f[R] member), to set the -bounding boxes of all children (\f[V]setNodeBounds\f[R] member), and to -create a leaf node (\f[V]createLeaf\f[R] member). +build to create BVH nodes (\f[CR]createNode\f[R] member), to set the +pointers to all children (\f[CR]setNodeChildren\f[R] member), to set the +bounding boxes of all children (\f[CR]setNodeBounds\f[R] member), and to +create a leaf node (\f[CR]createLeaf\f[R] member). .PP The function pointer to the primitive split function -(\f[V]splitPrimitive\f[R] member) may be \f[V]NULL\f[R], however, then +(\f[CR]splitPrimitive\f[R] member) may be \f[CR]NULL\f[R], however, then no spatial splitting in high quality mode is possible. The function pointer used to report the build progress -(\f[V]buildProgress\f[R] member) is optional and may also be -\f[V]NULL\f[R]. +(\f[CR]buildProgress\f[R] member) is optional and may also be +\f[CR]NULL\f[R]. .PP Further, some build settings are passed to configure the BVH build. -Using the build quality settings (\f[V]buildQuality\f[R] member), one +Using the build quality settings (\f[CR]buildQuality\f[R] member), one can select between a faster, low quality build which is good for dynamic scenes, and a standard quality build for static scenes. One can also specify the desired maximum branching factor of the BVH -(\f[V]maxBranchingFactor\f[R] member), the maximum depth the BVH should -have (\f[V]maxDepth\f[R] member), the block size for the SAH heuristic -(\f[V]sahBlockSize\f[R] member), the minimum and maximum leaf size -(\f[V]minLeafSize\f[R] and \f[V]maxLeafSize\f[R] member), and the +(\f[CR]maxBranchingFactor\f[R] member), the maximum depth the BVH should +have (\f[CR]maxDepth\f[R] member), the block size for the SAH heuristic +(\f[CR]sahBlockSize\f[R] member), the minimum and maximum leaf size +(\f[CR]minLeafSize\f[R] and \f[CR]maxLeafSize\f[R] member), and the estimated costs of one traversal step and one primitive intersection -(\f[V]traversalCost\f[R] and \f[V]intersectionCost\f[R] members). -When enabling the \f[V]RTC_BUILD_FLAG_DYNAMIC\f[R] build flags -(\f[V]buildFlags\f[R] member), re-build performance for dynamic scenes +(\f[CR]traversalCost\f[R] and \f[CR]intersectionCost\f[R] members). +When enabling the \f[CR]RTC_BUILD_FLAG_DYNAMIC\f[R] build flags +(\f[CR]buildFlags\f[R] member), re\-build performance for dynamic scenes is improved at the cost of higher memory requirements. .PP To spatially split primitives in high quality mode, the builder needs extra space at the end of the build primitive array to store split primitives. The total capacity of the build primitive array is passed using the -\f[V]primitiveArrayCapacity\f[R] member, and should be about twice the +\f[CR]primitiveArrayCapacity\f[R] member, and should be about twice the number of primitives when using spatial splits. .PP -The \f[V]RTCCreateNodeFunc\f[R] and \f[V]RTCCreateLeafFunc\f[R] +The \f[CR]RTCCreateNodeFunc\f[R] and \f[CR]RTCCreateLeafFunc\f[R] callbacks are passed a thread local allocator object that should be used -for fast allocation of nodes using the \f[V]rtcThreadLocalAlloc\f[R] +for fast allocation of nodes using the \f[CR]rtcThreadLocalAlloc\f[R] function. We strongly recommend using this allocation mechanism, as alternative -approaches like standard \f[V]malloc\f[R] can be over 10× slower. +approaches like standard \f[CR]malloc\f[R] can be over 10× slower. The allocator object passed to the create callbacks may be used only inside the current thread. -Memory allocated using \f[V]rtcThreadLocalAlloc\f[R] is automatically -freed when the \f[V]RTCBVH\f[R] object is deleted. +Memory allocated using \f[CR]rtcThreadLocalAlloc\f[R] is automatically +freed when the \f[CR]RTCBVH\f[R] object is deleted. If you use your own memory allocation scheme you have to free the memory -yourself when the \f[V]RTCBVH\f[R] object is no longer used. +yourself when the \f[CR]RTCBVH\f[R] object is no longer used. .PP -The \f[V]RTCCreateNodeFunc\f[R] callback additionally gets the number of -children for this node in the range from 2 to -\f[V]maxBranchingFactor\f[R] (\f[V]childCount\f[R] argument). +The \f[CR]RTCCreateNodeFunc\f[R] callback additionally gets the number +of children for this node in the range from 2 to +\f[CR]maxBranchingFactor\f[R] (\f[CR]childCount\f[R] argument). .PP -The \f[V]RTCSetNodeChildFunc\f[R] callback function gets a pointer to -the node as input (\f[V]nodePtr\f[R] argument), an array of pointers to -the children (\f[V]childPtrs\f[R] argument), and the size of this array -(\f[V]childCount\f[R] argument). +The \f[CR]RTCSetNodeChildFunc\f[R] callback function gets a pointer to +the node as input (\f[CR]nodePtr\f[R] argument), an array of pointers to +the children (\f[CR]childPtrs\f[R] argument), and the size of this array +(\f[CR]childCount\f[R] argument). .PP -The \f[V]RTCSetNodeBoundsFunc\f[R] callback function gets a pointer to -the node as input (\f[V]nodePtr\f[R] argument), an array of pointers to -the bounding boxes of the children (\f[V]bounds\f[R] argument), and the -size of this array (\f[V]childCount\f[R] argument). +The \f[CR]RTCSetNodeBoundsFunc\f[R] callback function gets a pointer to +the node as input (\f[CR]nodePtr\f[R] argument), an array of pointers to +the bounding boxes of the children (\f[CR]bounds\f[R] argument), and the +size of this array (\f[CR]childCount\f[R] argument). .PP -The \f[V]RTCCreateLeafFunc\f[R] callback additionally gets an array of -primitives as input (\f[V]primitives\f[R] argument), and the size of -this array (\f[V]primitiveCount\f[R] argument). -The callback should read the \f[V]geomID\f[R] and \f[V]primID\f[R] +The \f[CR]RTCCreateLeafFunc\f[R] callback additionally gets an array of +primitives as input (\f[CR]primitives\f[R] argument), and the size of +this array (\f[CR]primitiveCount\f[R] argument). +The callback should read the \f[CR]geomID\f[R] and \f[CR]primID\f[R] members from the passed primitives to construct the leaf. .PP -The \f[V]RTCSplitPrimitiveFunc\f[R] callback is invoked in high quality -mode to split a primitive (\f[V]primitive\f[R] argument) at the -specified position (\f[V]position\f[R] argument) and dimension -(\f[V]dimension\f[R] argument). +The \f[CR]RTCSplitPrimitiveFunc\f[R] callback is invoked in high quality +mode to split a primitive (\f[CR]primitive\f[R] argument) at the +specified position (\f[CR]position\f[R] argument) and dimension +(\f[CR]dimension\f[R] argument). The callback should return bounds of the clipped left and right parts of -the primitive (\f[V]leftBounds\f[R] and \f[V]rightBounds\f[R] +the primitive (\f[CR]leftBounds\f[R] and \f[CR]rightBounds\f[R] arguments). .PP -The \f[V]RTCProgressMonitorFunction\f[R] callback function is called -with the estimated completion rate \f[V]n\f[R] in the range [0,1]. -Returning \f[V]true\f[R] from the callback lets the build continue; -returning \f[V]false\f[R] cancels the build. +The \f[CR]RTCProgressMonitorFunction\f[R] callback function is called +with the estimated completion rate \f[CR]n\f[R] in the range [0, 1]. +Returning \f[CR]true\f[R] from the callback lets the build continue; +returning \f[CR]false\f[R] cancels the build. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBVH] diff --git a/man/man3/rtcCollide.3embree4 b/man/man3/rtcCollide.3embree4 index ed9fd51e81..dda65d774e 100644 --- a/man/man3/rtcCollide.3embree4 +++ b/man/man3/rtcCollide.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcCollide" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcCollide - intersects one BVH with another -\f[R] -.fi +.EX +rtcCollide \- intersects one BVH with another +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCCollision { @@ -45,32 +27,28 @@ void rtcCollide ( RTCCollideFunc callback, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcCollide\f[R] function intersects the BVH of -\f[V]hscene0\f[R] with the BVH of scene \f[V]hscene1\f[R] and calls a -user defined callback function (e.g \f[V]callback\f[R] argument) for +The \f[CR]rtcCollide\f[R] function intersects the BVH of +\f[CR]hscene0\f[R] with the BVH of scene \f[CR]hscene1\f[R] and calls a +user defined callback function (e.g \f[CR]callback\f[R] argument) for each pair of intersecting primitives between the two scenes. -A user defined data pointer (\f[V]userPtr\f[R] argument) can also be +A user defined data pointer (\f[CR]userPtr\f[R] argument) can also be passed in. .PP For every pair of primitives that may intersect each other, the callback -function (\f[V]callback\f[R] argument) is called. +function (\f[CR]callback\f[R] argument) is called. The user will be provided with the primID\[cq]s and geomID\[cq]s of multiple potentially intersecting primitive pairs. Currently, only scene entirely composed of user geometries are supported, thus the user is expected to implement a primitive/primitive intersection to filter out false positives in the callback function. -The \f[V]userPtr\f[R] argument can be used to input geometry data of the -scene or output results of the intersection query. +The \f[CR]userPtr\f[R] argument can be used to input geometry data of +the scene or output results of the intersection query. .SS SUPPORTED PRIMITIVES -.PP Currently, the only supported type is the user geometry type (see [RTC_GEOMETRY_TYPE_USER]). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO diff --git a/man/man3/rtcCommitGeometry.3embree4 b/man/man3/rtcCommitGeometry.3embree4 index 5bc4731dc4..4da861d020 100644 --- a/man/man3/rtcCommitGeometry.3embree4 +++ b/man/man3/rtcCommitGeometry.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcCommitGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcCommitGeometry - commits geometry changes -\f[R] -.fi +.EX +rtcCommitGeometry \- commits geometry changes +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcCommitGeometry(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcCommitGeometry\f[R] function is used to commit all geometry -changes performed to a geometry (\f[V]geometry\f[R] parameter). +The \f[CR]rtcCommitGeometry\f[R] function is used to commit all geometry +changes performed to a geometry (\f[CR]geometry\f[R] parameter). After a geometry gets modified, this function must be called to properly update the internal state of the geometry to perform interpolations -using \f[V]rtcInterpolate\f[R] or to commit a scene containing the -geometry using \f[V]rtcCommitScene\f[R]. +using \f[CR]rtcInterpolate\f[R] or to commit a scene containing the +geometry using \f[CR]rtcCommitScene\f[R]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcInterpolate], [rtcCommitScene] diff --git a/man/man3/rtcCommitScene.3embree4 b/man/man3/rtcCommitScene.3embree4 index e5acb876f7..1d4f4a8565 100644 --- a/man/man3/rtcCommitScene.3embree4 +++ b/man/man3/rtcCommitScene.3embree4 @@ -1,58 +1,38 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcCommitScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcCommitScene - commits scene changes -\f[R] -.fi +.EX +rtcCommitScene \- commits scene changes +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcCommitScene(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcCommitScene\f[R] function commits all changes for the -specified scene (\f[V]scene\f[R] argument). +The \f[CR]rtcCommitScene\f[R] function commits all changes for the +specified scene (\f[CR]scene\f[R] argument). This internally triggers building of a spatial acceleration structure for the scene using all available worker threads. Ray queries can be performed only after committing all scene changes. .PP If the application uses TBB 2019 Update 9 or later for parallelization of rendering, lazy scene construction during rendering is supported by -\f[V]rtcCommitScene\f[R]. -Therefore \f[V]rtcCommitScene\f[R] can get called from multiple TBB +\f[CR]rtcCommitScene\f[R]. +Therefore \f[CR]rtcCommitScene\f[R] can get called from multiple TBB worker threads concurrently for the same scene. -The \f[V]rtcCommitScene\f[R] function will then internally isolate the +The \f[CR]rtcCommitScene\f[R] function will then internally isolate the scene construction using a tbb::isolated_task_group. -The alternative approach of using \f[V]rtcJoinCommitScene\f[R] which +The alternative approach of using \f[CR]rtcJoinCommitScene\f[R] which uses an tbb:task_arena internally, is not recommended due to it\[cq]s high runtime overhead. .PP If scene geometries get modified or attached or detached, the -\f[V]rtcCommitScene\f[R] call must be invoked before performing any +\f[CR]rtcCommitScene\f[R] call must be invoked before performing any further ray queries for the scene; otherwise the effect of the ray query is undefined. The modification of a geometry, committing the scene, and tracing of @@ -62,8 +42,8 @@ in the scene count as scene modification, e.g.\ including setting of intersection filter functions. .PP The kind of acceleration structure built can be influenced using scene -flags (see \f[V]rtcSetSceneFlags\f[R]), and the quality can be specified -using the \f[V]rtcSetSceneBuildQuality\f[R] function. +flags (see \f[CR]rtcSetSceneFlags\f[R]), and the quality can be +specified using the \f[CR]rtcSetSceneBuildQuality\f[R] function. .PP Embree silently ignores primitives during spatial acceleration structure construction that would cause numerical issues, e.g.\ primitives @@ -71,23 +51,21 @@ containing NaNs, INFs, or values greater than 1.844E18f (as no reasonable calculations can be performed with such values without causing overflows). .PP -In case the RTCDevice associated with the \f[V]scene\f[R] is a SYCL -device, \f[V]rtcCommitScene\f[R] will internally create a temporary SYCL -queue to issue memory transfers from host to device memory. -In this case, the call to \f[V]rtcCommitScene\f[R] will be blocking and +In case the RTCDevice associated with the \f[CR]scene\f[R] is a SYCL +device, \f[CR]rtcCommitScene\f[R] will internally create a temporary +SYCL queue to issue memory transfers from host to device memory. +In this case, the call to \f[CR]rtcCommitScene\f[R] will be blocking and return only after the memory transfers are completed and SYCL kernels can traverse the scene savely on the device. -The function \f[V]rtcCommitSceneWithQueue\f[R] can be used to commit all -changes for the specified scene asynchronously. -Handles to traversal objects (\f[V]RTCTraversable\f[R] type) that have -been aquired before a call to \f[V]rtcCommitScene\f[R] will be +The function \f[CR]rtcCommitSceneWithQueue\f[R] can be used to commit +all changes for the specified scene asynchronously. +Handles to traversal objects (\f[CR]RTCTraversable\f[R] type) that have +been aquired before a call to \f[CR]rtcCommitScene\f[R] will be invalidated. -Use \f[V]rtcGetSceneTraversable\f[R] to get a valid handle from the +Use \f[CR]rtcGetSceneTraversable\f[R] to get a valid handle from the scene after every scene commit. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcCommitSceneWithQueue], [rtcJoinCommitScene] diff --git a/man/man3/rtcDetachGeometry.3embree4 b/man/man3/rtcDetachGeometry.3embree4 index 99ddefe40c..4dea57fcf8 100644 --- a/man/man3/rtcDetachGeometry.3embree4 +++ b/man/man3/rtcDetachGeometry.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcDetachGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcDetachGeometry - detaches a geometry from the scene -\f[R] -.fi +.EX +rtcDetachGeometry \- detaches a geometry from the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcDetachGeometry(RTCScene scene, unsigned int geomID); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function detaches a geometry identified by its geometry ID -(\f[V]geomID\f[R] argument) from a scene (\f[V]scene\f[R] argument). +(\f[CR]geomID\f[R] argument) from a scene (\f[CR]scene\f[R] argument). When detached, the geometry is no longer contained in the scene. .PP -This function is thread-safe, thus multiple threads can detach +This function is thread\-safe, thus multiple threads can detach geometries from a scene at the same time. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcAttachGeometry], [rtcAttachGeometryByID] diff --git a/man/man3/rtcDisableGeometry.3embree4 b/man/man3/rtcDisableGeometry.3embree4 index 81ab86fb51..dfac9717d6 100644 --- a/man/man3/rtcDisableGeometry.3embree4 +++ b/man/man3/rtcDisableGeometry.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcDisableGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcDisableGeometry - disables the geometry -\f[R] -.fi +.EX +rtcDisableGeometry \- disables the geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcDisableGeometry(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcDisableGeometry\f[R] function disables the specified -geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcDisableGeometry\f[R] function disables the specified +geometry (\f[CR]geometry\f[R] argument). A disabled geometry is not rendered. Each geometry is enabled by default at construction time. .PP After disabling a geometry, the scene containing that geometry must be -committed using \f[V]rtcCommitScene\f[R] for the change to have effect. +committed using \f[CR]rtcCommitScene\f[R] for the change to have effect. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcEnableGeometry], [rtcCommitScene] diff --git a/man/man3/rtcEnableGeometry.3embree4 b/man/man3/rtcEnableGeometry.3embree4 index 849cc4798a..8b6a849cfc 100644 --- a/man/man3/rtcEnableGeometry.3embree4 +++ b/man/man3/rtcEnableGeometry.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcEnableGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcEnableGeometry - enables the geometry -\f[R] -.fi +.EX +rtcEnableGeometry \- enables the geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcEnableGeometry(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcEnableGeometry\f[R] function enables the specified geometry -(\f[V]geometry\f[R] argument). +The \f[CR]rtcEnableGeometry\f[R] function enables the specified geometry +(\f[CR]geometry\f[R] argument). Only enabled geometries are rendered. Each geometry is enabled by default at construction time. .PP After enabling a geometry, the scene containing that geometry must be -committed using \f[V]rtcCommitScene\f[R] for the change to have effect. +committed using \f[CR]rtcCommitScene\f[R] for the change to have effect. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcDisableGeometry], [rtcCommitScene] diff --git a/man/man3/rtcForwardIntersect1.3embree4 b/man/man3/rtcForwardIntersect1.3embree4 index 2f5696da5e..6e1e66865e 100644 --- a/man/man3/rtcForwardIntersect1.3embree4 +++ b/man/man3/rtcForwardIntersect1.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcForwardIntersect1/Ex" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcForwardIntersect1/Ex - forwards a single ray to new scene +.EX +rtcForwardIntersect1/Ex \- forwards a single ray to new scene from user geometry callback -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcForwardIntersect1( @@ -44,53 +26,49 @@ void rtcForwardIntersect1Ex( unsigned int instID, unsigned int instPrimID, ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcForwardIntersect1\f[R] and \f[V]rtcForwardIntersect1Ex\f[R] -functions forward the traversal of a transformed ray (\f[V]ray\f[R] -argument) into a scene (\f[V]scene\f[R] argument) from a user geometry -callback. +The \f[CR]rtcForwardIntersect1\f[R] and +\f[CR]rtcForwardIntersect1Ex\f[R] functions forward the traversal of a +transformed ray (\f[CR]ray\f[R] argument) into a scene (\f[CR]scene\f[R] +argument) from a user geometry callback. The function can only get invoked from a user geometry callback for a -ray traversal initiated with the \f[V]rtcIntersect1\f[R] function. +ray traversal initiated with the \f[CR]rtcIntersect1\f[R] function. The callback arguments structure of the callback invokation has to get -passed to the ray forwarding (\f[V]args\f[R] argument). +passed to the ray forwarding (\f[CR]args\f[R] argument). The user geometry callback should instantly terminate after invoking the -\f[V]rtcForwardIntersect1/Ex\f[R] function. +\f[CR]rtcForwardIntersect1/Ex\f[R] function. .PP Only the ray origin and ray direction members of the ray argument are used for forwarding, all additional ray properties are inherited from -the initial ray traversal invokation of \f[V]rtcIntersect1\f[R]. +the initial ray traversal invokation of \f[CR]rtcIntersect1\f[R]. .PP -The implementation of the \f[V]rtcForwardIntersect1\f[R] function +The implementation of the \f[CR]rtcForwardIntersect1\f[R] function recursively continues the ray traversal into the specified scene and -pushes the provided instance ID (\f[V]instID\f[R] argument) to the +pushes the provided instance ID (\f[CR]instID\f[R] argument) to the instance ID stack. Hit information is updated into the ray hit structure passed to the -original \f[V]rtcIntersect1\f[R] invokation. +original \f[CR]rtcIntersect1\f[R] invokation. .PP This function can get used to implement user defined instancing using user geometries, e.g.\ by transforming the ray in a special way, and/or selecting between different scenes to instantiate. .PP -For user defined instance arrays, the \f[V]rtcForwardIntersect1Ex\f[R] -variant has an additional \f[V]instPrimID\f[R] argument which is pushed +For user defined instance arrays, the \f[CR]rtcForwardIntersect1Ex\f[R] +variant has an additional \f[CR]instPrimID\f[R] argument which is pushed to the instance primitive ID stack. Instance primitive IDs identify which instance of an instance array was hit. .PP When using Embree on the CPU it is possible to recursively invoke -\f[V]rtcIntersect1\f[R] directly from a user geometry callback. +\f[CR]rtcIntersect1\f[R] directly from a user geometry callback. However, when SYCL is used, recursively tracing rays is not directly -supported, and the \f[V]rtcForwardIntersect1/Ex\f[R] functions must be +supported, and the \f[CR]rtcForwardIntersect1/Ex\f[R] functions must be used. .PP The ray structure must be aligned to 16 bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcIntersect1], [RTCRay] diff --git a/man/man3/rtcForwardIntersect4.3embree4 b/man/man3/rtcForwardIntersect4.3embree4 index 5cb9be11ef..509a26ca85 100644 --- a/man/man3/rtcForwardIntersect4.3embree4 +++ b/man/man3/rtcForwardIntersect4.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcForwardIntersect4/8/16/Ex" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcForwardIntersect4/8/16/Ex - forwards a ray packet to new scene +.EX +rtcForwardIntersect4/8/16/Ex \- forwards a ray packet to new scene from user geometry callback -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcForwardIntersect4( @@ -81,57 +63,53 @@ void rtcForwardIntersect16Ex( unsigned int instID, unsigned int instPrimID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcForwardIntersect4/8/16\f[R] and -\f[V]rtcForwardIntersect4/8/16Ex\f[R] functions forward the traversal of -a transformed ray packet (\f[V]ray\f[R] argument) into a scene -(\f[V]scene\f[R] argument) from a user geometry callback. +The \f[CR]rtcForwardIntersect4/8/16\f[R] and +\f[CR]rtcForwardIntersect4/8/16Ex\f[R] functions forward the traversal +of a transformed ray packet (\f[CR]ray\f[R] argument) into a scene +(\f[CR]scene\f[R] argument) from a user geometry callback. The function can only get invoked from a user geometry callback for a -ray traversal initiated with the \f[V]rtcIntersect4/8/16\f[R] function. +ray traversal initiated with the \f[CR]rtcIntersect4/8/16\f[R] function. The callback arguments structure of the callback invokation has to get -passed to the ray forwarding (\f[V]args\f[R] argument). +passed to the ray forwarding (\f[CR]args\f[R] argument). The user geometry callback should instantly terminate after invoking the -\f[V]rtcForwardIntersect4/8/16/Ex\f[R] function. +\f[CR]rtcForwardIntersect4/8/16/Ex\f[R] function. .PP Only the ray origin and ray direction members of the ray argument are used for forwarding, all additional ray properties are inherited from -the initial ray traversal invokation of \f[V]rtcIntersect4/8/16\f[R]. +the initial ray traversal invokation of \f[CR]rtcIntersect4/8/16\f[R]. .PP -The implementation of the \f[V]rtcForwardIntersect4/8/16\f[R] function +The implementation of the \f[CR]rtcForwardIntersect4/8/16\f[R] function recursively continues the ray traversal into the specified scene and -pushes the provided instance ID (\f[V]instID\f[R] argument) to the +pushes the provided instance ID (\f[CR]instID\f[R] argument) to the instance ID stack. Hit information is updated into the ray hit structure passed to the -original \f[V]rtcIntersect4/8/16\f[R] invokation. +original \f[CR]rtcIntersect4/8/16\f[R] invokation. .PP This function can get used to implement user defined instancing using user geometries, e.g.\ by transforming the ray in a special way, and/or selecting between different scenes to instantiate. .PP For user defined instance arrays, the -\f[V]rtcForwardIntersect4/8/16Ex\f[R] variant has an additional -\f[V]instPrimID\f[R] argument which is pushed to the instance primitive +\f[CR]rtcForwardIntersect4/8/16Ex\f[R] variant has an additional +\f[CR]instPrimID\f[R] argument which is pushed to the instance primitive ID stack. Instance primitive IDs identify which instance of an instance array was hit. .PP When using Embree on the CPU it is possible to recursively invoke -\f[V]rtcIntersect4/8/16\f[R] directly from a user geometry callback. +\f[CR]rtcIntersect4/8/16\f[R] directly from a user geometry callback. However, when SYCL is used, recursively tracing rays is not directly -supported, and the \f[V]rtcForwardIntersect4/8/16\f[R] function must be +supported, and the \f[CR]rtcForwardIntersect4/8/16\f[R] function must be used. .PP -For \f[V]rtcForwardIntersect4\f[R] the ray packet must be aligned to 16 -bytes, for \f[V]rtcForwardIntersect8\f[R] the alignment must be 32 -bytes, and for \f[V]rtcForwardIntersect16\f[R] the alignment must be 64 +For \f[CR]rtcForwardIntersect4\f[R] the ray packet must be aligned to 16 +bytes, for \f[CR]rtcForwardIntersect8\f[R] the alignment must be 32 +bytes, and for \f[CR]rtcForwardIntersect16\f[R] the alignment must be 64 bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcIntersect4/8/16] diff --git a/man/man3/rtcForwardOccluded1.3embree4 b/man/man3/rtcForwardOccluded1.3embree4 index 4a97c5e61f..0b7eb126b0 100644 --- a/man/man3/rtcForwardOccluded1.3embree4 +++ b/man/man3/rtcForwardOccluded1.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcForwardOccluded1/Ex" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcForwardOccluded1/Ex - forwards a single ray to new scene +.EX +rtcForwardOccluded1/Ex \- forwards a single ray to new scene from user geometry callback -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcForwardOccluded1( @@ -44,53 +26,49 @@ void rtcForwardOccluded1Ex( unsigned int instID, unsigned int instPrimID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcForwardOccluded1\f[R] and \f[V]rtcForwardOccluded1Ex\f[R] -functions forward the traversal of a transformed ray (\f[V]ray\f[R] -argument) into a scene (\f[V]scene\f[R] argument) from a user geometry +The \f[CR]rtcForwardOccluded1\f[R] and \f[CR]rtcForwardOccluded1Ex\f[R] +functions forward the traversal of a transformed ray (\f[CR]ray\f[R] +argument) into a scene (\f[CR]scene\f[R] argument) from a user geometry callback. The function can only get invoked from a user geometry callback for a -ray traversal initiated with the \f[V]rtcOccluded1\f[R] function. +ray traversal initiated with the \f[CR]rtcOccluded1\f[R] function. The callback arguments structure of the callback invokation has to get -passed to the ray forwarding (\f[V]args\f[R] argument). +passed to the ray forwarding (\f[CR]args\f[R] argument). The user geometry callback should instantly terminate after invoking the -\f[V]rtcForwardOccluded1/Ex\f[R] function. +\f[CR]rtcForwardOccluded1/Ex\f[R] function. .PP Only the ray origin and ray direction members of the ray argument are used for forwarding, all additional ray properties are inherited from -the initial ray traversal invokation of \f[V]rtcOccluded1\f[R]. +the initial ray traversal invokation of \f[CR]rtcOccluded1\f[R]. .PP -The implementation of the \f[V]rtcForwardOccluded1\f[R] function +The implementation of the \f[CR]rtcForwardOccluded1\f[R] function recursively continues the ray traversal into the specified scene and -pushes the provided instance ID (\f[V]instID\f[R] argument) to the +pushes the provided instance ID (\f[CR]instID\f[R] argument) to the instance ID stack. Hit information is updated into the ray structure passed to the original -\f[V]rtcOccluded1\f[R] invokation. +\f[CR]rtcOccluded1\f[R] invokation. .PP This function can get used to implement user defined instancing using user geometries, e.g.\ by transforming the ray in a special way, and/or selecting between different scenes to instantiate. .PP -For user defined instance arrays, the \f[V]rtcForwardIntersect1Ex\f[R] -variant has an additional \f[V]instPrimID\f[R] argument which is pushed +For user defined instance arrays, the \f[CR]rtcForwardIntersect1Ex\f[R] +variant has an additional \f[CR]instPrimID\f[R] argument which is pushed to the instance primitive ID stack. Instance primitive IDs identify which instance of an instance array was hit. .PP When using Embree on the CPU it is possible to recursively invoke -\f[V]rtcOccluded1\f[R] directly from a user geometry callback. +\f[CR]rtcOccluded1\f[R] directly from a user geometry callback. However, when SYCL is used, recursively tracing rays is not directly -supported, and the \f[V]rtcForwardOccluded1/Ex\f[R] function must be +supported, and the \f[CR]rtcForwardOccluded1/Ex\f[R] function must be used. .PP The ray structure must be aligned to 16 bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcOccluded1], [RTCRay] diff --git a/man/man3/rtcForwardOccluded4.3embree4 b/man/man3/rtcForwardOccluded4.3embree4 index 2af30c4a63..2d2070c722 100644 --- a/man/man3/rtcForwardOccluded4.3embree4 +++ b/man/man3/rtcForwardOccluded4.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcForwardOccluded4/8/16/Ex" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcForwardOccluded4/8/16/Ex - forwards a ray packet to new scene +.EX +rtcForwardOccluded4/8/16/Ex \- forwards a ray packet to new scene from user geometry callback -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcForwardOccluded4( @@ -80,56 +62,53 @@ void rtcForwardOccluded16Ex( unsigned int instID, unsigned int instPrimID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcForwardOccluded4/8/16\f[R] and -\f[V]rtcForwardOccluded4/8/16Ex\f[R] functions forward the traversal of -a transformed ray packet (\f[V]ray\f[R] argument) into a scene -(\f[V]scene\f[R] argument) from a user geometry callback. +The \f[CR]rtcForwardOccluded4/8/16\f[R] and +\f[CR]rtcForwardOccluded4/8/16Ex\f[R] functions forward the traversal of +a transformed ray packet (\f[CR]ray\f[R] argument) into a scene +(\f[CR]scene\f[R] argument) from a user geometry callback. The function can only get invoked from a user geometry callback for a -ray traversal initiated with the \f[V]rtcOccluded4/8/16\f[R] function. +ray traversal initiated with the \f[CR]rtcOccluded4/8/16\f[R] function. The callback arguments structure of the callback invokation has to get -passed to the ray forwarding (\f[V]args\f[R] argument). +passed to the ray forwarding (\f[CR]args\f[R] argument). The user geometry callback should instantly terminate after invoking the -\f[V]rtcForwardOccluded4/8/16/Ex\f[R] function. +\f[CR]rtcForwardOccluded4/8/16/Ex\f[R] function. .PP Only the ray origin and ray direction members of the ray argument are used for forwarding, all additional ray properties are inherited from -the initial ray traversal invokation of \f[V]rtcOccluded4/8/16\f[R]. +the initial ray traversal invokation of \f[CR]rtcOccluded4/8/16\f[R]. .PP -The implementation of the \f[V]rtcForwardOccluded4/8/16\f[R] function +The implementation of the \f[CR]rtcForwardOccluded4/8/16\f[R] function recursively continues the ray traversal into the specified scene and -pushes the provided instance ID (\f[V]instID\f[R] argument) to the +pushes the provided instance ID (\f[CR]instID\f[R] argument) to the instance ID stack. Hit information is updated into the ray structure passed to the original -\f[V]rtcOccluded4/8/16\f[R] invokation. +\f[CR]rtcOccluded4/8/16\f[R] invokation. .PP This function can get used to implement user defined instancing using user geometries, e.g.\ by transforming the ray in a special way, and/or selecting between different scenes to instantiate. .PP For user defined instance arrays, the -\f[V]rtcForwardIntersect4/8/16Ex\f[R] variant has an additional -\f[V]instPrimID\f[R] argument which is pushed to the instance primitive +\f[CR]rtcForwardIntersect4/8/16Ex\f[R] variant has an additional +\f[CR]instPrimID\f[R] argument which is pushed to the instance primitive ID stack. Instance primitive IDs identify which instance of an instance array was hit. .PP When using Embree on the CPU it is possible to recursively invoke -\f[V]rtcOccluded4/8/16\f[R] directly from a user geometry callback. +\f[CR]rtcOccluded4/8/16\f[R] directly from a user geometry callback. However, when SYCL is used, recursively tracing rays is not directly -supported, and the \f[V]rtcForwardOccluded4/8/16\f[R] function must be +supported, and the \f[CR]rtcForwardOccluded4/8/16\f[R] function must be used. .PP -For \f[V]rtcForwardOccluded4\f[R] the ray packet must be aligned to 16 -bytes, for \f[V]rtcForwardOccluded8\f[R] the alignment must be 32 bytes, -and for \f[V]rtcForwardOccluded16\f[R] the alignment must be 64 bytes. +For \f[CR]rtcForwardOccluded4\f[R] the ray packet must be aligned to 16 +bytes, for \f[CR]rtcForwardOccluded8\f[R] the alignment must be 32 +bytes, and for \f[CR]rtcForwardOccluded16\f[R] the alignment must be 64 +bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcOccluded4/8/16] diff --git a/man/man3/rtcGetBufferData.3embree4 b/man/man3/rtcGetBufferData.3embree4 index ed7ddd301a..c9ed00ffcb 100644 --- a/man/man3/rtcGetBufferData.3embree4 +++ b/man/man3/rtcGetBufferData.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetBufferData" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetBufferData - gets a pointer to the buffer data -\f[R] -.fi +.EX +rtcGetBufferData \- gets a pointer to the buffer data +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void* rtcGetBufferData(RTCBuffer buffer); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetBufferData\f[R] function returns a pointer to the buffer -data of the specified buffer object (\f[V]buffer\f[R] argument). -If the buffer was created using \f[V]rtcNewBufferHostDevice\f[R] and the -SYCL device has no host unified memory, this pointer is only valid on -the host. +The \f[CR]rtcGetBufferData\f[R] function returns a pointer to the buffer +data of the specified buffer object (\f[CR]buffer\f[R] argument). +If the buffer was created using \f[CR]rtcNewBufferHostDevice\f[R] and +the SYCL device has no host unified memory, this pointer is only valid +on the host. To get a device pointer in this case, use -\f[V]rtcGetBufferDataDevice\f[R]. +\f[CR]rtcGetBufferDataDevice\f[R]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetBufferDataDevice], [rtcNewBuffer], [rtcNewBufferHostDevice] diff --git a/man/man3/rtcGetDeviceError.3embree4 b/man/man3/rtcGetDeviceError.3embree4 index 07cfad5f4b..798859ecfc 100644 --- a/man/man3/rtcGetDeviceError.3embree4 +++ b/man/man3/rtcGetDeviceError.3embree4 @@ -1,95 +1,76 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetDeviceError" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetDeviceError - returns the error code of the device -\f[R] -.fi +.EX +rtcGetDeviceError \- returns the error code of the device +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCError rtcGetDeviceError(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Each thread has its own error code per device. If an error occurs when calling an API function, this error code is set to the occurred error if it stores no previous error. -The \f[V]rtcGetDeviceError\f[R] function reads and returns the currently -stored error and clears the error code. +The \f[CR]rtcGetDeviceError\f[R] function reads and returns the +currently stored error and clears the error code. This assures that the returned error code is always the first error -occurred since the last invocation of \f[V]rtcGetDeviceError\f[R]. +occurred since the last invocation of \f[CR]rtcGetDeviceError\f[R]. .PP -Possible error codes returned by \f[V]rtcGetDeviceError\f[R] are: +Possible error codes returned by \f[CR]rtcGetDeviceError\f[R] are: .IP \[bu] 2 -\f[V]RTC_ERROR_NONE\f[R]: No error occurred. +\f[CR]RTC_ERROR_NONE\f[R]: No error occurred. .IP \[bu] 2 -\f[V]RTC_ERROR_UNKNOWN\f[R]: An unknown error has occurred. +\f[CR]RTC_ERROR_UNKNOWN\f[R]: An unknown error has occurred. .IP \[bu] 2 -\f[V]RTC_ERROR_INVALID_ARGUMENT\f[R]: An invalid argument was specified. +\f[CR]RTC_ERROR_INVALID_ARGUMENT\f[R]: An invalid argument was +specified. .IP \[bu] 2 -\f[V]RTC_ERROR_INVALID_OPERATION\f[R]: The operation is not allowed for +\f[CR]RTC_ERROR_INVALID_OPERATION\f[R]: The operation is not allowed for the specified object. .IP \[bu] 2 -\f[V]RTC_ERROR_OUT_OF_MEMORY\f[R]: There is not enough memory left to +\f[CR]RTC_ERROR_OUT_OF_MEMORY\f[R]: There is not enough memory left to complete the operation. .IP \[bu] 2 -\f[V]RTC_ERROR_UNSUPPORTED_CPU\f[R]: The CPU is not supported as it does -not support the lowest ISA Embree is compiled for. +\f[CR]RTC_ERROR_UNSUPPORTED_CPU\f[R]: The CPU is not supported as it +does not support the lowest ISA Embree is compiled for. .IP \[bu] 2 -\f[V]RTC_ERROR_CANCELLED\f[R]: The operation got canceled by a memory +\f[CR]RTC_ERROR_CANCELLED\f[R]: The operation got canceled by a memory monitor callback or progress monitor callback function. .IP \[bu] 2 -\f[V]RTC_ERROR_LEVEL_ZERO_RAYTRACING_SUPPORT_MISSING\f[R]: This error +\f[CR]RTC_ERROR_LEVEL_ZERO_RAYTRACING_SUPPORT_MISSING\f[R]: This error can occur when creating an Embree device with SYCL support using -\f[V]rtcNewSYCLDevice\f[R] fails. +\f[CR]rtcNewSYCLDevice\f[R] fails. This error probably means that the GPU driver is to old or not installed properly. Install a new GPU driver and on Linux make sure that the package -\f[V]intel-level-zero-gpu-raytracing\f[R] is installed. -For general driver installation information for Linux refer to -. +\f[CR]intel\-level\-zero\-gpu\-raytracing\f[R] is installed. +For general driver installation information for Linux refer to \c +.UR https://dgpu-docs.intel.com +.UE \c +\&. .PP -When the device construction fails, \f[V]rtcNewDevice\f[R] returns -\f[V]NULL\f[R] as device. +When the device construction fails, \f[CR]rtcNewDevice\f[R] returns +\f[CR]NULL\f[R] as device. To detect the error code of a such a failed device construction, pass -\f[V]NULL\f[R] as device to the \f[V]rtcGetDeviceError\f[R] function. -For all other invocations of \f[V]rtcGetDeviceError\f[R], a proper +\f[CR]NULL\f[R] as device to the \f[CR]rtcGetDeviceError\f[R] function. +For all other invocations of \f[CR]rtcGetDeviceError\f[R], a proper device pointer must be specified. .PP -The API function \f[V]rtcGetDeviceLastErrorMessage\f[R] can be used to -get more details about the last \f[V]RTCError\f[R] a \f[V]RTCDevice\f[R] -encountered. +The API function \f[CR]rtcGetDeviceLastErrorMessage\f[R] can be used to +get more details about the last \f[CR]RTCError\f[R] a +\f[CR]RTCDevice\f[R] encountered. .PP -For convenient reporting of a \f[V]RTCError\f[R], the API function -\f[V]rtcGetErrorString\f[R] can be used, which returns a string -representation of a given \f[V]RTCError\f[R]. +For convenient reporting of a \f[CR]RTCError\f[R], the API function +\f[CR]rtcGetErrorString\f[R] can be used, which returns a string +representation of a given \f[CR]RTCError\f[R]. .SS EXIT STATUS -.PP Returns the error code for the device. .SS SEE ALSO -.PP [rtcSetDeviceErrorFunction], [rtcGetDeviceLastErrorMessage], [rtcGetErrorString] diff --git a/man/man3/rtcGetDeviceLastErrorMessage.3embree4 b/man/man3/rtcGetDeviceLastErrorMessage.3embree4 index d7d9117e76..e354ca8e92 100644 --- a/man/man3/rtcGetDeviceLastErrorMessage.3embree4 +++ b/man/man3/rtcGetDeviceLastErrorMessage.3embree4 @@ -1,57 +1,35 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetDeviceLastErrorMessage" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetDeviceLastErrorMessage - returns a message corresponding +.EX +rtcGetDeviceLastErrorMessage \- returns a message corresponding to the last error code -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include const char* rtcGetDeviceLastErrorMessage(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function can be used to get a message corresponding to the last -error code (returned by \f[V]rtcGetDeviceError\f[R]) which often +error code (returned by \f[CR]rtcGetDeviceError\f[R]) which often provides details about the error that happened. The message is the same as the message that will written to console when -verbosity is > 0 or which is passed as the \f[V]str\f[R] argument of the -\f[V]RTCErrorFunction\f[R] (see [rtcSetDeviceErrorFunction]). +verbosity is > 0 or which is passed as the \f[CR]str\f[R] argument of +the \f[CR]RTCErrorFunction\f[R] (see [rtcSetDeviceErrorFunction]). However, when device construction fails this is the only way to get additional information about the error. -In this case, \f[V]rtcNewDevice\f[R] returns \f[V]NULL\f[R] as device. +In this case, \f[CR]rtcNewDevice\f[R] returns \f[CR]NULL\f[R] as device. To query the error message for such a failed device construction, pass -\f[V]NULL\f[R] as device to the \f[V]rtcGetDeviceLastErrorMessage\f[R] +\f[CR]NULL\f[R] as device to the \f[CR]rtcGetDeviceLastErrorMessage\f[R] function. -For all other invocations of \f[V]rtcGetDeviceLastErrorMessage\f[R], a +For all other invocations of \f[CR]rtcGetDeviceLastErrorMessage\f[R], a proper device pointer must be specified. .SS EXIT STATUS -.PP Returns a message corresponding to the last error code. .SS SEE ALSO -.PP [rtcGetDeviceError], [rtcSetDeviceErrorFunction] diff --git a/man/man3/rtcGetDeviceProperty.3embree4 b/man/man3/rtcGetDeviceProperty.3embree4 index d767eaec0c..38fd5ef264 100644 --- a/man/man3/rtcGetDeviceProperty.3embree4 +++ b/man/man3/rtcGetDeviceProperty.3embree4 @@ -1,145 +1,125 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetDeviceProperty" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetDeviceProperty - queries properties of the device -\f[R] -.fi +.EX +rtcGetDeviceProperty \- queries properties of the device +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include ssize_t rtcGetDeviceProperty( RTCDevice device, enum RTCDeviceProperty prop ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetDeviceProperty\f[R] function can be used to query -properties (\f[V]prop\f[R] argument) of a device object -(\f[V]device\f[R] argument). -The returned property is an integer of type \f[V]ssize_t\f[R]. +The \f[CR]rtcGetDeviceProperty\f[R] function can be used to query +properties (\f[CR]prop\f[R] argument) of a device object +(\f[CR]device\f[R] argument). +The returned property is an integer of type \f[CR]ssize_t\f[R]. .PP Possible properties to query are: .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_VERSION\f[R]: Queries the combined version +\f[CR]RTC_DEVICE_PROPERTY_VERSION\f[R]: Queries the combined version number (MAJOR.MINOR.PATCH) with two decimal digits per component. E.g. for Embree 2.8.3 the integer 208003 is returned. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_VERSION_MAJOR\f[R]: Queries the major version +\f[CR]RTC_DEVICE_PROPERTY_VERSION_MAJOR\f[R]: Queries the major version number of Embree. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_VERSION_MINOR\f[R]: Queries the minor version +\f[CR]RTC_DEVICE_PROPERTY_VERSION_MINOR\f[R]: Queries the minor version number of Embree. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_VERSION_PATCH\f[R]: Queries the patch version +\f[CR]RTC_DEVICE_PROPERTY_VERSION_PATCH\f[R]: Queries the patch version number of Embree. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R]: Queries whether the -\f[V]rtcIntersect4\f[R] and \f[V]rtcOccluded4\f[R] functions preserve -packet size and ray order when invoking callback functions. +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R]: Queries whether +the \f[CR]rtcIntersect4\f[R] and \f[CR]rtcOccluded4\f[R] functions +preserve packet size and ray order when invoking callback functions. This is only the case if Embree is compiled with -\f[V]EMBREE_RAY_PACKETS\f[R] and \f[V]SSE2\f[R] (or \f[V]SSE4.2\f[R]) -enabled, and if the machine it is running on supports \f[V]SSE2\f[R] (or -\f[V]SSE4.2\f[R]). +\f[CR]EMBREE_RAY_PACKETS\f[R] and \f[CR]SSE2\f[R] (or \f[CR]SSE4.2\f[R]) +enabled, and if the machine it is running on supports \f[CR]SSE2\f[R] +(or \f[CR]SSE4.2\f[R]). .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R]: Queries whether the -\f[V]rtcIntersect8\f[R] and \f[V]rtcOccluded8\f[R] functions preserve -packet size and ray order when invoking callback functions. +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R]: Queries whether +the \f[CR]rtcIntersect8\f[R] and \f[CR]rtcOccluded8\f[R] functions +preserve packet size and ray order when invoking callback functions. This is only the case if Embree is compiled with -\f[V]EMBREE_RAY_PACKETS\f[R] and \f[V]AVX\f[R] (or \f[V]AVX2\f[R]) -enabled, and if the machine it is running on supports \f[V]AVX\f[R] (or -\f[V]AVX2\f[R]). +\f[CR]EMBREE_RAY_PACKETS\f[R] and \f[CR]AVX\f[R] (or \f[CR]AVX2\f[R]) +enabled, and if the machine it is running on supports \f[CR]AVX\f[R] (or +\f[CR]AVX2\f[R]). .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R]: Queries whether -the \f[V]rtcIntersect16\f[R] and \f[V]rtcOccluded16\f[R] functions +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R]: Queries whether +the \f[CR]rtcIntersect16\f[R] and \f[CR]rtcOccluded16\f[R] functions preserve packet size and ray order when invoking callback functions. This is only the case if Embree is compiled with -\f[V]EMBREE_RAY_PACKETS\f[R] and \f[V]AVX512\f[R] enabled, and if the -machine it is running on supports \f[V]AVX512\f[R]. +\f[CR]EMBREE_RAY_PACKETS\f[R] and \f[CR]AVX512\f[R] enabled, and if the +machine it is running on supports \f[CR]AVX512\f[R]. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED\f[R]: Queries whether ray +\f[CR]RTC_DEVICE_PROPERTY_RAY_MASK_SUPPORTED\f[R]: Queries whether ray masks are supported. This is only the case if Embree is compiled with -\f[V]EMBREE_RAY_MASK\f[R] enabled. +\f[CR]EMBREE_RAY_MASK\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_ENABLED\f[R]: Queries whether back face culling is enabled. This is only the case if Embree is compiled with -\f[V]EMBREE_BACKFACE_CULLING\f[R] enabled. +\f[CR]EMBREE_BACKFACE_CULLING\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_CURVES_ENABLED\f[R]: Queries +\f[CR]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_CURVES_ENABLED\f[R]: Queries whether back face culling for curves is enabled. This is only the case if Embree is compiled with -\f[V]EMBREE_BACKFACE_CULLING_CURVES\f[R] enabled. +\f[CR]EMBREE_BACKFACE_CULLING_CURVES\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_SPHERES_ENABLED\f[R]: Queries +\f[CR]RTC_DEVICE_PROPERTY_BACKFACE_CULLING_SPHERES_ENABLED\f[R]: Queries whether back face culling for spheres is enabled. This is only the case if Embree is compiled with -\f[V]EMBREE_BACKFACE_CULLING_SPHERES\f[R] enabled. +\f[CR]EMBREE_BACKFACE_CULLING_SPHERES\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_COMPACT_POLYS_ENABLED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_COMPACT_POLYS_ENABLED\f[R]: Queries whether compact polys is enabled. This is only the case if Embree is compiled with -\f[V]EMBREE_COMPACT_POLYS\f[R] enabled. +\f[CR]EMBREE_COMPACT_POLYS\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED\f[R]: Queries whether -filter functions are supported, which is the case if Embree is compiled -with \f[V]EMBREE_FILTER_FUNCTION\f[R] enabled. +\f[CR]RTC_DEVICE_PROPERTY_FILTER_FUNCTION_SUPPORTED\f[R]: Queries +whether filter functions are supported, which is the case if Embree is +compiled with \f[CR]EMBREE_FILTER_FUNCTION\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_IGNORE_INVALID_RAYS_ENABLED\f[R]: Queries +\f[CR]RTC_DEVICE_PROPERTY_IGNORE_INVALID_RAYS_ENABLED\f[R]: Queries whether invalid rays are ignored, which is the case if Embree is -compiled with \f[V]EMBREE_IGNORE_INVALID_RAYS\f[R] enabled. +compiled with \f[CR]EMBREE_IGNORE_INVALID_RAYS\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED\f[R]: Queries +\f[CR]RTC_DEVICE_PROPERTY_TRIANGLE_GEOMETRY_SUPPORTED\f[R]: Queries whether triangles are supported, which is the case if Embree is compiled -with \f[V]EMBREE_GEOMETRY_TRIANGLE\f[R] enabled. +with \f[CR]EMBREE_GEOMETRY_TRIANGLE\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_QUAD_GEOMETRY_SUPPORTED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_QUAD_GEOMETRY_SUPPORTED\f[R]: Queries whether quads are supported, which is the case if Embree is compiled with -\f[V]EMBREE_GEOMETRY_QUAD\f[R] enabled. +\f[CR]EMBREE_GEOMETRY_QUAD\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_SUBDIVISION_GEOMETRY_SUPPORTED\f[R]: Queries +\f[CR]RTC_DEVICE_PROPERTY_SUBDIVISION_GEOMETRY_SUPPORTED\f[R]: Queries whether subdivision meshes are supported, which is the case if Embree is -compiled with \f[V]EMBREE_GEOMETRY_SUBDIVISION\f[R] enabled. +compiled with \f[CR]EMBREE_GEOMETRY_SUBDIVISION\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_CURVE_GEOMETRY_SUPPORTED\f[R]: Queries whether curves are supported, which is the case if Embree is compiled with -\f[V]EMBREE_GEOMETRY_CURVE\f[R] enabled. +\f[CR]EMBREE_GEOMETRY_CURVE\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_POINT_GEOMETRY_SUPPORTED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_POINT_GEOMETRY_SUPPORTED\f[R]: Queries whether points are supported, which is the case if Embree is compiled with -\f[V]EMBREE_GEOMETRY_POINT\f[R] enabled. +\f[CR]EMBREE_GEOMETRY_POINT\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_USER_GEOMETRY_SUPPORTED\f[R]: Queries whether +\f[CR]RTC_DEVICE_PROPERTY_USER_GEOMETRY_SUPPORTED\f[R]: Queries whether user geometries are supported, which is the case if Embree is compiled -with \f[V]EMBREE_GEOMETRY_USER\f[R] enabled. +with \f[CR]EMBREE_GEOMETRY_USER\f[R] enabled. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_TASKING_SYSTEM\f[R]: Queries the tasking system -Embree is compiled with. +\f[CR]RTC_DEVICE_PROPERTY_TASKING_SYSTEM\f[R]: Queries the tasking +system Embree is compiled with. Possible return values are: .RS 2 .IP "0." 3 @@ -150,20 +130,19 @@ Intel Threading Building Blocks (TBB) Parallel Patterns Library (PPL) .RE .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_JOIN_COMMIT_SUPPORTED\f[R]: Queries whether -\f[V]rtcJoinCommitScene\f[R] is supported. +\f[CR]RTC_DEVICE_PROPERTY_JOIN_COMMIT_SUPPORTED\f[R]: Queries whether +\f[CR]rtcJoinCommitScene\f[R] is supported. This is not the case when Embree is compiled with PPL or older versions of TBB. .IP \[bu] 2 -\f[V]RTC_DEVICE_PROPERTY_PARALLEL_COMMIT_SUPPORTED\f[R]: Queries whether -\f[V]rtcCommitScene\f[R] can get invoked from multiple TBB worker -threads concurrently. +\f[CR]RTC_DEVICE_PROPERTY_PARALLEL_COMMIT_SUPPORTED\f[R]: Queries +whether \f[CR]rtcCommitScene\f[R] can get invoked from multiple TBB +worker threads concurrently. This feature is only supported starting with TBB 2019 Update 9. .SS EXIT STATUS -.PP On success returns the value of the queried property. For properties returning a boolean value, the return value 0 denotes -\f[V]false\f[R] and 1 denotes \f[V]true\f[R]. +\f[CR]false\f[R] and 1 denotes \f[CR]true\f[R]. .PP On failure zero is returned and an error code is set that can be queried -using \f[V]rtcGetDeviceError\f[R]. +using \f[CR]rtcGetDeviceError\f[R]. diff --git a/man/man3/rtcGetErrorString.3embree4 b/man/man3/rtcGetErrorString.3embree4 index 97036c8e57..245b11760d 100644 --- a/man/man3/rtcGetErrorString.3embree4 +++ b/man/man3/rtcGetErrorString.3embree4 @@ -1,54 +1,32 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetErrorString" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetErrorString - returns a string representation +.EX +rtcGetErrorString \- returns a string representation of a given RTCError -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include const char* rtcGetErrorString(RTCError code); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Returns a string representation for a \f[V]RTCError\f[R] error code. -For example, for the \f[V]RTCError\f[R] RTC_ERROR_UNKNOWN this function +Returns a string representation for a \f[CR]RTCError\f[R] error code. +For example, for the \f[CR]RTCError\f[R] RTC_ERROR_UNKNOWN this function will return the string \[lq]Unknown Error\[rq]. This is purely a convenience function for printing error information on the user side. .PP The returned strings should not be used for comparing different -\f[V]RTCError\f[R] error codes or make other decisions based on the type -of error that occurred. -For such things only the \f[V]RTCError\f[R] enum values should be used. +\f[CR]RTCError\f[R] error codes or make other decisions based on the +type of error that occurred. +For such things only the \f[CR]RTCError\f[R] enum values should be used. .SS EXIT STATUS -.PP -Returns a string representation of a given \f[V]RTCError\f[R] error +Returns a string representation of a given \f[CR]RTCError\f[R] error code. .SS SEE ALSO -.PP [rtcGetDeviceError] diff --git a/man/man3/rtcGetGeometry.3embree4 b/man/man3/rtcGetGeometry.3embree4 index 01d8c16b4e..a9c6592ed0 100644 --- a/man/man3/rtcGetGeometry.3embree4 +++ b/man/man3/rtcGetGeometry.3embree4 @@ -1,47 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometry - returns the geometry bound to +.EX +rtcGetGeometry \- returns the geometry bound to the specified geometry ID -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry rtcGetGeometry(RTCScene scene, unsigned int geomID); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometry\f[R] function returns the geometry that is bound -to the specified geometry ID (\f[V]geomID\f[R] argument) for the -specified scene (\f[V]scene\f[R] argument). +The \f[CR]rtcGetGeometry\f[R] function returns the geometry that is +bound to the specified geometry ID (\f[CR]geomID\f[R] argument) for the +specified scene (\f[CR]scene\f[R] argument). This function just looks up the handle and does \f[I]not\f[R] increment the reference count. If you want to get ownership of the handle, you need to additionally -call \f[V]rtcRetainGeometry\f[R]. +call \f[CR]rtcRetainGeometry\f[R]. .PP This function is not thread safe and thus can be used during rendering. However, it is generally recommended to store the geometry handle inside @@ -51,9 +31,7 @@ handle from that representation directly. If you need a thread safe version of this function please use [rtcGetGeometryThreadSafe]. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcAttachGeometry], [rtcAttachGeometryByID], [rtcGetGeometryThreadSafe] diff --git a/man/man3/rtcGetGeometryBufferData.3embree4 b/man/man3/rtcGetGeometryBufferData.3embree4 index 3fa6acd4d1..351d3d7407 100644 --- a/man/man3/rtcGetGeometryBufferData.3embree4 +++ b/man/man3/rtcGetGeometryBufferData.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryBufferData" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryBufferData - gets pointer to +.EX +rtcGetGeometryBufferData \- gets pointer to the first buffer view element -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void* rtcGetGeometryBufferData( @@ -35,24 +17,21 @@ void* rtcGetGeometryBufferData( enum RTCBufferType type, unsigned int slot ); -\f[R] -.fi +.EE .SS DESCRIPTION +The \f[CR]rtcGetGeometryBufferData\f[R] function returns a pointer to +the first element of the buffer view attached to the specified buffer +type and slot (\f[CR]type\f[R] and \f[CR]slot\f[R] argument) of the +geometry (\f[CR]geometry\f[R] argument). .PP -The \f[V]rtcGetGeometryBufferData\f[R] function returns a pointer to the -first element of the buffer view attached to the specified buffer type -and slot (\f[V]type\f[R] and \f[V]slot\f[R] argument) of the geometry -(\f[V]geometry\f[R] argument). -.PP -If the device associated with \f[V]geometry\f[R] is a SYCL device, the +If the device associated with \f[CR]geometry\f[R] is a SYCL device, the returned pointer only accessible on the host. -The function \f[V]rtcGetGeometryBufferDataDevice\f[R] can be used to get -a pointer accessible on the SYCL device. +The function \f[CR]rtcGetGeometryBufferDataDevice\f[R] can be used to +get a pointer accessible on the SYCL device. #### EXIT STATUS .PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryBufferDataDevice], [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer], [rtcSetNewGeometryBuffer] diff --git a/man/man3/rtcGetGeometryFace.3embree4 b/man/man3/rtcGetGeometryFace.3embree4 index b3ca6bf5b2..3ca02ed045 100644 --- a/man/man3/rtcGetGeometryFace.3embree4 +++ b/man/man3/rtcGetGeometryFace.3embree4 @@ -1,61 +1,38 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryFace" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryFace - returns the face of some half edge -\f[R] -.fi +.EX +rtcGetGeometryFace \- returns the face of some half edge +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcGetGeometryFace( RTCGeometry geometry, unsigned int edgeID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryFace\f[R] function returns the ID of the face the -specified half edge (\f[V]edgeID\f[R] argument) belongs to. -For instance in the following example the face \f[V]f1\f[R] is returned -for edges \f[V]e4\f[R], \f[V]e5\f[R], \f[V]e6\f[R], and \f[V]e7\f[R]. +The \f[CR]rtcGetGeometryFace\f[R] function returns the ID of the face +the specified half edge (\f[CR]edgeID\f[R] argument) belongs to. +For instance in the following example the face \f[CR]f1\f[R] is returned +for edges \f[CR]e4\f[R], \f[CR]e5\f[R], \f[CR]e6\f[R], and +\f[CR]e7\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP This function can only be used for subdivision geometries. As all topologies of a subdivision geometry share the same face buffer the function does not depend on the topology ID. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryFirstHalfEdge], [rtcGetGeometryFace], [rtcGetGeometryOppositeHalfEdge], [rtcGetGeometryNextHalfEdge], [rtcGetGeometryPreviousHalfEdge] diff --git a/man/man3/rtcGetGeometryFirstHalfEdge.3embree4 b/man/man3/rtcGetGeometryFirstHalfEdge.3embree4 index eb382798a1..b2d8e31e96 100644 --- a/man/man3/rtcGetGeometryFirstHalfEdge.3embree4 +++ b/man/man3/rtcGetGeometryFirstHalfEdge.3embree4 @@ -1,52 +1,30 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryFirstHalfEdge" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryFirstHalfEdge - returns the first half edge of a face -\f[R] -.fi +.EX +rtcGetGeometryFirstHalfEdge \- returns the first half edge of a face +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcGetGeometryFirstHalfEdge( RTCGeometry geometry, unsigned int faceID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryFirstHalfEdge\f[R] function returns the ID of the -first half edge belonging to the specified face (\f[V]faceID\f[R] +The \f[CR]rtcGetGeometryFirstHalfEdge\f[R] function returns the ID of +the first half edge belonging to the specified face (\f[CR]faceID\f[R] argument). For instance in the following example the first half edge of face -\f[V]f1\f[R] is \f[V]e4\f[R]. +\f[CR]f1\f[R] is \f[CR]e4\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP This function can only be used for subdivision geometries. As all topologies of a subdivision geometry share the same face buffer @@ -60,11 +38,9 @@ E.g. as the indices of face f1 start at location 4 of the index array, the first edge is edge e4, the next edge e5, etc. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryFirstHalfEdge], [rtcGetGeometryFace], [rtcGetGeometryOppositeHalfEdge], [rtcGetGeometryNextHalfEdge], [rtcGetGeometryPreviousHalfEdge] diff --git a/man/man3/rtcGetGeometryNextHalfEdge.3embree4 b/man/man3/rtcGetGeometryNextHalfEdge.3embree4 index 49cd33318a..a564140cd0 100644 --- a/man/man3/rtcGetGeometryNextHalfEdge.3embree4 +++ b/man/man3/rtcGetGeometryNextHalfEdge.3embree4 @@ -1,61 +1,37 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryNextHalfEdge" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryNextHalfEdge - returns the next half edge -\f[R] -.fi +.EX +rtcGetGeometryNextHalfEdge \- returns the next half edge +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcGetGeometryNextHalfEdge( RTCGeometry geometry, unsigned int edgeID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryNextHalfEdge\f[R] function returns the ID of the -next half edge of the specified half edge (\f[V]edgeID\f[R] argument). +The \f[CR]rtcGetGeometryNextHalfEdge\f[R] function returns the ID of the +next half edge of the specified half edge (\f[CR]edgeID\f[R] argument). For instance in the following example the next half edge of -\f[V]e10\f[R] is \f[V]e11\f[R]. +\f[CR]e10\f[R] is \f[CR]e11\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP This function can only be used for subdivision geometries. As all topologies of a subdivision geometry share the same face buffer the function does not depend on the topology ID. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryFirstHalfEdge], [rtcGetGeometryFace], [rtcGetGeometryOppositeHalfEdge], [rtcGetGeometryNextHalfEdge], [rtcGetGeometryPreviousHalfEdge] diff --git a/man/man3/rtcGetGeometryOppositeHalfEdge.3embree4 b/man/man3/rtcGetGeometryOppositeHalfEdge.3embree4 index dab1ff6ddf..20cb1fc37a 100644 --- a/man/man3/rtcGetGeometryOppositeHalfEdge.3embree4 +++ b/man/man3/rtcGetGeometryOppositeHalfEdge.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryOppositeHalfEdge" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryOppositeHalfEdge - returns the opposite half edge -\f[R] -.fi +.EX +rtcGetGeometryOppositeHalfEdge \- returns the opposite half edge +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcGetGeometryOppositeHalfEdge( @@ -34,35 +16,29 @@ unsigned int rtcGetGeometryOppositeHalfEdge( unsigned int topologyID, unsigned int edgeID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryOppositeHalfEdge\f[R] function returns the ID of -the opposite half edge of the specified half edge (\f[V]edgeID\f[R] -argument) in the specified topology (\f[V]topologyID\f[R] argument). +The \f[CR]rtcGetGeometryOppositeHalfEdge\f[R] function returns the ID of +the opposite half edge of the specified half edge (\f[CR]edgeID\f[R] +argument) in the specified topology (\f[CR]topologyID\f[R] argument). For instance in the following example the opposite half edge of -\f[V]e6\f[R] is \f[V]e16\f[R]. +\f[CR]e6\f[R] is \f[CR]e16\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP An opposite half edge does not exist if the specified half edge has either no neighboring face, or more than 2 neighboring faces. -In these cases the function just returns the same edge \f[V]edgeID\f[R] +In these cases the function just returns the same edge \f[CR]edgeID\f[R] again. .PP This function can only be used for subdivision geometries. The function depends on the topology as the topologies of a subdivision geometry have different index buffers assigned. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryFirstHalfEdge], [rtcGetGeometryFace], [rtcGetGeometryOppositeHalfEdge], [rtcGetGeometryNextHalfEdge], [rtcGetGeometryPreviousHalfEdge] diff --git a/man/man3/rtcGetGeometryPreviousHalfEdge.3embree4 b/man/man3/rtcGetGeometryPreviousHalfEdge.3embree4 index e5e1201071..123a3703bf 100644 --- a/man/man3/rtcGetGeometryPreviousHalfEdge.3embree4 +++ b/man/man3/rtcGetGeometryPreviousHalfEdge.3embree4 @@ -1,62 +1,38 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryPreviousHalfEdge" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryPreviousHalfEdge - returns the previous half edge -\f[R] -.fi +.EX +rtcGetGeometryPreviousHalfEdge \- returns the previous half edge +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include unsigned int rtcGetGeometryPreviousHalfEdge( RTCGeometry geometry, unsigned int edgeID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryPreviousHalfEdge\f[R] function returns the ID of -the previous half edge of the specified half edge (\f[V]edgeID\f[R] +The \f[CR]rtcGetGeometryPreviousHalfEdge\f[R] function returns the ID of +the previous half edge of the specified half edge (\f[CR]edgeID\f[R] argument). For instance in the following example the previous half edge of -\f[V]e6\f[R] is \f[V]e5\f[R]. +\f[CR]e6\f[R] is \f[CR]e5\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP This function can only be used for subdivision geometries. As all topologies of a subdivision geometry share the same face buffer the function does not depend on the topology ID. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryFirstHalfEdge], [rtcGetGeometryFace], [rtcGetGeometryOppositeHalfEdge], [rtcGetGeometryNextHalfEdge], [rtcGetGeometryPreviousHalfEdge] diff --git a/man/man3/rtcGetGeometryThreadSafe.3embree4 b/man/man3/rtcGetGeometryThreadSafe.3embree4 index 42b141cbd5..afe2a30cb2 100644 --- a/man/man3/rtcGetGeometryThreadSafe.3embree4 +++ b/man/man3/rtcGetGeometryThreadSafe.3embree4 @@ -1,55 +1,33 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryThreadSafe" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryThreadSafe - returns the geometry bound to +.EX +rtcGetGeometryThreadSafe \- returns the geometry bound to the specified geometry ID -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCGeometry rtcGetGeometryThreadSafe(RTCScene scene, unsigned int geomID); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryThreadSafe\f[R] function returns the geometry -that is bound to the specified geometry ID (\f[V]geomID\f[R] argument) -for the specified scene (\f[V]scene\f[R] argument). +The \f[CR]rtcGetGeometryThreadSafe\f[R] function returns the geometry +that is bound to the specified geometry ID (\f[CR]geomID\f[R] argument) +for the specified scene (\f[CR]scene\f[R] argument). This function just looks up the handle and does \f[I]not\f[R] increment the reference count. If you want to get ownership of the handle, you need to additionally -call \f[V]rtcRetainGeometry\f[R]. +call \f[CR]rtcRetainGeometry\f[R]. .PP This function is thread safe and should NOT get used during rendering. -If you need a fast non-thread safe version during rendering please use +If you need a fast non\-thread safe version during rendering please use the [rtcGetGeometry] function. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcAttachGeometry], [rtcAttachGeometryByID], [rtcGetGeometry] diff --git a/man/man3/rtcGetGeometryTransform.3embree4 b/man/man3/rtcGetGeometryTransform.3embree4 index a91926bbb5..58773d1aa8 100644 --- a/man/man3/rtcGetGeometryTransform.3embree4 +++ b/man/man3/rtcGetGeometryTransform.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryTransform" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryTransform - returns the interpolated instance +.EX +rtcGetGeometryTransform \- returns the interpolated instance transformation for the specified time -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcGetGeometryTransform( @@ -36,37 +18,33 @@ void rtcGetGeometryTransform( enum RTCFormat format, void* xfm ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryTransform\f[R] function returns the interpolated -local to world transformation (\f[V]xfm\f[R] parameter) of an instance -geometry (\f[V]geometry\f[R] parameter) for a particular time -(\f[V]time\f[R] parameter in range [0,1]) in the specified format -(\f[V]format\f[R] parameter). +The \f[CR]rtcGetGeometryTransform\f[R] function returns the interpolated +local to world transformation (\f[CR]xfm\f[R] parameter) of an instance +geometry (\f[CR]geometry\f[R] parameter) for a particular time +(\f[CR]time\f[R] parameter in range [0, 1]) in the specified format +(\f[CR]format\f[R] parameter). .PP Possible formats for the returned matrix are: .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid -out in row-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid +out in row\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form as a 4×4 homogeneous matrix with last row equal -to (0, 0, 0, 1). +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form as a 4×4 homogeneous matrix with last row +equal to (0, 0, 0, 1). .PP This function is supposed to be used during rendering, but only supported on the CPU and not inside SYCL kernels on the GPU. -Inside a SYCL kernel the \f[V]rtcGetGeometryTransformFromScene\f[R] +Inside a SYCL kernel the \f[CR]rtcGetGeometryTransformFromScene\f[R] function has to get used. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform], [rtcGetGeometryTransformFromScene] diff --git a/man/man3/rtcGetGeometryTransformEx.3embree4 b/man/man3/rtcGetGeometryTransformEx.3embree4 index 8d0962c78b..9950a6f458 100644 --- a/man/man3/rtcGetGeometryTransformEx.3embree4 +++ b/man/man3/rtcGetGeometryTransformEx.3embree4 @@ -1,34 +1,16 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryTransformEx" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryTransformEx - returns the interpolated instance +.EX +rtcGetGeometryTransformEx \- returns the interpolated instance transformation for an instance of an instance array geometry for the specified time. -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcGetGeometryTransformEx( @@ -38,34 +20,30 @@ void rtcGetGeometryTransformEx( enum RTCFormat format, void* xfm ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryTransformEx\f[R] function returns the -interpolated local to world transformation (\f[V]xfm\f[R] parameter) of -the \f[V]instPrimID\f[R]-th instance of an instance array geometry -(\f[V]geometry\f[R] parameter) for a particular time (\f[V]time\f[R] -parameter in range [0,1]) in the specified format (\f[V]format\f[R] +The \f[CR]rtcGetGeometryTransformEx\f[R] function returns the +interpolated local to world transformation (\f[CR]xfm\f[R] parameter) of +the \f[CR]instPrimID\f[R]\-th instance of an instance array geometry +(\f[CR]geometry\f[R] parameter) for a particular time (\f[CR]time\f[R] +parameter in range [0, 1]) in the specified format (\f[CR]format\f[R] parameter). -The function can also be used when \f[V]geometry\f[R] refers to a -regular instance, but then the \f[V]instPrimID\f[R] has to be 0. +The function can also be used when \f[CR]geometry\f[R] refers to a +regular instance, but then the \f[CR]instPrimID\f[R] has to be 0. .PP Possible formats for the returned matrix are: .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid -out in row-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid +out in row\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form as a 4×4 homogeneous matrix with last row equal -to (0, 0, 0, 1). +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form as a 4×4 homogeneous matrix with last row +equal to (0, 0, 0, 1). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE_ARRAY] diff --git a/man/man3/rtcGetGeometryTransformFromScene.3embree4 b/man/man3/rtcGetGeometryTransformFromScene.3embree4 index 7e2ce38351..80b5fb91cf 100644 --- a/man/man3/rtcGetGeometryTransformFromScene.3embree4 +++ b/man/man3/rtcGetGeometryTransformFromScene.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryTransformFromScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryTransformFromScene - returns the interpolated instance +.EX +rtcGetGeometryTransformFromScene \- returns the interpolated instance transformation for the specified time -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcGetGeometryTransformFromScene( @@ -37,37 +19,33 @@ void rtcGetGeometryTransformFromScene( enum RTCFormat format, void* xfm ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryTransformFromScene\f[R] function returns the -interpolated local to world transformation (\f[V]xfm\f[R] output +The \f[CR]rtcGetGeometryTransformFromScene\f[R] function returns the +interpolated local to world transformation (\f[CR]xfm\f[R] output parameter) of an instance geometry specified by its geometry ID -(\f[V]geomID\f[R] parameter) of a scene (\f[V]scene\f[R] parameter) for -a particular time (\f[V]time\f[R] parameter in range [0,1]) in the -specified format (\f[V]format\f[R] parameter). +(\f[CR]geomID\f[R] parameter) of a scene (\f[CR]scene\f[R] parameter) +for a particular time (\f[CR]time\f[R] parameter in range [0, 1]) in the +specified format (\f[CR]format\f[R] parameter). .PP Possible formats for the returned matrix are: .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid -out in row-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid +out in row\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form as a 4×4 homogeneous matrix with last row equal -to (0, 0, 0, 1). +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form as a 4×4 homogeneous matrix with last row +equal to (0, 0, 0, 1). .PP -In contrast to the \f[V]rtcGetGeometryTransform\f[R] function, the -\f[V]rtcGetGeometryTransformFromScene\f[R] function can get used during +In contrast to the \f[CR]rtcGetGeometryTransform\f[R] function, the +\f[CR]rtcGetGeometryTransformFromScene\f[R] function can get used during rendering inside a SYCL kernel. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform], [rtcGetGeometryTransform] diff --git a/man/man3/rtcGetGeometryUserData.3embree4 b/man/man3/rtcGetGeometryUserData.3embree4 index c982705401..132fa661aa 100644 --- a/man/man3/rtcGetGeometryUserData.3embree4 +++ b/man/man3/rtcGetGeometryUserData.3embree4 @@ -1,53 +1,31 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryUserData" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryUserData - returns the user data pointer +.EX +rtcGetGeometryUserData \- returns the user data pointer of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void* rtcGetGeometryUserData(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetGeometryUserData\f[R] function queries the user data -pointer previously set with \f[V]rtcSetGeometryUserData\f[R]. -When \f[V]rtcSetGeometryUserData\f[R] was not called yet, \f[V]NULL\f[R] -is returned. +The \f[CR]rtcGetGeometryUserData\f[R] function queries the user data +pointer previously set with \f[CR]rtcSetGeometryUserData\f[R]. +When \f[CR]rtcSetGeometryUserData\f[R] was not called yet, +\f[CR]NULL\f[R] is returned. .PP This function is supposed to be used during rendering, but only supported on the CPU and not inside SYCL kernels on the GPU. -Inside a SYCL kernel the \f[V]rtcGetGeometryUserDataFromScene\f[R] +Inside a SYCL kernel the \f[CR]rtcGetGeometryUserDataFromScene\f[R] function has to get used. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryUserData], [rtcGetGeometryUserDataFromScene] diff --git a/man/man3/rtcGetGeometryUserDataFromScene.3embree4 b/man/man3/rtcGetGeometryUserDataFromScene.3embree4 index 090f9b1d30..d7d1ea70bd 100644 --- a/man/man3/rtcGetGeometryUserDataFromScene.3embree4 +++ b/man/man3/rtcGetGeometryUserDataFromScene.3embree4 @@ -1,54 +1,32 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetGeometryUserDataFromScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetGeometryUserDataFromScene - returns the user data pointer +.EX +rtcGetGeometryUserDataFromScene \- returns the user data pointer of the geometry through the scene object -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void* rtcGetGeometryUserDataFromScene(RTCScene scene, unsigned int geomID); -\f[R] -.fi +.EE .SS DESCRIPTION +The \f[CR]rtcGetGeometryUserDataFromScene\f[R] function queries the user +data pointer previously set with \f[CR]rtcSetGeometryUserData\f[R] from +the geometry with index \f[CR]geomID\f[R] from the specified scene +\f[CR]scene\f[R]. +When \f[CR]rtcSetGeometryUserData\f[R] was not called yet, +\f[CR]NULL\f[R] is returned. .PP -The \f[V]rtcGetGeometryUserDataFromScene\f[R] function queries the user -data pointer previously set with \f[V]rtcSetGeometryUserData\f[R] from -the geometry with index \f[V]geomID\f[R] from the specified scene -\f[V]scene\f[R]. -When \f[V]rtcSetGeometryUserData\f[R] was not called yet, \f[V]NULL\f[R] -is returned. -.PP -In contrast to the \f[V]rtcGetGeometryUserData\f[R] function, the -\f[V]rtcGetGeometryUserDataFromScene\f[R] function an get used during +In contrast to the \f[CR]rtcGetGeometryUserData\f[R] function, the +\f[CR]rtcGetGeometryUserDataFromScene\f[R] function an get used during rendering inside a SYCL kernel. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryUserData], [rtcGetGeometryUserData] diff --git a/man/man3/rtcGetSYCLDeviceFunctionPointer.3embree4 b/man/man3/rtcGetSYCLDeviceFunctionPointer.3embree4 index af421c4864..1398fe2376 100644 --- a/man/man3/rtcGetSYCLDeviceFunctionPointer.3embree4 +++ b/man/man3/rtcGetSYCLDeviceFunctionPointer.3embree4 @@ -1,73 +1,48 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetSYCLDeviceFunctionPointer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetSYCLDeviceFunctionPointer - obtains a device side +.EX +rtcGetSYCLDeviceFunctionPointer \- obtains a device side function pointer for some SYCL function -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include template inline decltype(F) rtcGetSYCLDeviceFunctionPointer(sycl::queue& queue); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function returns a device side function pointer for some function -F. -This function F must be defined using the -\f[V]RTC_SYCL_INDIRECTLY_CALLABLE\f[R] attribute, e.g.: +F. This function F must be defined using the +\f[CR]RTC_SYCL_INDIRECTLY_CALLABLE\f[R] attribute, e.g.: .IP -.nf -\f[C] +.EX RTC_SYCL_INDIRECTLY_CALLABLE void filter( const RTCFilterFunctionNArguments* args) { ... } RTCFilterFunctionN fptr = rtcGetSYCLDeviceFunctionPointer(queue); -\f[R] -.fi +.EE .PP Such a device side function pointers of some filter callbacks can get assigned to a geometry using the -\f[V]rtcSetGeometryIntersectFilterFunction\f[R] and -\f[V]rtcSetGeometryOccludedFilterFunction\f[R] API functions. +\f[CR]rtcSetGeometryIntersectFilterFunction\f[R] and +\f[CR]rtcSetGeometryOccludedFilterFunction\f[R] API functions. .PP Further, device side function pointers for user geometry callbacks can be assigned to geometries using the -\f[V]rtcSetGeometryIntersectFunction\f[R] and -\f[V]rtcSetGeometryOccludedFunction\f[R] API calls. +\f[CR]rtcSetGeometryIntersectFunction\f[R] and +\f[CR]rtcSetGeometryOccludedFunction\f[R] API calls. .PP These geometry versions of the callback functions are disabled in SYCL by default, and we recommend not using them for performance reasons. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryIntersectFunction], [rtcSetGeometryOccludedFunction], [rtcSetGeometryIntersectFilterFunction], [rtcSetGeometryOccludedFilterFunction] diff --git a/man/man3/rtcGetSceneBounds.3embree4 b/man/man3/rtcGetSceneBounds.3embree4 index 3c877677bc..aafd8be881 100644 --- a/man/man3/rtcGetSceneBounds.3embree4 +++ b/man/man3/rtcGetSceneBounds.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetSceneBounds" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetSceneBounds - returns the axis-aligned bounding box of the scene -\f[R] -.fi +.EX +rtcGetSceneBounds \- returns the axis\-aligned bounding box of the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCORE_ALIGN(16) RTCBounds @@ -39,24 +21,20 @@ void rtcGetSceneBounds( RTCScene scene, struct RTCBounds* bounds_o ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetSceneBounds\f[R] function queries the axis-aligned -bounding box of the specified scene (\f[V]scene\f[R] argument) and +The \f[CR]rtcGetSceneBounds\f[R] function queries the axis\-aligned +bounding box of the specified scene (\f[CR]scene\f[R] argument) and stores that bounding box to the provided destination pointer -(\f[V]bounds_o\f[R] argument). +(\f[CR]bounds_o\f[R] argument). The stored bounding box consists of lower and upper bounds for the x, y, -and z dimensions as specified by the \f[V]RTCBounds\f[R] structure. +and z dimensions as specified by the \f[CR]RTCBounds\f[R] structure. .PP The provided destination pointer must be aligned to 16 bytes. The function may be invoked only after committing the scene; otherwise the result is undefined. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetSceneLinearBounds], [rtcCommitScene], [rtcJoinCommitScene] diff --git a/man/man3/rtcGetSceneDevice.3embree4 b/man/man3/rtcGetSceneDevice.3embree4 index 3de3885748..42ec02fda2 100644 --- a/man/man3/rtcGetSceneDevice.3embree4 +++ b/man/man3/rtcGetSceneDevice.3embree4 @@ -1,47 +1,25 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetSceneDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetSceneDevice - returns the device the scene got created in -\f[R] -.fi +.EX +rtcGetSceneDevice \- returns the device the scene got created in +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCDevice rtcGetSceneDevice(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function returns the device object the scene got created in. The returned handle own one additional reference to the device object, -thus you should need to call \f[V]rtcReleaseDevice\f[R] when the +thus you should need to call \f[CR]rtcReleaseDevice\f[R] when the returned handle is no longer required. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcReleaseDevice] diff --git a/man/man3/rtcGetSceneFlags.3embree4 b/man/man3/rtcGetSceneFlags.3embree4 index 5ec30ca553..5d608ae5b1 100644 --- a/man/man3/rtcGetSceneFlags.3embree4 +++ b/man/man3/rtcGetSceneFlags.3embree4 @@ -1,53 +1,29 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetSceneFlags" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetSceneFlags - returns the flags of the scene -\f[R] -.fi +.EX +rtcGetSceneFlags \- returns the flags of the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCSceneFlags rtcGetSceneFlags(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Queries the flags of a scene. This function can be useful when setting individual flags, e.g.\ to just set the robust mode without changing other flags the following way: .IP -.nf -\f[C] +.EX RTCSceneFlags flags = rtcGetSceneFlags(scene); rtcSetSceneFlags(scene, RTC_SCENE_FLAG_ROBUST | flags); -\f[R] -.fi +.EE .SS EXIT STATUS -.PP -On failure \f[V]RTC_SCENE_FLAG_NONE\f[R] is returned and an error code -is set that can be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]RTC_SCENE_FLAG_NONE\f[R] is returned and an error code +is set that can be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetSceneFlags] diff --git a/man/man3/rtcGetSceneLinearBounds.3embree4 b/man/man3/rtcGetSceneLinearBounds.3embree4 index f0f12619ef..66e68efd45 100644 --- a/man/man3/rtcGetSceneLinearBounds.3embree4 +++ b/man/man3/rtcGetSceneLinearBounds.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcGetSceneLinearBounds" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcGetSceneLinearBounds - returns the linear bounds of the scene -\f[R] -.fi +.EX +rtcGetSceneLinearBounds \- returns the linear bounds of the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCORE_ALIGN(16) RTCLinearBounds @@ -39,26 +21,22 @@ void rtcGetSceneLinearBounds( RTCScene scene, struct RTCLinearBounds* bounds_o ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcGetSceneLinearBounds\f[R] function queries the linear bounds -of the specified scene (\f[V]scene\f[R] argument) and stores them to the -provided destination pointer (\f[V]bounds_o\f[R] argument). +The \f[CR]rtcGetSceneLinearBounds\f[R] function queries the linear +bounds of the specified scene (\f[CR]scene\f[R] argument) and stores +them to the provided destination pointer (\f[CR]bounds_o\f[R] argument). The stored linear bounds consist of bounding boxes for time 0 -(\f[V]bounds0\f[R] member) and time 1 (\f[V]bounds1\f[R] member) as -specified by the \f[V]RTCLinearBounds\f[R] structure. -Linearly interpolating these bounds to a specific time \f[V]t\f[R] +(\f[CR]bounds0\f[R] member) and time 1 (\f[CR]bounds1\f[R] member) as +specified by the \f[CR]RTCLinearBounds\f[R] structure. +Linearly interpolating these bounds to a specific time \f[CR]t\f[R] yields bounds for the geometry at that time. .PP The provided destination pointer must be aligned to 16 bytes. The function may be called only after committing the scene, otherwise the result is undefined. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetSceneBounds], [rtcCommitScene], [rtcJoinCommitScene] diff --git a/man/man3/rtcInitIntersectArguments.3embree4 b/man/man3/rtcInitIntersectArguments.3embree4 index c64e02c44d..64ef98c15e 100644 --- a/man/man3/rtcInitIntersectArguments.3embree4 +++ b/man/man3/rtcInitIntersectArguments.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInitIntersectArguments" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInitIntersectArguments - initializes the intersect arguments struct -\f[R] -.fi +.EX +rtcInitIntersectArguments \- initializes the intersect arguments struct +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCRayQueryFlags @@ -52,74 +34,70 @@ struct RTCIntersectArguments void rtcInitIntersectArguments( struct RTCIntersectArguments* args ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInitIntersectArguments\f[R] function initializes the +The \f[CR]rtcInitIntersectArguments\f[R] function initializes the optional argument struct that can get passed to the -\f[V]rtcIntersect1/4/8/16\f[R] functions to default values. +\f[CR]rtcIntersect1/4/8/16\f[R] functions to default values. The arguments struct needs to get used for more advanced Embree features as described here. .PP -The \f[V]flags\f[R] member can get used to enable special traversal +The \f[CR]flags\f[R] member can get used to enable special traversal mode. -Using the \f[V]RTC_RAY_QUERY_FLAG_INCOHERENT\f[R] flag uses an optimized -traversal algorithm for incoherent rays (default), while -\f[V]RTC_RAY_QUERY_FLAG_COHERENT\f[R] uses an optimized traversal +Using the \f[CR]RTC_RAY_QUERY_FLAG_INCOHERENT\f[R] flag uses an +optimized traversal algorithm for incoherent rays (default), while +\f[CR]RTC_RAY_QUERY_FLAG_COHERENT\f[R] uses an optimized traversal algorithm for coherent rays (e.g.\ primary camera rays). .PP -The \f[V]feature_mask\f[R] member should get used in SYCL to just enable -ray tracing features required to render a given scene. +The \f[CR]feature_mask\f[R] member should get used in SYCL to just +enable ray tracing features required to render a given scene. Please see section [RTCFeatureFlags] for a more detailed description. .PP -The \f[V]context\f[R] member can get used to pass an optional +The \f[CR]context\f[R] member can get used to pass an optional intersection context. It is guaranteed that the pointer to the context passed to a ray query is directly passed to all callback functions. This way it is possible to attach arbitrary data to the end of the -context, such as a per-ray payload. +context, such as a per\-ray payload. Please note that the ray pointer is not guaranteed to be passed to the callback functions, thus reading additional data from the ray pointer passed to callbacks is not possible. See section [rtcInitRayQueryContext] for more details. .PP -The \f[V]filter\f[R] member specifies a filter function to invoke for +The \f[CR]filter\f[R] member specifies a filter function to invoke for each encountered hit. The support for the argument filter function must be enabled for a scene -by using the \f[V]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] scene -flag. +by using the \f[CR]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] +scene flag. In case of instancing this feature has to get enabled also for each instantiated scene. .PP The argument filter function is invoked for each geometry for which it got explicitely enabled using the -\f[V]rtcSetGeometryEnableFilterFunctionFromArguments\f[R] function. +\f[CR]rtcSetGeometryEnableFilterFunctionFromArguments\f[R] function. The invokation of the argument filter function can also get enfored for each geometry using the -\f[V]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag. +\f[CR]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag. This argument filter function is invoked as a second filter stage after -the per-geometry filter function is invoked. +the per\-geometry filter function is invoked. Only rays that passed the first filter stage are valid in this second filter stage. -Having such a per ray-query filter function can be useful to implement +Having such a per ray\-query filter function can be useful to implement modifications of the behavior of the query, such as collecting all hits or accumulating transparencies. .PP -The \f[V]intersect\f[R] member specifies the user geometry callback to +The \f[CR]intersect\f[R] member specifies the user geometry callback to get invoked for each user geometry encountered during traversal. The user geometry callback specified this way has preference over the one specified inside the geometry. .PP -The \f[V]minWidthDistanceFactor\f[R] value controls the target size of -the curve radii when the min-width feature is enabled. +The \f[CR]minWidthDistanceFactor\f[R] value controls the target size of +the curve radii when the min\-width feature is enabled. Please see the [rtcSetGeometryMaxRadiusScale] function for more details -on the min-width feature. +on the min\-width feature. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcIntersect1], [rtcIntersect4/8/16], [RTCFeatureFlags], [rtcInitRayQueryContext], [RTC_GEOMETRY_TYPE_USER], [rtcSetGeometryMaxRadiusScale] diff --git a/man/man3/rtcInitOccludedArguments.3embree4 b/man/man3/rtcInitOccludedArguments.3embree4 index de03faa541..f1ad3e202a 100644 --- a/man/man3/rtcInitOccludedArguments.3embree4 +++ b/man/man3/rtcInitOccludedArguments.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInitOccludedArguments" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInitOccludedArguments - initializes the occluded arguments struct -\f[R] -.fi +.EX +rtcInitOccludedArguments \- initializes the occluded arguments struct +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCRayQueryFlags @@ -52,74 +34,70 @@ struct RTCOccludedArguments void rtcInitOccludedArguments( struct RTCOccludedArguments* args ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInitOccludedArguments\f[R] function initializes the optional -argument struct that can get passed to the \f[V]rtcOccluded1/4/8/16\f[R] -functions to default values. +The \f[CR]rtcInitOccludedArguments\f[R] function initializes the +optional argument struct that can get passed to the +\f[CR]rtcOccluded1/4/8/16\f[R] functions to default values. The arguments struct needs to get used for more advanced Embree features as described here. .PP -The \f[V]flags\f[R] member can get used to enable special traversal +The \f[CR]flags\f[R] member can get used to enable special traversal mode. -Using the \f[V]RTC_RAY_QUERY_FLAG_INCOHERENT\f[R] flag uses an optimized -traversal algorithm for incoherent rays (default), while -\f[V]RTC_RAY_QUERY_FLAG_COHERENT\f[R] uses an optimized traversal +Using the \f[CR]RTC_RAY_QUERY_FLAG_INCOHERENT\f[R] flag uses an +optimized traversal algorithm for incoherent rays (default), while +\f[CR]RTC_RAY_QUERY_FLAG_COHERENT\f[R] uses an optimized traversal algorithm for coherent rays (e.g.\ primary camera rays). .PP -The \f[V]feature_mask\f[R] member should get used in SYCL to just enable -ray tracing features required to render a given scene. +The \f[CR]feature_mask\f[R] member should get used in SYCL to just +enable ray tracing features required to render a given scene. Please see section [RTCFeatureFlags] for a more detailed description. .PP -The \f[V]context\f[R] member can get used to pass an optional +The \f[CR]context\f[R] member can get used to pass an optional intersection context. It is guaranteed that the pointer to the context passed to a ray query is directly passed to all callback functions. This way it is possible to attach arbitrary data to the end of the -context, such as a per-ray payload. +context, such as a per\-ray payload. Please note that the ray pointer is not guaranteed to be passed to the callback functions, thus reading additional data from the ray pointer passed to callbacks is not possible. See section [rtcInitRayQueryContext] for more details. .PP -The \f[V]filter\f[R] member specifies a filter function to invoked for +The \f[CR]filter\f[R] member specifies a filter function to invoked for each encountered hit. The support for the argument filter function must be enabled for a scene -by using the \f[V]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] scene -flag. +by using the \f[CR]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] +scene flag. In case of instancing this feature has to get enabled also for each instantiated scene. .PP The argument filter function is invoked for each geometry for which it got explicitely enabled using the -\f[V]rtcSetGeometryEnableFilterFunctionFromArguments\f[R] function. +\f[CR]rtcSetGeometryEnableFilterFunctionFromArguments\f[R] function. The invokation of the argument filter function can also get enfored for each geometry using the -\f[V]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag. +\f[CR]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag. This argument filter function is invoked as a second filter stage after -the per-geometry filter function is invoked. +the per\-geometry filter function is invoked. Only rays that passed the first filter stage are valid in this second filter stage. -Having such a per ray-query filter function can be useful to implement +Having such a per ray\-query filter function can be useful to implement modifications of the behavior of the query, such as collecting all hits or accumulating transparencies. .PP -The \f[V]intersect\f[R] member specifies the user geometry callback to +The \f[CR]intersect\f[R] member specifies the user geometry callback to get invoked for each user geometry encountered during traversal. The user geometry callback specified this way has preference over the one specified inside the geometry. .PP -The \f[V]minWidthDistanceFactor\f[R] value controls the target size of -the curve radii when the min-width feature is enabled. +The \f[CR]minWidthDistanceFactor\f[R] value controls the target size of +the curve radii when the min\-width feature is enabled. Please see the [rtcSetGeometryMaxRadiusScale] function for more details -on the min-width feature. +on the min\-width feature. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcOccluded1], [rtcOccluded4/8/16], [RTCFeatureFlags], [rtcInitRayQueryContext], [RTC_GEOMETRY_TYPE_USER], [rtcSetGeometryMaxRadiusScale] diff --git a/man/man3/rtcInitPointQueryContext.3embree4 b/man/man3/rtcInitPointQueryContext.3embree4 index bc7f03c9ee..ad3f4b6454 100644 --- a/man/man3/rtcInitPointQueryContext.3embree4 +++ b/man/man3/rtcInitPointQueryContext.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInitPointQueryContext" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInitPointQueryContext - initializes the context information (e.g. - stack of (multilevel-)instance transformations) for point queries -\f[R] -.fi +.EX +rtcInitPointQueryContext \- initializes the context information (e.g. + stack of (multilevel\-)instance transformations) for point queries +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTC_ALIGN(16) RTCPointQueryContext @@ -48,17 +30,15 @@ struct RTC_ALIGN(16) RTCPointQueryContext void rtcInitPointQueryContext( struct RTCPointQueryContext* context ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -A stack (\f[V]RTCPointQueryContext\f[R] type) which stores the IDs and +A stack (\f[CR]RTCPointQueryContext\f[R] type) which stores the IDs and instance transformations during a BVH traversal for a point query. The transformations are assumed to be affine transformations (3×3 matrix plus translation) and therefore the last column is ignored (see [RTC_GEOMETRY_TYPE_INSTANCE] for details). .PP -The \f[V]rtcInitPointContext\f[R] function initializes the context to +The \f[CR]rtcInitPointContext\f[R] function initializes the context to default values and should be called for initialization. .PP The context will be passed as an argument to the point query callback @@ -71,8 +51,6 @@ The context is an necessary argument to [rtcPointQuery] and Embree internally uses the topmost instance transformation of the stack to transform the point query into instance space. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcPointQuery], [rtcSetGeometryPointQueryFunction] diff --git a/man/man3/rtcInitQuaternionDecomposition.3embree4 b/man/man3/rtcInitQuaternionDecomposition.3embree4 index af402cadc5..188b4419ac 100644 --- a/man/man3/rtcInitQuaternionDecomposition.3embree4 +++ b/man/man3/rtcInitQuaternionDecomposition.3embree4 @@ -1,45 +1,23 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInitQuaternionDecomposition" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInitQuaternionDecomposition - initializes quaternion decomposition -\f[R] -.fi +.EX +rtcInitQuaternionDecomposition \- initializes quaternion decomposition +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX void rtcInitQuaternionDecomposition( struct RTCQuaternionDecomposition* qd ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInitQuaternionDecomposition\f[R] function initializes a -\f[V]RTCQuaternionDecomposition\f[R] structure to represent an identity +The \f[CR]rtcInitQuaternionDecomposition\f[R] function initializes a +\f[CR]RTCQuaternionDecomposition\f[R] structure to represent an identity transformation. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcSetGeometryTransformQuaternion], [RTCQuaternionDecomposition] diff --git a/man/man3/rtcInitRayQueryContext.3embree4 b/man/man3/rtcInitRayQueryContext.3embree4 index 9445275851..1d9da50846 100644 --- a/man/man3/rtcInitRayQueryContext.3embree4 +++ b/man/man3/rtcInitRayQueryContext.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInitRayQueryContext" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInitRayQueryContext - initializes the ray query context -\f[R] -.fi +.EX +rtcInitRayQueryContext \- initializes the ray query context +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCRayQueryContext @@ -41,30 +23,26 @@ struct RTCRayQueryContext void rtcInitRayQueryContext( struct RTCRayQueryContext* context ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInitRayQueryContext\f[R] function initializes the +The \f[CR]rtcInitRayQueryContext\f[R] function initializes the intersection context to default values and should be called to initialize every ray query context. .PP It is guaranteed that the pointer to the ray query context -(\f[V]RTCRayQueryContext\f[R] type) is passed to the registered callback -functions. +(\f[CR]RTCRayQueryContext\f[R] type) is passed to the registered +callback functions. This way it is possible to attach arbitrary data to the end of the ray -query context, such as a per-ray payload. +query context, such as a per\-ray payload. .PP Inside the user geometry callback the ray query context can get used to -access the \f[V]instID\f[R] stack to know which instance the user +access the \f[CR]instID\f[R] stack to know which instance the user geometry object resides. .PP If not ray query context is specified when tracing a ray, a default context is used. .SS EXIT STATUS -.PP No error code is set by this function. .SS SEE ALSO -.PP [rtcIntersect1], [rtcIntersect4/8/16], [rtcOccluded1], [rtcOccluded4/8/16] diff --git a/man/man3/rtcInterpolate.3embree4 b/man/man3/rtcInterpolate.3embree4 index d81de7033c..526874f746 100644 --- a/man/man3/rtcInterpolate.3embree4 +++ b/man/man3/rtcInterpolate.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInterpolate" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInterpolate - interpolates vertex attributes -\f[R] -.fi +.EX +rtcInterpolate \- interpolates vertex attributes +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCInterpolateArguments @@ -49,11 +31,9 @@ struct RTCInterpolateArguments void rtcInterpolate( const struct RTCInterpolateArguments* args ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInterpolate\f[R] function smoothly interpolates per-vertex +The \f[CR]rtcInterpolate\f[R] function smoothly interpolates per\-vertex data over the geometry. This interpolation is supported for triangle meshes, quad meshes, curve geometries, and subdivision geometries. @@ -62,49 +42,47 @@ possible to get the first and second order derivatives of that value. This interpolation ignores displacements of subdivision surfaces and always interpolates the underlying base surface. .PP -The \f[V]rtcInterpolate\f[R] call gets passed a number of arguments -inside a structure of type \f[V]RTCInterpolateArguments\f[R]. -For some geometry (\f[V]geometry\f[R] parameter) this function smoothly -interpolates the per-vertex data stored inside the specified geometry -buffer (\f[V]bufferType\f[R] and \f[V]bufferSlot\f[R] parameters) to the -u/v location (\f[V]u\f[R] and \f[V]v\f[R] parameters) of the primitive -(\f[V]primID\f[R] parameter). +The \f[CR]rtcInterpolate\f[R] call gets passed a number of arguments +inside a structure of type \f[CR]RTCInterpolateArguments\f[R]. +For some geometry (\f[CR]geometry\f[R] parameter) this function smoothly +interpolates the per\-vertex data stored inside the specified geometry +buffer (\f[CR]bufferType\f[R] and \f[CR]bufferSlot\f[R] parameters) to +the u/v location (\f[CR]u\f[R] and \f[CR]v\f[R] parameters) of the +primitive (\f[CR]primID\f[R] parameter). The number of floating point values to interpolate and store to the -destination arrays can be specified using the \f[V]valueCount\f[R] +destination arrays can be specified using the \f[CR]valueCount\f[R] parameter. As interpolation buffer, one can specify vertex buffers -(\f[V]RTC_BUFFER_TYPE_VERTEX\f[R]) and vertex attribute buffers -(\f[V]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R]) as well. +(\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R]) and vertex attribute buffers +(\f[CR]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R]) as well. .PP -The \f[V]rtcInterpolate\f[R] call stores \f[V]valueCount\f[R] number of -interpolated floating point values to the memory location pointed to by -\f[V]P\f[R]. -One can avoid storing the interpolated value by setting \f[V]P\f[R] to -\f[V]NULL\f[R]. +The \f[CR]rtcInterpolate\f[R] call stores \f[CR]valueCount\f[R] number +of interpolated floating point values to the memory location pointed to +by \f[CR]P\f[R]. +One can avoid storing the interpolated value by setting \f[CR]P\f[R] to +\f[CR]NULL\f[R]. .PP The first order derivative of the interpolation by u and v are stored at -the \f[V]dPdu\f[R] and \f[V]dPdv\f[R] memory locations. +the \f[CR]dPdu\f[R] and \f[CR]dPdv\f[R] memory locations. One can avoid storing first order derivatives by setting both -\f[V]dPdu\f[R] and \f[V]dPdv\f[R] to \f[V]NULL\f[R]. +\f[CR]dPdu\f[R] and \f[CR]dPdv\f[R] to \f[CR]NULL\f[R]. .PP -The second order derivatives are stored at the \f[V]ddPdudu\f[R], -\f[V]ddPdvdv\f[R], and \f[V]ddPdudv\f[R] memory locations. +The second order derivatives are stored at the \f[CR]ddPdudu\f[R], +\f[CR]ddPdvdv\f[R], and \f[CR]ddPdudv\f[R] memory locations. One can avoid storing second order derivatives by setting these three -pointers to \f[V]NULL\f[R]. +pointers to \f[CR]NULL\f[R]. .PP -To use \f[V]rtcInterpolate\f[R] for a geometry, all changes to that -geometry must be properly committed using \f[V]rtcCommitGeometry\f[R]. +To use \f[CR]rtcInterpolate\f[R] for a geometry, all changes to that +geometry must be properly committed using \f[CR]rtcCommitGeometry\f[R]. .PP All input buffers and output arrays must be padded to 16 bytes, as the -implementation uses 16-byte SSE instructions to read and write into +implementation uses 16\-byte SSE instructions to read and write into these buffers. .PP See tutorial [Interpolation] for an example of using the -\f[V]rtcInterpolate\f[R] function. +\f[CR]rtcInterpolate\f[R] function. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcInterpolateN] diff --git a/man/man3/rtcInterpolateN.3embree4 b/man/man3/rtcInterpolateN.3embree4 index 5b481f9e64..ff2c87a2c7 100644 --- a/man/man3/rtcInterpolateN.3embree4 +++ b/man/man3/rtcInterpolateN.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInterpolateN" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInterpolateN - performs N interpolations of vertex attribute data -\f[R] -.fi +.EX +rtcInterpolateN \- performs N interpolations of vertex attribute data +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCInterpolateNArguments @@ -51,27 +33,24 @@ struct RTCInterpolateNArguments void rtcInterpolateN( const struct RTCInterpolateNArguments* args ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInterpolateN\f[R] is similar to \f[V]rtcInterpolate\f[R], -but performs \f[V]N\f[R] many interpolations at once. +The \f[CR]rtcInterpolateN\f[R] is similar to \f[CR]rtcInterpolate\f[R], +but performs \f[CR]N\f[R] many interpolations at once. It additionally gets an array of u/v coordinates and a valid mask -(\f[V]valid\f[R] parameter) that specifies which of these coordinates +(\f[CR]valid\f[R] parameter) that specifies which of these coordinates are valid. -The valid mask points to \f[V]N\f[R] integers, and a value of -1 denotes -valid and 0 invalid. -If the valid pointer is \f[V]NULL\f[R] all elements are considers valid. +The valid mask points to \f[CR]N\f[R] integers, and a value of \-1 +denotes valid and 0 invalid. +If the valid pointer is \f[CR]NULL\f[R] all elements are considers +valid. The destination arrays are filled in structure of array (SOA) layout. -The value \f[V]N\f[R] must be divisible by 4. +The value \f[CR]N\f[R] must be divisible by 4. .PP -To use \f[V]rtcInterpolateN\f[R] for a geometry, all changes to that -geometry must be properly committed using \f[V]rtcCommitGeometry\f[R]. +To use \f[CR]rtcInterpolateN\f[R] for a geometry, all changes to that +geometry must be properly committed using \f[CR]rtcCommitGeometry\f[R]. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcInterpolate] diff --git a/man/man3/rtcIntersect1.3embree4 b/man/man3/rtcIntersect1.3embree4 index 88670c71fa..94b90cc0c3 100644 --- a/man/man3/rtcIntersect1.3embree4 +++ b/man/man3/rtcIntersect1.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcIntersect1" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcIntersect1 - finds the closest hit for a single ray -\f[R] -.fi +.EX +rtcIntersect1 \- finds the closest hit for a single ray +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcIntersect1( @@ -34,72 +16,67 @@ void rtcIntersect1( struct RTCRayHit* rayhit struct RTCIntersectArguments* args = NULL ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcIntersect1\f[R] function finds the closest hit of a single -ray (\f[V]rayhit\f[R] argument) with the scene (\f[V]scene\f[R] +The \f[CR]rtcIntersect1\f[R] function finds the closest hit of a single +ray (\f[CR]rayhit\f[R] argument) with the scene (\f[CR]scene\f[R] argument). The provided ray/hit structure contains the ray to intersect and some hit output fields that are filled when a hit is found. -The passed optional arguments struct (\f[V]args\f[R] argument) can get +The passed optional arguments struct (\f[CR]args\f[R] argument) can get used for advanced use cases, see section [rtcInitIntersectArguments] for more details. .PP -To trace a ray, the user has to initialize the ray origin (\f[V]org\f[R] -ray member), ray direction (\f[V]dir\f[R] ray member), ray segment -(\f[V]tnear\f[R], \f[V]tfar\f[R] ray members), ray mask (\f[V]mask\f[R] -ray member), and set the ray flags to \f[V]0\f[R] (\f[V]flags\f[R] ray -member). -The ray time (\f[V]time\f[R] ray member) must be initialized to a value +To trace a ray, the user has to initialize the ray origin +(\f[CR]org\f[R] ray member), ray direction (\f[CR]dir\f[R] ray member), +ray segment (\f[CR]tnear\f[R], \f[CR]tfar\f[R] ray members), ray mask +(\f[CR]mask\f[R] ray member), and set the ray flags to \f[CR]0\f[R] +(\f[CR]flags\f[R] ray member). +The ray time (\f[CR]time\f[R] ray member) must be initialized to a value in the range $[0, 1]. -The ray segment has to be in the range [0,∞], thus ranges that start +The ray segment has to be in the range [0, ∞], thus ranges that start behind the ray origin are not valid, but ranges can reach to infinity. See Section [RTCRay] for the ray layout description. .PP -The geometry ID (\f[V]geomID\f[R] hit member) of the hit data must be -initialized to \f[V]RTC_INVALID_GEOMETRY_ID\f[R] (-1). +The geometry ID (\f[CR]geomID\f[R] hit member) of the hit data must be +initialized to \f[CR]RTC_INVALID_GEOMETRY_ID\f[R] (\-1). .PP When no intersection is found, the ray/hit data is not updated. When an intersection is found, the hit distance is written into the -\f[V]tfar\f[R] member of the ray and all hit data is set, such as -unnormalized geometry normal in object space (\f[V]Ng\f[R] hit member), -local hit coordinates (\f[V]u\f[R], \f[V]v\f[R] hit member), instance ID -stack (\f[V]instID\f[R] hit member), geometry ID (\f[V]geomID\f[R] hit -member), and primitive ID (\f[V]primID\f[R] hit member). +\f[CR]tfar\f[R] member of the ray and all hit data is set, such as +unnormalized geometry normal in object space (\f[CR]Ng\f[R] hit member), +local hit coordinates (\f[CR]u\f[R], \f[CR]v\f[R] hit member), instance +ID stack (\f[CR]instID\f[R] hit member), geometry ID (\f[CR]geomID\f[R] +hit member), and primitive ID (\f[CR]primID\f[R] hit member). See Section [RTCHit] for the hit layout description. .PP If the instance ID stack has a prefix of values not equal to -\f[V]RTC_INVALID_GEOMETRY_ID\f[R], the instance ID on each level -corresponds to the geometry ID of the hit instance of the higher-level +\f[CR]RTC_INVALID_GEOMETRY_ID\f[R], the instance ID on each level +corresponds to the geometry ID of the hit instance of the higher\-level scene, the geometry ID corresponds to the hit geometry inside the hit -instanced scene, and the primitive ID corresponds to the n-th primitive +instanced scene, and the primitive ID corresponds to the n\-th primitive of that geometry. .PP If level 0 of the instance ID stack is equal to -\f[V]RTC_INVALID_GEOMETRY_ID\f[R], the geometry ID corresponds to the -hit geometry inside the top-level scene, and the primitive ID -corresponds to the n-th primitive of that geometry. +\f[CR]RTC_INVALID_GEOMETRY_ID\f[R], the geometry ID corresponds to the +hit geometry inside the top\-level scene, and the primitive ID +corresponds to the n\-th primitive of that geometry. .PP The implementation makes no guarantees that primitives whose hit -distance is exactly at (or very close to) \f[V]tnear\f[R] or -\f[V]tfar\f[R] are hit or missed. -If you want to exclude intersections at \f[V]tnear\f[R] just pass a -slightly enlarged \f[V]tnear\f[R], and if you want to include -intersections at \f[V]tfar\f[R] pass a slightly enlarged \f[V]tfar\f[R]. +distance is exactly at (or very close to) \f[CR]tnear\f[R] or +\f[CR]tfar\f[R] are hit or missed. +If you want to exclude intersections at \f[CR]tnear\f[R] just pass a +slightly enlarged \f[CR]tnear\f[R], and if you want to include +intersections at \f[CR]tfar\f[R] pass a slightly enlarged +\f[CR]tfar\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP The ray/hit structure must be aligned to 16 bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcOccluded1], [rtcIntersect4/8/16], [RTCRayHit], [rtcInitIntersectArguments] diff --git a/man/man3/rtcIntersect4.3embree4 b/man/man3/rtcIntersect4.3embree4 index e5140fddc1..6cdd8e5842 100644 --- a/man/man3/rtcIntersect4.3embree4 +++ b/man/man3/rtcIntersect4.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcIntersect4/8/16" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcIntersect4/8/16 - finds the closest hits for a ray packet -\f[R] -.fi +.EX +rtcIntersect4/8/16 \- finds the closest hits for a ray packet +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcIntersect4( @@ -49,49 +31,43 @@ void rtcIntersect16( struct RTCRayHit16* rayhit, struct RTCIntersectArguments* args = NULL ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcIntersect4/8/16\f[R] functions finds the closest hits for a -ray packet of size 4, 8, or 16 (\f[V]rayhit\f[R] argument) with the -scene (\f[V]scene\f[R] argument). +The \f[CR]rtcIntersect4/8/16\f[R] functions finds the closest hits for a +ray packet of size 4, 8, or 16 (\f[CR]rayhit\f[R] argument) with the +scene (\f[CR]scene\f[R] argument). The ray/hit input contains a ray packet and hit packet. -The passed optional arguments struct (\f[V]args\f[R] argument) are used +The passed optional arguments struct (\f[CR]args\f[R] argument) are used to pass additional arguments for advanced features. See Section [rtcIntersect1] for more details and a description of how to set up and trace rays. .PP -A ray valid mask must be provided (\f[V]valid\f[R] argument) which -stores one 32-bit integer (\f[V]-1\f[R] means valid and \f[V]0\f[R] +A ray valid mask must be provided (\f[CR]valid\f[R] argument) which +stores one 32\-bit integer (\f[CR]\-1\f[R] means valid and \f[CR]0\f[R] invalid) per ray in the packet. Only active rays are processed, and hit data of inactive rays is not changed. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -For \f[V]rtcIntersect4\f[R] the ray packet must be aligned to 16 bytes, -for \f[V]rtcIntersect8\f[R] the alignment must be 32 bytes, and for -\f[V]rtcIntersect16\f[R] the alignment must be 64 bytes. +For \f[CR]rtcIntersect4\f[R] the ray packet must be aligned to 16 bytes, +for \f[CR]rtcIntersect8\f[R] the alignment must be 32 bytes, and for +\f[CR]rtcIntersect16\f[R] the alignment must be 64 bytes. .PP -The \f[V]rtcIntersect4\f[R], \f[V]rtcIntersect8\f[R] and -\f[V]rtcIntersect16\f[R] functions may change the ray packet size and +The \f[CR]rtcIntersect4\f[R], \f[CR]rtcIntersect8\f[R] and +\f[CR]rtcIntersect16\f[R] functions may change the ray packet size and ray order when calling back into filter functions or user geometry callbacks. Under some conditions the application can assume packets to stay intakt, which can determined by querying the -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R], -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R], -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R] properties through -the \f[V]rtcGetDeviceProperty\f[R] function. +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R], +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R], +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R] properties through +the \f[CR]rtcGetDeviceProperty\f[R] function. See [rtcGetDeviceProperty] for more information. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcIntersect1], [rtcOccluded4/8/16], [rtcInitIntersectArguments] diff --git a/man/man3/rtcInvokeIntersectFilterFromGeometry.3embree4 b/man/man3/rtcInvokeIntersectFilterFromGeometry.3embree4 index cfbb6fe3b6..6a9c12db56 100644 --- a/man/man3/rtcInvokeIntersectFilterFromGeometry.3embree4 +++ b/man/man3/rtcInvokeIntersectFilterFromGeometry.3embree4 @@ -1,57 +1,35 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInvokeIntersectFilterFromGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInvokeIntersectFilterFromGeometry - invokes the +.EX +rtcInvokeIntersectFilterFromGeometry \- invokes the intersection filter function from the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcInvokeIntersectFilterFromGeometry( const struct RTCIntersectFunctionNArguments* args, const struct RTCFilterFunctionNArguments* filterArgs ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInvokeIntersectFilterFromGeometry\f[R] function can be -called inside an \f[V]RTCIntersectFunctionN\f[R] user geometry callback +The \f[CR]rtcInvokeIntersectFilterFromGeometry\f[R] function can be +called inside an \f[CR]RTCIntersectFunctionN\f[R] user geometry callback function to invoke the intersection filter registered to the geometry. -For this an \f[V]RTCFilterFunctionNArguments\f[R] structure must be -created (see \f[V]rtcSetGeometryIntersectFilterFunction\f[R]) which +For this an \f[CR]RTCFilterFunctionNArguments\f[R] structure must be +created (see \f[CR]rtcSetGeometryIntersectFilterFunction\f[R]) which basically consists of a valid mask, a hit packet to filter, the corresponding ray packet, and the packet size. -After the invocation of \f[V]rtcInvokeIntersectFilterFromGeometry\f[R], -only rays that are still valid (valid mask set to -1) should update a +After the invocation of \f[CR]rtcInvokeIntersectFilterFromGeometry\f[R], +only rays that are still valid (valid mask set to \-1) should update a hit. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcInvokeOccludedFilterFromGeometry], [rtcSetGeometryIntersectFunction] diff --git a/man/man3/rtcInvokeOccludedFilterFromGeometry.3embree4 b/man/man3/rtcInvokeOccludedFilterFromGeometry.3embree4 index fa6266fcea..d21d8e46c2 100644 --- a/man/man3/rtcInvokeOccludedFilterFromGeometry.3embree4 +++ b/man/man3/rtcInvokeOccludedFilterFromGeometry.3embree4 @@ -1,57 +1,35 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcInvokeOccludedFilterFromGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcInvokeOccludedFilterFromGeometry - invokes the occlusion +.EX +rtcInvokeOccludedFilterFromGeometry \- invokes the occlusion filter function from the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcInvokeOccludedFilterFromGeometry( const struct RTCOccludedFunctionNArguments* args, const struct RTCFilterFunctionNArguments* filterArgs ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcInvokeOccludedFilterFromGeometry\f[R] function can be called -inside an \f[V]RTCOccludedFunctionN\f[R] user geometry callback function -to invoke the occlusion filter registered to the geometry. -For this an \f[V]RTCFilterFunctionNArguments\f[R] structure must be -created (see \f[V]rtcSetGeometryIntersectFilterFunction\f[R]) which +The \f[CR]rtcInvokeOccludedFilterFromGeometry\f[R] function can be +called inside an \f[CR]RTCOccludedFunctionN\f[R] user geometry callback +function to invoke the occlusion filter registered to the geometry. +For this an \f[CR]RTCFilterFunctionNArguments\f[R] structure must be +created (see \f[CR]rtcSetGeometryIntersectFilterFunction\f[R]) which basically consists of a valid mask, a hit packet to filter, the corresponding ray packet, and the packet size. -After the invocation of \f[V]rtcInvokeOccludedFilterFromGeometry\f[R] -only rays that are still valid (valid mask set to -1) should signal an +After the invocation of \f[CR]rtcInvokeOccludedFilterFromGeometry\f[R] +only rays that are still valid (valid mask set to \-1) should signal an occlusion. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcInvokeIntersectFilterFromGeometry], [rtcSetGeometryOccludedFunction] diff --git a/man/man3/rtcIsSYCLDeviceSupported.3embree4 b/man/man3/rtcIsSYCLDeviceSupported.3embree4 index cb24c11f24..ef61606a75 100644 --- a/man/man3/rtcIsSYCLDeviceSupported.3embree4 +++ b/man/man3/rtcIsSYCLDeviceSupported.3embree4 @@ -1,47 +1,25 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcIsSYCLDeviceSupported" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcIsSYCLDeviceSupported - checks if some SYCL device is supported by Embree -\f[R] -.fi +.EX +rtcIsSYCLDeviceSupported \- checks if some SYCL device is supported by Embree +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include bool rtcIsSYCLDeviceSupported(const sycl::device sycl_device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function can be used to check if some SYCL device -(\f[V]sycl_device\f[R] argument) is supported by Embree. +(\f[CR]sycl_device\f[R] argument) is supported by Embree. .SS EXIT STATUS -.PP The function returns true if the SYCL device is supported by Embree and false otherwise. On failure an error code is set that can get queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSYCLDeviceSelector] diff --git a/man/man3/rtcJoinCommitScene.3embree4 b/man/man3/rtcJoinCommitScene.3embree4 index c3e25b3090..205bd5cf7a 100644 --- a/man/man3/rtcJoinCommitScene.3embree4 +++ b/man/man3/rtcJoinCommitScene.3embree4 @@ -1,70 +1,50 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcJoinCommitScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcJoinCommitScene - commits the scene from multiple threads -\f[R] -.fi +.EX +rtcJoinCommitScene \- commits the scene from multiple threads +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcJoinCommitScene(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcJoinCommitScene\f[R] function commits all changes for the -specified scene (\f[V]scene\f[R] argument). +The \f[CR]rtcJoinCommitScene\f[R] function commits all changes for the +specified scene (\f[CR]scene\f[R] argument). The scene commit internally triggers building of a spatial acceleration structure for the scene. Ray queries can be performed after scene changes got properly committed. .PP -The \f[V]rtcJoinCommitScene\f[R] function can get called from multiple +The \f[CR]rtcJoinCommitScene\f[R] function can get called from multiple user threads which will all cooperate in the build operation. All threads calling into this function will return from -\f[V]rtcJoinCommitScene\f[R] after the scene commit is finished. -All threads must consistently call \f[V]rtcJoinCommitScene\f[R] and not -\f[V]rtcCommitScene\f[R]. +\f[CR]rtcJoinCommitScene\f[R] after the scene commit is finished. +All threads must consistently call \f[CR]rtcJoinCommitScene\f[R] and not +\f[CR]rtcCommitScene\f[R]. .PP -In contrast to the \f[V]rtcCommitScene\f[R] function, the -\f[V]rtcJoinCommitScene\f[R] function can be called from multiple user -threads, while the \f[V]rtcCommitScene\f[R] can only get called from +In contrast to the \f[CR]rtcCommitScene\f[R] function, the +\f[CR]rtcJoinCommitScene\f[R] function can be called from multiple user +threads, while the \f[CR]rtcCommitScene\f[R] can only get called from multiple TBB worker threads when used concurrently. For optimal performance we strongly recommend using TBB inside the -application together with the \f[V]rtcCommitScene\f[R] function and to -avoid using the \f[V]rtcJoinCommitScene\f[R] function. +application together with the \f[CR]rtcCommitScene\f[R] function and to +avoid using the \f[CR]rtcJoinCommitScene\f[R] function. .PP -The \f[V]rtcJoinCommitScene\f[R] feature allows a flexible way to lazily -create hierarchies during rendering. -A thread reaching a not-yet-constructed sub-scene of a two-level scene -can generate the sub-scene geometry and call -\f[V]rtcJoinCommitScene\f[R] on that just generated scene. -During construction, further threads reaching the not-yet-built scene +The \f[CR]rtcJoinCommitScene\f[R] feature allows a flexible way to +lazily create hierarchies during rendering. +A thread reaching a not\-yet\-constructed sub\-scene of a two\-level +scene can generate the sub\-scene geometry and call +\f[CR]rtcJoinCommitScene\f[R] on that just generated scene. +During construction, further threads reaching the not\-yet\-built scene can join the build operation by also invoking -\f[V]rtcJoinCommitScene\f[R]. -A thread that calls \f[V]rtcJoinCommitScene\f[R] after the build -finishes will directly return from the \f[V]rtcJoinCommitScene\f[R] +\f[CR]rtcJoinCommitScene\f[R]. +A thread that calls \f[CR]rtcJoinCommitScene\f[R] after the build +finishes will directly return from the \f[CR]rtcJoinCommitScene\f[R] call. .PP Multiple scene commit operations on different scenes can be running at @@ -72,34 +52,33 @@ the same time, hence it is possible to commit many small scenes in parallel, distributing the commits to many threads. .PP When using Embree with the Intel® Threading Building Blocks (which is -the default), threads that call \f[V]rtcJoinCommitScene\f[R] will join +the default), threads that call \f[CR]rtcJoinCommitScene\f[R] will join the build operation, but other TBB worker threads might also participate in the build. To avoid thread oversubscription, we recommend using TBB also inside the application. Further, the join mode only works properly starting with TBB v4.4 Update 1. -For earlier TBB versions, threads that call \f[V]rtcJoinCommitScene\f[R] -to join a running build will just trigger the build and wait for the -build to finish. -Further, old TBB versions with \f[V]TBB_INTERFACE_VERSION_MAJOR < 8\f[R] -do not support \f[V]rtcJoinCommitScene\f[R], and invoking this function -will result in an error. +For earlier TBB versions, threads that call +\f[CR]rtcJoinCommitScene\f[R] to join a running build will just trigger +the build and wait for the build to finish. +Further, old TBB versions with +\f[CR]TBB_INTERFACE_VERSION_MAJOR < 8\f[R] do not support +\f[CR]rtcJoinCommitScene\f[R], and invoking this function will result in +an error. .PP When using Embree with the internal tasking system, only threads that -call \f[V]rtcJoinCommitScene\f[R] will perform the build operation, and +call \f[CR]rtcJoinCommitScene\f[R] will perform the build operation, and no additional worker threads will be scheduled. .PP When using Embree with the Parallel Patterns Library (PPL), -\f[V]rtcJoinCommitScene\f[R] is not supported and calling that function +\f[CR]rtcJoinCommitScene\f[R] is not supported and calling that function will result in an error. .PP -To detect whether \f[V]rtcJoinCommitScene\f[R] is supported, use the -\f[V]rtcGetDeviceProperty\f[R] function. +To detect whether \f[CR]rtcJoinCommitScene\f[R] is supported, use the +\f[CR]rtcGetDeviceProperty\f[R] function. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcCommitScene], [rtcGetDeviceProperty] diff --git a/man/man3/rtcNewBVH.3embree4 b/man/man3/rtcNewBVH.3embree4 index 2c5fddabc1..f880933739 100644 --- a/man/man3/rtcNewBVH.3embree4 +++ b/man/man3/rtcNewBVH.3embree4 @@ -1,52 +1,30 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewBVH" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewBVH - creates a new BVH object -\f[R] -.fi +.EX +rtcNewBVH \- creates a new BVH object +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCBVH rtcNewBVH(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function creates a new BVH object and returns a handle to this BVH. The BVH object is reference counted with an initial reference count of 1. -The handle can be released using the \f[V]rtcReleaseBVH\f[R] API call. +The handle can be released using the \f[CR]rtcReleaseBVH\f[R] API call. .PP -The BVH object can be used to build a BVH in a user-specified format -over user-specified primitives. -See the documentation of the \f[V]rtcBuildBVH\f[R] call for more +The BVH object can be used to build a BVH in a user\-specified format +over user\-specified primitives. +See the documentation of the \f[CR]rtcBuildBVH\f[R] call for more details. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcRetainBVH], [rtcReleaseBVH], [rtcBuildBVH] diff --git a/man/man3/rtcNewBuffer.3embree4 b/man/man3/rtcNewBuffer.3embree4 index a06f9f73e5..5d6ee3bf63 100644 --- a/man/man3/rtcNewBuffer.3embree4 +++ b/man/man3/rtcNewBuffer.3embree4 @@ -1,68 +1,44 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewBuffer - creates a new data buffer -\f[R] -.fi +.EX +rtcNewBuffer \- creates a new data buffer +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCBuffer rtcNewBuffer( RTCDevice device, size_t byteSize ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcNewBuffer\f[R] function creates a new data buffer object of -specified size in bytes (\f[V]byteSize\f[R] argument) that is bound to -the specified device (\f[V]device\f[R] argument). +The \f[CR]rtcNewBuffer\f[R] function creates a new data buffer object of +specified size in bytes (\f[CR]byteSize\f[R] argument) that is bound to +the specified device (\f[CR]device\f[R] argument). The buffer object is reference counted with an initial reference count of 1. The returned buffer object can be released using the -\f[V]rtcReleaseBuffer\f[R] API call. +\f[CR]rtcReleaseBuffer\f[R] API call. The specified number of bytes are allocated at buffer construction time and deallocated when the buffer is destroyed. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -If the \f[V]device\f[R] is a Embree SYCL device, the buffer will be +If the \f[CR]device\f[R] is a Embree SYCL device, the buffer will be allocated using SYCL USM shared memory, i.e.\ the buffer can be accessed on the host and device (GPU) and the SYCL runtime will handle buffer transfers automatically. .PP For precise control over when memory is copied from host to device, a -buffer can also be created using \f[V]rtcNewBufferHostDevice\f[R]. +buffer can also be created using \f[CR]rtcNewBufferHostDevice\f[R]. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBufferHostDevice], [rtcRetainBuffer], [rtcReleaseBuffer] diff --git a/man/man3/rtcNewDevice.3embree4 b/man/man3/rtcNewDevice.3embree4 index a489003c8d..4c7e3d05be 100644 --- a/man/man3/rtcNewDevice.3embree4 +++ b/man/man3/rtcNewDevice.3embree4 @@ -1,44 +1,24 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewDevice - creates a new device -\f[R] -.fi +.EX +rtcNewDevice \- creates a new device +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCDevice rtcNewDevice(const char* config); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function creates a new device to be used for CPU ray tracing and returns a handle to this device. The device object is reference counted with an initial reference count of 1. -The handle can be released using the \f[V]rtcReleaseDevice\f[R] API +The handle can be released using the \f[CR]rtcReleaseDevice\f[R] API call. .PP The device object acts as a class factory for all other object types. @@ -50,65 +30,65 @@ Objects are only compatible if they belong to the same device, e.g it is not allowed to create a geometry in one device and attach it to a scene created with a different device. .PP -A configuration string (\f[V]config\f[R] argument) can be passed to the +A configuration string (\f[CR]config\f[R] argument) can be passed to the device construction. -This configuration string can be \f[V]NULL\f[R] to use the default +This configuration string can be \f[CR]NULL\f[R] to use the default configuration. .PP The following configuration is supported: .IP \[bu] 2 -\f[V]threads=[int]\f[R]: Specifies a number of build threads to use. +\f[CR]threads=[int]\f[R]: Specifies a number of build threads to use. A value of 0 enables all detected hardware threads. By default all hardware threads are used. .IP \[bu] 2 -\f[V]user_threads=[int]\f[R]: Sets the number of user threads that can +\f[CR]user_threads=[int]\f[R]: Sets the number of user threads that can be used to join and participate in a scene commit using -\f[V]rtcJoinCommitScene\f[R]. -The tasking system will only use threads-user_threads many worker +\f[CR]rtcJoinCommitScene\f[R]. +The tasking system will only use threads\-user_threads many worker threads, thus if the app wants to solely use its threads to commit scenes, just set threads equal to user_threads. This option only has effect with the Intel(R) Threading Building Blocks (TBB) tasking system. .IP \[bu] 2 -\f[V]set_affinity=[0/1]\f[R]: When enabled, build threads are +\f[CR]set_affinity=[0/1]\f[R]: When enabled, build threads are affinitized to hardware threads. This option is disabled by default on standard CPUs, and enabled by default on Xeon Phi Processors. .IP \[bu] 2 -\f[V]start_threads=[0/1]\f[R]: When enabled, the build threads are +\f[CR]start_threads=[0/1]\f[R]: When enabled, the build threads are started upfront. This can be useful for benchmarking to exclude thread creation time. This option is disabled by default. .IP \[bu] 2 -\f[V]isa=[sse2,sse4.2,avx,avx2,avx512]\f[R]: Use specified ISA. +\f[CR]isa=[sse2,sse4.2,avx,avx2,avx512]\f[R]: Use specified ISA. By default the ISA is selected automatically. .IP \[bu] 2 -\f[V]max_isa=[sse2,sse4.2,avx,avx2,avx512]\f[R]: Configures the +\f[CR]max_isa=[sse2,sse4.2,avx,avx2,avx512]\f[R]: Configures the automated ISA selection to use maximally the specified ISA. .IP \[bu] 2 -\f[V]hugepages=[0/1]\f[R]: Enables or disables usage of huge pages. +\f[CR]hugepages=[0/1]\f[R]: Enables or disables usage of huge pages. Under Linux huge pages are used by default but under Windows and macOS they are disabled by default. .IP \[bu] 2 -\f[V]enable_selockmemoryprivilege=[0/1]\f[R]: When set to 1, this -enables the \f[V]SeLockMemoryPrivilege\f[R] privilege with is required +\f[CR]enable_selockmemoryprivilege=[0/1]\f[R]: When set to 1, this +enables the \f[CR]SeLockMemoryPrivilege\f[R] privilege with is required to use huge pages on Windows. This option has an effect only under Windows and is ignored on other platforms. See Section [Huge Page Support] for more details. .IP \[bu] 2 -\f[V]verbose=[0,1,2,3]\f[R]: Sets the verbosity of the output. +\f[CR]verbose=[0,1,2,3]\f[R]: Sets the verbosity of the output. When set to 0, no output is printed by Embree, when set to a higher level more output is printed. By default Embree does not print anything on the console. .IP \[bu] 2 -\f[V]frequency_level=[simd128,simd256,simd512]\f[R]: Specifies the +\f[CR]frequency_level=[simd128,simd256,simd512]\f[R]: Specifies the frequency level the application want to run on, which can be either: .RS 2 .IP "a)" 3 simd128 to run at highest frequency .IP "b)" 3 -simd256 to run at AVX2-heavy frequency level +simd256 to run at AVX2\-heavy frequency level .IP "c)" 3 simd512 to run at heavy AVX512 frequency level. When some frequency level is specified, Embree will avoid doing @@ -128,16 +108,12 @@ clocking. .PP Different configuration options should be separated by commas, e.g.: .IP -.nf -\f[C] +.EX rtcNewDevice(\[dq]threads=1,isa=avx\[dq]); -\f[R] -.fi +.EE .SS EXIT STATUS -.PP On success returns a handle of the created device. -On failure returns \f[V]NULL\f[R] as device and sets a per-thread error -code that can be queried using \f[V]rtcGetDeviceError(NULL)\f[R]. +On failure returns \f[CR]NULL\f[R] as device and sets a per\-thread +error code that can be queried using \f[CR]rtcGetDeviceError(NULL)\f[R]. .SS SEE ALSO -.PP [rtcRetainDevice], [rtcReleaseDevice], [rtcNewSYCLDevice] diff --git a/man/man3/rtcNewGeometry.3embree4 b/man/man3/rtcNewGeometry.3embree4 index 2ae04df2a6..f72415f8a8 100644 --- a/man/man3/rtcNewGeometry.3embree4 +++ b/man/man3/rtcNewGeometry.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewGeometry - creates a new geometry object -\f[R] -.fi +.EX +rtcNewGeometry \- creates a new geometry object +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCGeometryType @@ -62,106 +44,103 @@ RTCGeometry rtcNewGeometry( RTCDevice device, enum RTCGeometryType type ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Geometries are objects that represent an array of primitives of the same type. -The \f[V]rtcNewGeometry\f[R] function creates a new geometry of -specified type (\f[V]type\f[R] argument) bound to the specified device -(\f[V]device\f[R] argument) and returns a handle to this geometry. +The \f[CR]rtcNewGeometry\f[R] function creates a new geometry of +specified type (\f[CR]type\f[R] argument) bound to the specified device +(\f[CR]device\f[R] argument) and returns a handle to this geometry. The geometry object is reference counted with an initial reference count of 1. The geometry handle can be released using the -\f[V]rtcReleaseGeometry\f[R] API call. +\f[CR]rtcReleaseGeometry\f[R] API call. .PP Supported geometry types are triangle meshes -(\f[V]RTC_GEOMETRY_TYPE_TRIANGLE\f[R] type), quad meshes (triangle -pairs) (\f[V]RTC_GEOMETRY_TYPE_QUAD\f[R] type), Catmull-Clark -subdivision surfaces (\f[V]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R] type), +(\f[CR]RTC_GEOMETRY_TYPE_TRIANGLE\f[R] type), quad meshes (triangle +pairs) (\f[CR]RTC_GEOMETRY_TYPE_QUAD\f[R] type), Catmull\-Clark +subdivision surfaces (\f[CR]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R] type), curve geometries with different bases -(\f[V]RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], +(\f[CR]RTC_GEOMETRY_TYPE_FLAT_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], .PD 0 .P .PD -\f[V]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_HERMITE_CURVE\f[R], .PD 0 .P .PD -\f[V]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_HERMITE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] types) grid meshes -(\f[V]RTC_GEOMETRY_TYPE_GRID\f[R]), point geometries -(\f[V]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R], -\f[V]RTC_GEOMETRY_TYPE_DISC_POINT\f[R], -\f[V]RTC_TYPE_ORIENTED_DISC_POINT\f[R]), user-defined geometries -(\f[V]RTC_GEOMETRY_TYPE_USER\f[R]), instances -(\f[V]RTC_GEOMETRY_TYPE_INSTANCE\f[R]), and instance arrays -(\f[V]RTC_GEOMETRY_TYPE_INSTANCE_ARRAY\f[R]). +\f[CR]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_HERMITE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_NORMAL_ORIENTED_CATMULL_ROM_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_CONE_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_LINEAR_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_HERMITE_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] types) grid meshes +(\f[CR]RTC_GEOMETRY_TYPE_GRID\f[R]), point geometries +(\f[CR]RTC_GEOMETRY_TYPE_SPHERE_POINT\f[R], +\f[CR]RTC_GEOMETRY_TYPE_DISC_POINT\f[R], +\f[CR]RTC_TYPE_ORIENTED_DISC_POINT\f[R]), user\-defined geometries +(\f[CR]RTC_GEOMETRY_TYPE_USER\f[R]), instances +(\f[CR]RTC_GEOMETRY_TYPE_INSTANCE\f[R]), and instance arrays +(\f[CR]RTC_GEOMETRY_TYPE_INSTANCE_ARRAY\f[R]). .PP -The types \f[V]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], and -\f[V]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] will treat the curve -as a sweep surface of a varying-radius circle swept tangentially along -the curve. -The types \f[V]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], -\f[V]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], and -\f[V]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R] use ray-facing -ribbons as a faster-to-intersect approximation. +The types \f[CR]RTC_GEOMETRY_TYPE_ROUND_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_ROUND_BSPLINE_CURVE\f[R], and +\f[CR]RTC_GEOMETRY_TYPE_ROUND_CATMULL_ROM_CURVE\f[R] will treat the +curve as a sweep surface of a varying\-radius circle swept tangentially +along the curve. +The types \f[CR]RTC_GEOMETRY_TYPE_FLAT_BEZIER_CURVE\f[R], +\f[CR]RTC_GEOMETRY_TYPE_FLAT_BSPLINE_CURVE\f[R], and +\f[CR]RTC_GEOMETRY_TYPE_FLAT_CATMULL_ROM_CURVE\f[R] use ray\-facing +ribbons as a faster\-to\-intersect approximation. .PP After construction, geometries are enabled by default and not attached to any scene. -Geometries can be disabled (\f[V]rtcDisableGeometry\f[R] call), and -enabled again (\f[V]rtcEnableGeometry\f[R] call). +Geometries can be disabled (\f[CR]rtcDisableGeometry\f[R] call), and +enabled again (\f[CR]rtcEnableGeometry\f[R] call). A geometry can be attached to multiple scenes using the -\f[V]rtcAttachGeometry\f[R] call (or \f[V]rtcAttachGeometryByID\f[R] -call), and detached using the \f[V]rtcDetachGeometry\f[R] call. +\f[CR]rtcAttachGeometry\f[R] call (or \f[CR]rtcAttachGeometryByID\f[R] +call), and detached using the \f[CR]rtcDetachGeometry\f[R] call. During attachment, a geometry ID is assigned to the geometry (or -assigned by the user when using the \f[V]rtcAttachGeometryByID\f[R] +assigned by the user when using the \f[CR]rtcAttachGeometryByID\f[R] call), which uniquely identifies the geometry inside that scene. This identifier is returned when primitives of the geometry are hit in later ray queries for the scene. .PP Geometries can also be modified, including their vertex and index buffers. -After modifying a buffer, \f[V]rtcUpdateGeometryBuffer\f[R] must be +After modifying a buffer, \f[CR]rtcUpdateGeometryBuffer\f[R] must be called to notify that the buffer got modified. .PP -The application can use the \f[V]rtcSetGeometryUserData\f[R] function to -set a user data pointer to its own geometry representation, and later -read out this pointer using the \f[V]rtcGetGeometryUserData\f[R] +The application can use the \f[CR]rtcSetGeometryUserData\f[R] function +to set a user data pointer to its own geometry representation, and later +read out this pointer using the \f[CR]rtcGetGeometryUserData\f[R] function. .PP After setting up the geometry or modifying it, -\f[V]rtcCommitGeometry\f[R] must be called to finish the geometry setup. +\f[CR]rtcCommitGeometry\f[R] must be called to finish the geometry +setup. After committing the geometry, vertex data interpolation can be -performed using the \f[V]rtcInterpolate\f[R] and -\f[V]rtcInterpolateN\f[R] functions. +performed using the \f[CR]rtcInterpolate\f[R] and +\f[CR]rtcInterpolateN\f[R] functions. .PP A build quality can be specified for a geometry using the -\f[V]rtcSetGeometryBuildQuality\f[R] function, to balance between +\f[CR]rtcSetGeometryBuildQuality\f[R] function, to balance between acceleration structure build performance and ray query performance. -The build quality per geometry will be used if a two-level acceleration +The build quality per geometry will be used if a two\-level acceleration structure is built internally, which is the case if the -\f[V]RTC_BUILD_QUALITY_LOW\f[R] is set as the scene build quality. +\f[CR]RTC_BUILD_QUALITY_LOW\f[R] is set as the scene build quality. See Section [rtcSetSceneBuildQuality] for more details. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcEnableGeometry], [rtcDisableGeometry], [rtcAttachGeometry], [rtcAttachGeometryByID], [rtcUpdateGeometryBuffer], [rtcSetGeometryUserData], [rtcGetGeometryUserData], [rtcCommitGeometry], diff --git a/man/man3/rtcNewSYCLDevice.3embree4 b/man/man3/rtcNewSYCLDevice.3embree4 index fa1bcf5752..2904bb58ec 100644 --- a/man/man3/rtcNewSYCLDevice.3embree4 +++ b/man/man3/rtcNewSYCLDevice.3embree4 @@ -1,49 +1,29 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewSYCLDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewSYCLDevice - creates a new device to be used with SYCL -\f[R] -.fi +.EX +rtcNewSYCLDevice \- creates a new device to be used with SYCL +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCDevice rtcNewSYCLDevice(sycl::context context, const char* config); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function creates a new device to be used with SYCL for GPU rendering and returns a handle to this device. The device object is reference counted with an initial reference count of 1. -The handle can get released using the \f[V]rtcReleaseDevice\f[R] API +The handle can get released using the \f[CR]rtcReleaseDevice\f[R] API call. .PP -The passed SYCL context (\f[V]context\f[R] argument) is used to allocate -GPU data, thus only devices contained inside this context can be used -for rendering. +The passed SYCL context (\f[CR]context\f[R] argument) is used to +allocate GPU data, thus only devices contained inside this context can +be used for rendering. By default the GPU data is allocated on the first GPU device of the context, but this behavior can get changed with the [rtcSetDeviceSYCLDevice] function. @@ -57,13 +37,11 @@ Objects are only compatible if they belong to the same device, e.g it is not allowed to create a geometry in one device and attach it to a scene created with a different device. .PP -For an overview of configurations that can get passed (\f[V]config\f[R] +For an overview of configurations that can get passed (\f[CR]config\f[R] argument) please see the [rtcNewDevice] function description. .SS EXIT STATUS -.PP On success returns a handle of the created device. -On failure returns \f[V]NULL\f[R] as device and sets a per-thread error -code that can be queried using \f[V]rtcGetDeviceError(NULL)\f[R]. +On failure returns \f[CR]NULL\f[R] as device and sets a per\-thread +error code that can be queried using \f[CR]rtcGetDeviceError(NULL)\f[R]. .SS SEE ALSO -.PP [rtcRetainDevice], [rtcReleaseDevice], [rtcNewDevice] diff --git a/man/man3/rtcNewScene.3embree4 b/man/man3/rtcNewScene.3embree4 index 6bdd3af315..37772bfce8 100644 --- a/man/man3/rtcNewScene.3embree4 +++ b/man/man3/rtcNewScene.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewScene - creates a new scene -\f[R] -.fi +.EX +rtcNewScene \- creates a new scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCScene rtcNewScene(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function creates a new scene bound to the specified device -(\f[V]device\f[R] argument), and returns a handle to this scene. +(\f[CR]device\f[R] argument), and returns a handle to this scene. The scene object is reference counted with an initial reference count of 1. -The scene handle can be released using the \f[V]rtcReleaseScene\f[R] API -call. +The scene handle can be released using the \f[CR]rtcReleaseScene\f[R] +API call. .SS EXIT STATUS -.PP On success a scene handle is returned. -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcRetainScene], [rtcReleaseScene] diff --git a/man/man3/rtcNewSharedBuffer.3embree4 b/man/man3/rtcNewSharedBuffer.3embree4 index 1cca42cde7..122f9dfff2 100644 --- a/man/man3/rtcNewSharedBuffer.3embree4 +++ b/man/man3/rtcNewSharedBuffer.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcNewSharedBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcNewSharedBuffer - creates a new shared data buffer -\f[R] -.fi +.EX +rtcNewSharedBuffer \- creates a new shared data buffer +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include RTCBuffer rtcNewSharedBuffer( @@ -34,37 +16,32 @@ RTCBuffer rtcNewSharedBuffer( void* ptr, size_t byteSize ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcNewSharedBuffer\f[R] function creates a new shared data -buffer object bound to the specified device (\f[V]device\f[R] argument). +The \f[CR]rtcNewSharedBuffer\f[R] function creates a new shared data +buffer object bound to the specified device (\f[CR]device\f[R] +argument). The buffer object is reference counted with an initial reference count of 1. -The buffer can be released using the \f[V]rtcReleaseBuffer\f[R] +The buffer can be released using the \f[CR]rtcReleaseBuffer\f[R] function. .PP -At construction time, the pointer to the user-managed buffer data -(\f[V]ptr\f[R] argument) including its size in bytes (\f[V]byteSize\f[R] -argument) is provided to create the buffer. +At construction time, the pointer to the user\-managed buffer data +(\f[CR]ptr\f[R] argument) including its size in bytes +(\f[CR]byteSize\f[R] argument) is provided to create the buffer. At buffer construction time no buffer data is allocated, but the buffer data provided by the application is used. The buffer data must remain valid for as long as the buffer may be used, and the user is responsible to free the buffer data when no longer required. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -The data pointer (\f[V]ptr\f[R] argument) must be aligned to 4 bytes; -otherwise the \f[V]rtcNewSharedBuffer\f[R] function will fail. +The data pointer (\f[CR]ptr\f[R] argument) must be aligned to 4 bytes; +otherwise the \f[CR]rtcNewSharedBuffer\f[R] function will fail. .SS EXIT STATUS -.PP -On failure \f[V]NULL\f[R] is returned and an error code is set that can -be queried using \f[V]rtcGetDeviceError\f[R]. +On failure \f[CR]NULL\f[R] is returned and an error code is set that can +be queried using \f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewSharedBufferHostDevice], [rtcRetainBuffer], [rtcReleaseBuffer] diff --git a/man/man3/rtcOccluded1.3embree4 b/man/man3/rtcOccluded1.3embree4 index 86597170fa..592e70121e 100644 --- a/man/man3/rtcOccluded1.3embree4 +++ b/man/man3/rtcOccluded1.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcOccluded1" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcOccluded1 - finds any hit for a single ray -\f[R] -.fi +.EX +rtcOccluded1 \- finds any hit for a single ray +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcOccluded1( @@ -34,50 +16,45 @@ void rtcOccluded1( struct RTCRay* ray, struct RTCOccludedArguments* args = NULL ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcOccluded1\f[R] function checks for a single ray -(\f[V]ray\f[R] argument) whether there is any hit with the scene -(\f[V]scene\f[R] argument). -The passed optional arguments struct (\f[V]args\f[R] argument) can get +The \f[CR]rtcOccluded1\f[R] function checks for a single ray +(\f[CR]ray\f[R] argument) whether there is any hit with the scene +(\f[CR]scene\f[R] argument). +The passed optional arguments struct (\f[CR]args\f[R] argument) can get used for advanced use cases, see section [rtcInitOccludedArguments] for more details. .PP -To trace a ray, the user must initialize the ray origin (\f[V]org\f[R] -ray member), ray direction (\f[V]dir\f[R] ray member), ray segment -(\f[V]tnear\f[R], \f[V]tfar\f[R] ray members), ray mask (\f[V]mask\f[R] -ray member), and must set the ray flags to \f[V]0\f[R] (\f[V]flags\f[R] -ray member). -The ray time (\f[V]time\f[R] ray member) must be initialized to a value -in the range [0,1]. -The ray segment must be in the range [0,∞], thus ranges that start +To trace a ray, the user must initialize the ray origin (\f[CR]org\f[R] +ray member), ray direction (\f[CR]dir\f[R] ray member), ray segment +(\f[CR]tnear\f[R], \f[CR]tfar\f[R] ray members), ray mask +(\f[CR]mask\f[R] ray member), and must set the ray flags to \f[CR]0\f[R] +(\f[CR]flags\f[R] ray member). +The ray time (\f[CR]time\f[R] ray member) must be initialized to a value +in the range [0, 1]. +The ray segment must be in the range [0, ∞], thus ranges that start behind the ray origin are not valid, but ranges can reach to infinity. See Section [RTCRay] for the ray layout description. .PP When no intersection is found, the ray data is not updated. -In case a hit was found, the \f[V]tfar\f[R] component of the ray is set -to \f[V]-inf\f[R]. +In case a hit was found, the \f[CR]tfar\f[R] component of the ray is set +to \f[CR]\-inf\f[R]. .PP The implementation makes no guarantees that primitives whose hit -distance is exactly at (or very close to) \f[V]tnear\f[R] or -\f[V]tfar\f[R] are hit or missed. -If you want to exclude intersections at \f[V]tnear\f[R] just pass a -slightly enlarged \f[V]tnear\f[R], and if you want to include -intersections at \f[V]tfar\f[R] pass a slightly enlarged \f[V]tfar\f[R]. +distance is exactly at (or very close to) \f[CR]tnear\f[R] or +\f[CR]tfar\f[R] are hit or missed. +If you want to exclude intersections at \f[CR]tnear\f[R] just pass a +slightly enlarged \f[CR]tnear\f[R], and if you want to include +intersections at \f[CR]tfar\f[R] pass a slightly enlarged +\f[CR]tfar\f[R]. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP The ray must be aligned to 16 bytes. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcIntersect1], [rtcOccluded4/8/16], [RTCRay], [rtcInitOccludedArguments] diff --git a/man/man3/rtcOccluded4.3embree4 b/man/man3/rtcOccluded4.3embree4 index bfe4df48a8..a7ffb09a23 100644 --- a/man/man3/rtcOccluded4.3embree4 +++ b/man/man3/rtcOccluded4.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcOccluded4/8/16" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcOccluded4/8/16 - finds any hits for a ray packet -\f[R] -.fi +.EX +rtcOccluded4/8/16 \- finds any hits for a ray packet +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcOccluded4( @@ -49,49 +31,43 @@ void rtcOccluded16( struct RTCRay16* ray, struct RTCOccludedArguments* args = NULL ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcOccluded4/8/16\f[R] functions checks for each active ray of -the ray packet of size 4, 8, or 16 (\f[V]ray\f[R] argument) whether -there is any hit with the scene (\f[V]scene\f[R] argument). -The passed optional arguments struct (\f[V]args\f[R] argument) can get +The \f[CR]rtcOccluded4/8/16\f[R] functions checks for each active ray of +the ray packet of size 4, 8, or 16 (\f[CR]ray\f[R] argument) whether +there is any hit with the scene (\f[CR]scene\f[R] argument). +The passed optional arguments struct (\f[CR]args\f[R] argument) can get used for advanced use cases, see section [rtcInitOccludedArguments] for more details. See Section [rtcOccluded1] for more details and a description of how to set up and trace occlusion rays. .PP -A ray valid mask must be provided (\f[V]valid\f[R] argument) which -stores one 32-bit integer (\f[V]-1\f[R] means valid and \f[V]0\f[R] +A ray valid mask must be provided (\f[CR]valid\f[R] argument) which +stores one 32\-bit integer (\f[CR]\-1\f[R] means valid and \f[CR]0\f[R] invalid) per ray in the packet. Only active rays are processed, and hit data of inactive rays is not changed. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP -For \f[V]rtcOccluded4\f[R] the ray packet must be aligned to 16 bytes, -for \f[V]rtcOccluded8\f[R] the alignment must be 32 bytes, and for -\f[V]rtcOccluded16\f[R] the alignment must be 64 bytes. +For \f[CR]rtcOccluded4\f[R] the ray packet must be aligned to 16 bytes, +for \f[CR]rtcOccluded8\f[R] the alignment must be 32 bytes, and for +\f[CR]rtcOccluded16\f[R] the alignment must be 64 bytes. .PP -The \f[V]rtcOccluded4\f[R], \f[V]rtcOccluded8\f[R] and -\f[V]rtcOccluded16\f[R] functions may change the ray packet size and ray -order when calling back into intersect filter functions or user geometry -callbacks. +The \f[CR]rtcOccluded4\f[R], \f[CR]rtcOccluded8\f[R] and +\f[CR]rtcOccluded16\f[R] functions may change the ray packet size and +ray order when calling back into intersect filter functions or user +geometry callbacks. Under some conditions the application can assume packets to stay intakt, which can determined by querying the -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R], -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R], -\f[V]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R] properties through -the \f[V]rtcGetDeviceProperty\f[R] function. +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY4_SUPPORTED\f[R], +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY8_SUPPORTED\f[R], +\f[CR]RTC_DEVICE_PROPERTY_NATIVE_RAY16_SUPPORTED\f[R] properties through +the \f[CR]rtcGetDeviceProperty\f[R] function. See [rtcGetDeviceProperty] for more information. .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcOccluded1], [rtcIntersect4/8/16], [rtcInitOccludedArguments] diff --git a/man/man3/rtcPointQuery.3embree4 b/man/man3/rtcPointQuery.3embree4 index ad505df400..551bc984fa 100644 --- a/man/man3/rtcPointQuery.3embree4 +++ b/man/man3/rtcPointQuery.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcPointQuery" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcPointQuery - traverses the BVH with a point query object -\f[R] -.fi +.EX +rtcPointQuery \- traverses the BVH with a point query object +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTC_ALIGN(16) RTCPointQuery @@ -48,46 +30,45 @@ void rtcPointQuery( struct RTCPointQueryFunction* queryFunc, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcPointQuery\f[R] function traverses the BVH using a -\f[V]RTCPointQuery\f[R] object (\f[V]query\f[R] argument) and calls a -user defined callback function (e.g \f[V]queryFunc\f[R] argument) for -each primitive of the scene (\f[V]scene\f[R] argument) that intersects +The \f[CR]rtcPointQuery\f[R] function traverses the BVH using a +\f[CR]RTCPointQuery\f[R] object (\f[CR]query\f[R] argument) and calls a +user defined callback function (e.g \f[CR]queryFunc\f[R] argument) for +each primitive of the scene (\f[CR]scene\f[R] argument) that intersects the query domain. .PP -The user has to initialize the query location (\f[V]x\f[R], \f[V]y\f[R] -and \f[V]z\f[R] member) and query radius in the range [0,∞]. +The user has to initialize the query location (\f[CR]x\f[R], +\f[CR]y\f[R] and \f[CR]z\f[R] member) and query radius in the range +[0, ∞]. If the scene contains motion blur geometries, also the query time -(\f[V]time\f[R] member) must be initialized to a value in the range -[0,1]. +(\f[CR]time\f[R] member) must be initialized to a value in the range +[0, 1]. .PP -Further, a \f[V]RTCPointQueryContext\f[R] (\f[V]context\f[R] argument) +Further, a \f[CR]RTCPointQueryContext\f[R] (\f[CR]context\f[R] argument) must be created and initialized. It contains ID and transformation information of the instancing -hierarchy if (multilevel-)instancing is used. +hierarchy if (multilevel\-)instancing is used. See [rtcInitPointQueryContext] for further information. .PP For every primitive that intersects the query domain, the callback -function (\f[V]queryFunc\f[R] argument) is called, in which distance +function (\f[CR]queryFunc\f[R] argument) is called, in which distance computations to the primitive can be implemented. The user will be provided with the primID and geomID of the according primitive, however, the geometry information (e.g. triangle index and vertex data) has to be determined manually. -The \f[V]userPtr\f[R] argument can be used to input geometry data of the -scene or output results of the point query (e.g.\ closest point +The \f[CR]userPtr\f[R] argument can be used to input geometry data of +the scene or output results of the point query (e.g.\ closest point currently found on surface geometry (see tutorial [ClosestPoint])). .PP -The parameter \f[V]queryFunc\f[R] is optional and can be NULL, in which +The parameter \f[CR]queryFunc\f[R] is optional and can be NULL, in which case the callback function is not invoked. However, a callback function can still get attached to a specific -\f[V]RTCGeometry\f[R] object using [rtcSetGeometryPointQueryFunction]. +\f[CR]RTCGeometry\f[R] object using [rtcSetGeometryPointQueryFunction]. If a callback function is attached to a geometry and (a potentially different) callback function is passed as an argument to -\f[V]rtcPointQuery\f[R], both functions are called for the primitives of -the according geometries. +\f[CR]rtcPointQuery\f[R], both functions are called for the primitives +of the according geometries. .PP The query radius can be decreased inside the callback function, which allows to efficiently cull parts of the scene during BVH traversal. @@ -98,7 +79,7 @@ The callback function will be called for all primitives in a leaf node of the BVH even if the primitive is outside the query domain, since Embree does not gather geometry information of primitives internally. .PP -Point queries can be used with (multilevel)-instancing. +Point queries can be used with (multilevel)\-instancing. However, care has to be taken when the instance transformation contains anisotropic scaling or sheering. In these cases distance computations have to be performed in world space @@ -111,15 +92,12 @@ See [rtcSetGeometryPointQueryFunction] for details. .PP The point query structure must be aligned to 16 bytes. .SS SUPPORTED PRIMITIVES -.PP Currently, all primitive types are supported by the point query API except of points (see [RTC_GEOMETRY_TYPE_POINT]), curves (see [RTC_GEOMETRY_TYPE_CURVE]) and sudivision surfaces (see [RTC_GEOMETRY_SUBDIVISION]). .SS EXIT STATUS -.PP For performance reasons this function does not do any error checks, thus will not set any error flags on failure. .SS SEE ALSO -.PP [rtcSetGeometryPointQueryFunction], [rtcInitPointQueryContext] diff --git a/man/man3/rtcPointQuery4.3embree4 b/man/man3/rtcPointQuery4.3embree4 index 9eb93dd5b3..2b4b311caa 100644 --- a/man/man3/rtcPointQuery4.3embree4 +++ b/man/man3/rtcPointQuery4.3embree4 @@ -1,32 +1,13 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcPointQuery" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcPointQuery4/8/16 - traverses the BVH with a point query object for a ray packet -\f[R] -.fi +.EX +rtcPointQuery4/8/16 \- traverses the BVH with a point query object for a ray packet +.EE .SS DESCRIPTION -.PP -The \f[V]rtcPointQuery4/8/16\f[R] function unrolls the ray packet +The \f[CR]rtcPointQuery4/8/16\f[R] function unrolls the ray packet internally and calls [rtcPointQuery]. .SS SEE ALSO -.PP [rtcPointQuery] diff --git a/man/man3/rtcReleaseBVH.3embree4 b/man/man3/rtcReleaseBVH.3embree4 index 0fdcd85f7e..ac83f4879e 100644 --- a/man/man3/rtcReleaseBVH.3embree4 +++ b/man/man3/rtcReleaseBVH.3embree4 @@ -1,47 +1,25 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcReleaseBVH" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcReleaseBVH - decrements the BVH reference count -\f[R] -.fi +.EX +rtcReleaseBVH \- decrements the BVH reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcReleaseBVH(RTCBVH bvh); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP BVH objects are reference counted. -The \f[V]rtcReleaseBVH\f[R] function decrements the reference count of -the passed BVH object (\f[V]bvh\f[R] argument). +The \f[CR]rtcReleaseBVH\f[R] function decrements the reference count of +the passed BVH object (\f[CR]bvh\f[R] argument). When the reference count falls to 0, the BVH gets destroyed. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBVH], [rtcRetainBVH] diff --git a/man/man3/rtcReleaseBuffer.3embree4 b/man/man3/rtcReleaseBuffer.3embree4 index 91ef40924c..9c987d6b19 100644 --- a/man/man3/rtcReleaseBuffer.3embree4 +++ b/man/man3/rtcReleaseBuffer.3embree4 @@ -1,47 +1,25 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcReleaseBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcReleaseBuffer - decrements the buffer reference count -\f[R] -.fi +.EX +rtcReleaseBuffer \- decrements the buffer reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcReleaseBuffer(RTCBuffer buffer); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Buffer objects are reference counted. -The \f[V]rtcReleaseBuffer\f[R] function decrements the reference count -of the passed buffer object (\f[V]buffer\f[R] argument). +The \f[CR]rtcReleaseBuffer\f[R] function decrements the reference count +of the passed buffer object (\f[CR]buffer\f[R] argument). When the reference count falls to 0, the buffer gets destroyed. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBuffer], [rtcRetainBuffer] diff --git a/man/man3/rtcReleaseDevice.3embree4 b/man/man3/rtcReleaseDevice.3embree4 index e3bf630b59..576c867b9e 100644 --- a/man/man3/rtcReleaseDevice.3embree4 +++ b/man/man3/rtcReleaseDevice.3embree4 @@ -1,51 +1,29 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcReleaseDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcReleaseDevice - decrements the device reference count -\f[R] -.fi +.EX +rtcReleaseDevice \- decrements the device reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcReleaseDevice(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Device objects are reference counted. -The \f[V]rtcReleaseDevice\f[R] function decrements the reference count -of the passed device object (\f[V]device\f[R] argument). +The \f[CR]rtcReleaseDevice\f[R] function decrements the reference count +of the passed device object (\f[CR]device\f[R] argument). When the reference count falls to 0, the device gets destroyed. .PP All objects created from the device (like scenes, geometries, etc.) hold a reference to the device, thus the device will not get destroyed unless these objects are destroyed first. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewDevice], [rtcRetainDevice] diff --git a/man/man3/rtcReleaseGeometry.3embree4 b/man/man3/rtcReleaseGeometry.3embree4 index 97ef9796aa..d83e4b333e 100644 --- a/man/man3/rtcReleaseGeometry.3embree4 +++ b/man/man3/rtcReleaseGeometry.3embree4 @@ -1,47 +1,25 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcReleaseGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcReleaseGeometry - decrements the geometry reference count -\f[R] -.fi +.EX +rtcReleaseGeometry \- decrements the geometry reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcReleaseGeometry(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Geometry objects are reference counted. -The \f[V]rtcReleaseGeometry\f[R] function decrements the reference count -of the passed geometry object (\f[V]geometry\f[R] argument). +The \f[CR]rtcReleaseGeometry\f[R] function decrements the reference +count of the passed geometry object (\f[CR]geometry\f[R] argument). When the reference count falls to 0, the geometry gets destroyed. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcRetainGeometry] diff --git a/man/man3/rtcReleaseScene.3embree4 b/man/man3/rtcReleaseScene.3embree4 index 3de98962c8..6beb8e5fa9 100644 --- a/man/man3/rtcReleaseScene.3embree4 +++ b/man/man3/rtcReleaseScene.3embree4 @@ -1,51 +1,29 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcReleaseScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcReleaseScene - decrements the scene reference count -\f[R] -.fi +.EX +rtcReleaseScene \- decrements the scene reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcReleaseScene(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Scene objects are reference counted. -The \f[V]rtcReleaseScene\f[R] function decrements the reference count of -the passed scene object (\f[V]scene\f[R] argument). +The \f[CR]rtcReleaseScene\f[R] function decrements the reference count +of the passed scene object (\f[CR]scene\f[R] argument). When the reference count falls to 0, the scene gets destroyed. .PP The scene holds a reference to all attached geometries, thus if the scene gets destroyed, all geometries get detached and their reference count decremented. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewScene], [rtcRetainScene] diff --git a/man/man3/rtcRetainBVH.3embree4 b/man/man3/rtcRetainBVH.3embree4 index 00bc8046b6..6dc2bf3103 100644 --- a/man/man3/rtcRetainBVH.3embree4 +++ b/man/man3/rtcRetainBVH.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcRetainBVH" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcRetainBVH - increments the BVH reference count -\f[R] -.fi +.EX +rtcRetainBVH \- increments the BVH reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcRetainBVH(RTCBVH bvh); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP BVH objects are reference counted. -The \f[V]rtcRetainBVH\f[R] function increments the reference count of -the passed BVH object (\f[V]bvh\f[R] argument). -This function together with \f[V]rtcReleaseBVH\f[R] allows to use the +The \f[CR]rtcRetainBVH\f[R] function increments the reference count of +the passed BVH object (\f[CR]bvh\f[R] argument). +This function together with \f[CR]rtcReleaseBVH\f[R] allows to use the internal reference counting in a C++ wrapper class to handle the ownership of the object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBVH], [rtcReleaseBVH] diff --git a/man/man3/rtcRetainBuffer.3embree4 b/man/man3/rtcRetainBuffer.3embree4 index e09e7644a4..b4b0d24575 100644 --- a/man/man3/rtcRetainBuffer.3embree4 +++ b/man/man3/rtcRetainBuffer.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcRetainBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcRetainBuffer - increments the buffer reference count -\f[R] -.fi +.EX +rtcRetainBuffer \- increments the buffer reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcRetainBuffer(RTCBuffer buffer); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Buffer objects are reference counted. -The \f[V]rtcRetainBuffer\f[R] function increments the reference count of -the passed buffer object (\f[V]buffer\f[R] argument). -This function together with \f[V]rtcReleaseBuffer\f[R] allows to use the -internal reference counting in a C++ wrapper class to handle the +The \f[CR]rtcRetainBuffer\f[R] function increments the reference count +of the passed buffer object (\f[CR]buffer\f[R] argument). +This function together with \f[CR]rtcReleaseBuffer\f[R] allows to use +the internal reference counting in a C++ wrapper class to handle the ownership of the object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewBuffer], [rtcReleaseBuffer] diff --git a/man/man3/rtcRetainDevice.3embree4 b/man/man3/rtcRetainDevice.3embree4 index f42d285bb7..0d837cf1c3 100644 --- a/man/man3/rtcRetainDevice.3embree4 +++ b/man/man3/rtcRetainDevice.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcRetainDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcRetainDevice - increments the device reference count -\f[R] -.fi +.EX +rtcRetainDevice \- increments the device reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcRetainDevice(RTCDevice device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Device objects are reference counted. -The \f[V]rtcRetainDevice\f[R] function increments the reference count of -the passed device object (\f[V]device\f[R] argument). -This function together with \f[V]rtcReleaseDevice\f[R] allows to use the -internal reference counting in a C++ wrapper class to manage the +The \f[CR]rtcRetainDevice\f[R] function increments the reference count +of the passed device object (\f[CR]device\f[R] argument). +This function together with \f[CR]rtcReleaseDevice\f[R] allows to use +the internal reference counting in a C++ wrapper class to manage the ownership of the object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewDevice], [rtcReleaseDevice] diff --git a/man/man3/rtcRetainGeometry.3embree4 b/man/man3/rtcRetainGeometry.3embree4 index 03c3714566..1274e0d035 100644 --- a/man/man3/rtcRetainGeometry.3embree4 +++ b/man/man3/rtcRetainGeometry.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcRetainGeometry" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcRetainGeometry - increments the geometry reference count -\f[R] -.fi +.EX +rtcRetainGeometry \- increments the geometry reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcRetainGeometry(RTCGeometry geometry); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Geometry objects are reference counted. -The \f[V]rtcRetainGeometry\f[R] function increments the reference count -of the passed geometry object (\f[V]geometry\f[R] argument). -This function together with \f[V]rtcReleaseGeometry\f[R] allows to use +The \f[CR]rtcRetainGeometry\f[R] function increments the reference count +of the passed geometry object (\f[CR]geometry\f[R] argument). +This function together with \f[CR]rtcReleaseGeometry\f[R] allows to use the internal reference counting in a C++ wrapper class to handle the ownership of the object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcReleaseGeometry] diff --git a/man/man3/rtcRetainScene.3embree4 b/man/man3/rtcRetainScene.3embree4 index 229dfef21b..b0140c2a3f 100644 --- a/man/man3/rtcRetainScene.3embree4 +++ b/man/man3/rtcRetainScene.3embree4 @@ -1,49 +1,27 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcRetainScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcRetainScene - increments the scene reference count -\f[R] -.fi +.EX +rtcRetainScene \- increments the scene reference count +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcRetainScene(RTCScene scene); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Scene objects are reference counted. -The \f[V]rtcRetainScene\f[R] function increments the reference count of -the passed scene object (\f[V]scene\f[R] argument). -This function together with \f[V]rtcReleaseScene\f[R] allows to use the +The \f[CR]rtcRetainScene\f[R] function increments the reference count of +the passed scene object (\f[CR]scene\f[R] argument). +This function together with \f[CR]rtcReleaseScene\f[R] allows to use the internal reference counting in a C++ wrapper class to handle the ownership of the object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewScene], [rtcReleaseScene] diff --git a/man/man3/rtcSYCLDeviceSelector.3embree4 b/man/man3/rtcSYCLDeviceSelector.3embree4 index 6dc9334e57..9e718fa474 100644 --- a/man/man3/rtcSYCLDeviceSelector.3embree4 +++ b/man/man3/rtcSYCLDeviceSelector.3embree4 @@ -1,61 +1,37 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSYCLDeviceSelector" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSYCLDeviceSelector - SYCL device selector function to select +.EX +rtcSYCLDeviceSelector \- SYCL device selector function to select devices supported by Embree -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include int rtcSYCLDeviceSelector(const sycl::device sycl_device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -This function checks if the passed SYCL device (\f[V]sycl_device\f[R] +This function checks if the passed SYCL device (\f[CR]sycl_device\f[R] arguments) is supported by Embree or not. This function can be used directly to select some supported SYCL device by using it as SYCL device selector function. For instance, the following code sequence selects an Embree supported SYCL device and creates an Embree device from it: .IP -.nf -\f[C] +.EX sycl::device sycl_device(rtcSYCLDeviceSelector); sycl::queue sycl_queue(sycl_device); sycl::context(sycl_device); RTCDevice device = rtcNewSYCLDevice(sycl_context,nullptr); -\f[R] -.fi +.EE .SS EXIT STATUS -.PP -The function returns -1 if the SYCL device is supported by Embree and 1 +The function returns \-1 if the SYCL device is supported by Embree and 1 otherwise. On failure an error code is set that can get queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcIsSYCLDeviceSupported] diff --git a/man/man3/rtcSetDeviceErrorFunction.3embree4 b/man/man3/rtcSetDeviceErrorFunction.3embree4 index 1bc778fddf..0aabc2ef49 100644 --- a/man/man3/rtcSetDeviceErrorFunction.3embree4 +++ b/man/man3/rtcSetDeviceErrorFunction.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetDeviceErrorFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetDeviceErrorFunction - sets an error callback function for the device -\f[R] -.fi +.EX +rtcSetDeviceErrorFunction \- sets an error callback function for the device +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include typedef void (*RTCErrorFunction)( @@ -40,31 +22,27 @@ void rtcSetDeviceErrorFunction( RTCErrorFunction error, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Using the \f[V]rtcSetDeviceErrorFunction\f[R] call, it is possible to -set a callback function (\f[V]error\f[R] argument) with payload -(\f[V]userPtr\f[R] argument), which is called whenever an error occurs -for the specified device (\f[V]device\f[R] argument). +Using the \f[CR]rtcSetDeviceErrorFunction\f[R] call, it is possible to +set a callback function (\f[CR]error\f[R] argument) with payload +(\f[CR]userPtr\f[R] argument), which is called whenever an error occurs +for the specified device (\f[CR]device\f[R] argument). .PP Only a single callback function can be registered per device, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP When the registered callback function is invoked, it gets passed the -user-defined payload (\f[V]userPtr\f[R] argument as specified at -registration time), the error code (\f[V]code\f[R] argument) of the -occurred error, as well as a string (\f[V]str\f[R] argument) that +user\-defined payload (\f[CR]userPtr\f[R] argument as specified at +registration time), the error code (\f[CR]code\f[R] argument) of the +occurred error, as well as a string (\f[CR]str\f[R] argument) that further describes the error. .PP The error code is also set if an error callback function is registered. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetDeviceError] diff --git a/man/man3/rtcSetDeviceMemoryMonitorFunction.3embree4 b/man/man3/rtcSetDeviceMemoryMonitorFunction.3embree4 index 7213fad3ac..ec89542996 100644 --- a/man/man3/rtcSetDeviceMemoryMonitorFunction.3embree4 +++ b/man/man3/rtcSetDeviceMemoryMonitorFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetDeviceMemoryMonitorFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetDeviceMemoryMonitorFunction - registers a callback function +.EX +rtcSetDeviceMemoryMonitorFunction \- registers a callback function to track memory consumption -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include typedef bool (*RTCMemoryMonitorFunction)( @@ -41,59 +23,55 @@ void rtcSetDeviceMemoryMonitorFunction( RTCMemoryMonitorFunction memoryMonitor, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -Using the \f[V]rtcSetDeviceMemoryMonitorFunction\f[R] call, it is -possible to register a callback function (\f[V]memoryMonitor\f[R] -argument) with payload (\f[V]userPtr\f[R] argument) for a device -(\f[V]device\f[R] argument), which is called whenever internal memory is -allocated or deallocated by objects of that device. +Using the \f[CR]rtcSetDeviceMemoryMonitorFunction\f[R] call, it is +possible to register a callback function (\f[CR]memoryMonitor\f[R] +argument) with payload (\f[CR]userPtr\f[R] argument) for a device +(\f[CR]device\f[R] argument), which is called whenever internal memory +is allocated or deallocated by objects of that device. Using this memory monitor callback mechanism, the application can track the memory consumption of an Embree device, and optionally terminate API calls that consume too much memory. .PP Only a single callback function can be registered per device, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP Once registered, the Embree device will invoke the memory monitor callback function before or after it allocates or frees important memory blocks. The callback function gets passed the payload as specified at -registration time (\f[V]userPtr\f[R] argument), the number of bytes -allocated or deallocated (\f[V]bytes\f[R] argument), and whether the +registration time (\f[CR]userPtr\f[R] argument), the number of bytes +allocated or deallocated (\f[CR]bytes\f[R] argument), and whether the callback is invoked after the allocation or deallocation took place -(\f[V]post\f[R] argument). +(\f[CR]post\f[R] argument). The callback function might get called from multiple threads concurrently. .PP The application can track the current memory usage of the Embree device -by atomically accumulating the \f[V]bytes\f[R] input parameter provided +by atomically accumulating the \f[CR]bytes\f[R] input parameter provided to the callback function. This parameter will be >0 for allocations and <0 for deallocations. .PP Embree will continue its operation normally when returning -\f[V]true\f[R] from the callback function. -If \f[V]false\f[R] is returned, Embree will cancel the current operation -with the \f[V]RTC_ERROR_OUT_OF_MEMORY\f[R] error code. +\f[CR]true\f[R] from the callback function. +If \f[CR]false\f[R] is returned, Embree will cancel the current +operation with the \f[CR]RTC_ERROR_OUT_OF_MEMORY\f[R] error code. Issuing multiple cancel requests from different threads is allowed. Canceling will only happen when the callback was called for allocations (bytes > 0), otherwise the cancel request will be ignored. .PP If a callback to cancel was invoked before the allocation happens -(\f[V]post == false\f[R]), then the \f[V]bytes\f[R] parameter should not -be accumulated, as the allocation will never happen. +(\f[CR]post == false\f[R]), then the \f[CR]bytes\f[R] parameter should +not be accumulated, as the allocation will never happen. If the callback to cancel was invoked after the allocation happened -(\f[V]post == true\f[R]), then the \f[V]bytes\f[R] parameter should be +(\f[CR]post == true\f[R]), then the \f[CR]bytes\f[R] parameter should be accumulated, as the allocation properly happened and a deallocation will later free that data block. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewDevice] diff --git a/man/man3/rtcSetDeviceSYCLDevice.3embree4 b/man/man3/rtcSetDeviceSYCLDevice.3embree4 index bf9dbfde0f..251d9b1d42 100644 --- a/man/man3/rtcSetDeviceSYCLDevice.3embree4 +++ b/man/man3/rtcSetDeviceSYCLDevice.3embree4 @@ -1,48 +1,26 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetDeviceSYCLDevice" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetDeviceSYCLDevice - sets the SYCL device to be used for memory allocations -\f[R] -.fi +.EX +rtcSetDeviceSYCLDevice \- sets the SYCL device to be used for memory allocations +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetDeviceSYCLDevice(RTCDevice device, const sycl::device sycl_device); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -This function sets the SYCL device (\f[V]sycl_device\f[R] argument) to +This function sets the SYCL device (\f[CR]sycl_device\f[R] argument) to be used to allocate GPU memory when using the specified Embree device -(\f[V]device\f[R] argument). +(\f[CR]device\f[R] argument). This SYCL device must be one of the SYCL devices contained inside the SYCL context used to create the Embree device. .SS EXIT STATUS -.PP On failure an error code is set that can get queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewSYCLDevice] diff --git a/man/man3/rtcSetGeometryBoundsFunction.3embree4 b/man/man3/rtcSetGeometryBoundsFunction.3embree4 index 325dfba52c..840c554273 100644 --- a/man/man3/rtcSetGeometryBoundsFunction.3embree4 +++ b/man/man3/rtcSetGeometryBoundsFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryBoundsFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryBoundsFunction - sets a callback to query the - bounding box of user-defined primitives -\f[R] -.fi +.EX +rtcSetGeometryBoundsFunction \- sets a callback to query the + bounding box of user\-defined primitives +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCBoundsFunctionArguments @@ -47,46 +29,42 @@ void rtcSetGeometryBoundsFunction( RTCBoundsFunction bounds, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryBoundsFunction\f[R] function registers a bounding -box callback function (\f[V]bounds\f[R] argument) with payload -(\f[V]userPtr\f[R] argument) for the specified user geometry -(\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryBoundsFunction\f[R] function registers a +bounding box callback function (\f[CR]bounds\f[R] argument) with payload +(\f[CR]userPtr\f[R] argument) for the specified user geometry +(\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP In SYCL mode the BVH construction is done on the host and the passed -function pointer must be a host-side function pointer. +function pointer must be a host\-side function pointer. .PP The registered bounding box callback function is invoked to calculate -axis-aligned bounding boxes of the primitives of the user-defined +axis\-aligned bounding boxes of the primitives of the user\-defined geometry during spatial acceleration structure construction. -The bounding box callback of \f[V]RTCBoundsFunction\f[R] type is invoked -with a pointer to a structure of type -\f[V]RTCBoundsFunctionArguments\f[R] which contains various arguments, -such as: the user data of the geometry (\f[V]geometryUserPtr\f[R] +The bounding box callback of \f[CR]RTCBoundsFunction\f[R] type is +invoked with a pointer to a structure of type +\f[CR]RTCBoundsFunctionArguments\f[R] which contains various arguments, +such as: the user data of the geometry (\f[CR]geometryUserPtr\f[R] member), the ID of the primitive to calculate the bounds for -(\f[V]primID\f[R] member), the time step at which to calculate the -bounds (\f[V]timeStep\f[R] member), and a memory location to write the -calculated bound to (\f[V]bounds_o\f[R] member). +(\f[CR]primID\f[R] member), the time step at which to calculate the +bounds (\f[CR]timeStep\f[R] member), and a memory location to write the +calculated bound to (\f[CR]bounds_o\f[R] member). .PP In a typical usage scenario one would store a pointer to the internal representation of the user geometry object using -\f[V]rtcSetGeometryUserData\f[R]. +\f[CR]rtcSetGeometryUserData\f[R]. The callback function can then read that pointer from the -\f[V]geometryUserPtr\f[R] field and calculate the proper bounding box +\f[CR]geometryUserPtr\f[R] field and calculate the proper bounding box for the requested primitive and time, and store that bounding box to the -destination structure (\f[V]bounds_o\f[R] member). +destination structure (\f[CR]bounds_o\f[R] member). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_USER] diff --git a/man/man3/rtcSetGeometryBuffer.3embree4 b/man/man3/rtcSetGeometryBuffer.3embree4 index 56a83bf128..b6c31430fa 100644 --- a/man/man3/rtcSetGeometryBuffer.3embree4 +++ b/man/man3/rtcSetGeometryBuffer.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryBuffer - assigns a view of a buffer to the geometry -\f[R] -.fi +.EX +rtcSetGeometryBuffer \- assigns a view of a buffer to the geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryBuffer( @@ -39,31 +21,27 @@ void rtcSetGeometryBuffer( size_t byteStride, size_t itemCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryBuffer\f[R] function binds a view of a buffer -object (\f[V]buffer\f[R] argument) to a geometry buffer type and slot -(\f[V]type\f[R] and \f[V]slot\f[R] argument) of the specified geometry -(\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryBuffer\f[R] function binds a view of a buffer +object (\f[CR]buffer\f[R] argument) to a geometry buffer type and slot +(\f[CR]type\f[R] and \f[CR]slot\f[R] argument) of the specified geometry +(\f[CR]geometry\f[R] argument). .PP One can specify the start of the first buffer element in bytes -(\f[V]byteOffset\f[R] argument), the byte stride between individual -buffer elements (\f[V]byteStride\f[R] argument), the format of the -buffer elements (\f[V]format\f[R] argument), and the number of elements -to bind (\f[V]itemCount\f[R]). +(\f[CR]byteOffset\f[R] argument), the byte stride between individual +buffer elements (\f[CR]byteStride\f[R] argument), the format of the +buffer elements (\f[CR]format\f[R] argument), and the number of elements +to bind (\f[CR]itemCount\f[R]). .PP -The start address (\f[V]byteOffset\f[R] argument) and stride -(\f[V]byteStride\f[R] argument) must be both aligned to 4 bytes, -otherwise the \f[V]rtcSetGeometryBuffer\f[R] function will fail. +The start address (\f[CR]byteOffset\f[R] argument) and stride +(\f[CR]byteStride\f[R] argument) must be both aligned to 4 bytes, +otherwise the \f[CR]rtcSetGeometryBuffer\f[R] function will fail. .PP After successful completion of this function, the geometry will hold a reference to the buffer object. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetSharedGeometryBuffer], [rtcSetNewGeometryBuffer] diff --git a/man/man3/rtcSetGeometryBuildQuality.3embree4 b/man/man3/rtcSetGeometryBuildQuality.3embree4 index be49f75962..aadd13b56c 100644 --- a/man/man3/rtcSetGeometryBuildQuality.3embree4 +++ b/man/man3/rtcSetGeometryBuildQuality.3embree4 @@ -1,70 +1,48 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryBuildQuality" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryBuildQuality - sets the build quality for the geometry -\f[R] -.fi +.EX +rtcSetGeometryBuildQuality \- sets the build quality for the geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryBuildQuality( RTCGeometry geometry, enum RTCBuildQuality quality ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryBuildQuality\f[R] function sets the build quality -(\f[V]quality\f[R] argument) for the specified geometry -(\f[V]geometry\f[R] argument). -The per-geometry build quality is only a hint and may be ignored. -Embree currently uses the per-geometry build quality when the scene -build quality is set to \f[V]RTC_BUILD_QUALITY_LOW\f[R]. -In this mode a two-level acceleration structure is build, and geometries -build a separate acceleration structure using the geometry build -quality. -The per-geometry build quality can be one of: +The \f[CR]rtcSetGeometryBuildQuality\f[R] function sets the build +quality (\f[CR]quality\f[R] argument) for the specified geometry +(\f[CR]geometry\f[R] argument). +The per\-geometry build quality is only a hint and may be ignored. +Embree currently uses the per\-geometry build quality when the scene +build quality is set to \f[CR]RTC_BUILD_QUALITY_LOW\f[R]. +In this mode a two\-level acceleration structure is build, and +geometries build a separate acceleration structure using the geometry +build quality. +The per\-geometry build quality can be one of: .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_LOW\f[R]: Creates lower quality data structures, +\f[CR]RTC_BUILD_QUALITY_LOW\f[R]: Creates lower quality data structures, e.g.\ for dynamic scenes. .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_MEDIUM\f[R]: Default build quality for most +\f[CR]RTC_BUILD_QUALITY_MEDIUM\f[R]: Default build quality for most usages. Gives a good compromise between build and render performance. .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_HIGH\f[R]: Creates higher quality data structures -for final-frame rendering. +\f[CR]RTC_BUILD_QUALITY_HIGH\f[R]: Creates higher quality data +structures for final\-frame rendering. Enables a spatial split builder for certain primitive types. .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_REFIT\f[R]: Uses a BVH refitting approach when +\f[CR]RTC_BUILD_QUALITY_REFIT\f[R]: Uses a BVH refitting approach when changing only the vertex buffer. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetSceneBuildQuality] diff --git a/man/man3/rtcSetGeometryDisplacementFunction.3embree4 b/man/man3/rtcSetGeometryDisplacementFunction.3embree4 index f24c479337..6383ce511d 100644 --- a/man/man3/rtcSetGeometryDisplacementFunction.3embree4 +++ b/man/man3/rtcSetGeometryDisplacementFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryDisplacementFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryDisplacementFunction - sets the displacement function +.EX +rtcSetGeometryDisplacementFunction \- sets the displacement function for a subdivision geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCDisplacementFunctionNArguments @@ -55,42 +37,42 @@ void rtcSetGeometryDisplacementFunction( RTCGeometry geometry, RTCDisplacementFunctionN displacement ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryDisplacementFunction\f[R] function registers a -displacement callback function (\f[V]displacement\f[R] argument) for the -specified subdivision geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryDisplacementFunction\f[R] function registers a +displacement callback function (\f[CR]displacement\f[R] argument) for +the specified subdivision geometry (\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered displacement callback function is invoked to displace points on the subdivision geometry during spatial acceleration structure -construction, during the \f[V]rtcCommitScene\f[R] call. +construction, during the \f[CR]rtcCommitScene\f[R] call. .PP -The callback function of type \f[V]RTCDisplacementFunctionN\f[R] is +The callback function of type \f[CR]RTCDisplacementFunctionN\f[R] is invoked with a number of arguments stored inside the -\f[V]RTCDisplacementFunctionNArguments\f[R] structure. +\f[CR]RTCDisplacementFunctionNArguments\f[R] structure. The provided user data pointer of the geometry -(\f[V]geometryUserPtr\f[R] member) can be used to point to the +(\f[CR]geometryUserPtr\f[R] member) can be used to point to the application\[cq]s representation of the subdivision mesh. -A number \f[V]N\f[R] of points to displace are specified in a structure +A number \f[CR]N\f[R] of points to displace are specified in a structure of array layout. -For each point to displace, the local patch UV coordinates (\f[V]u\f[R] -and \f[V]v\f[R] arrays), the normalized geometry normal (\f[V]Ng_x\f[R], -\f[V]Ng_y\f[R], and \f[V]Ng_z\f[R] arrays), and the position -(\f[V]P_x\f[R], \f[V]P_y\f[R], and \f[V]P_z\f[R] arrays) are provided. +For each point to displace, the local patch UV coordinates (\f[CR]u\f[R] +and \f[CR]v\f[R] arrays), the normalized geometry normal +(\f[CR]Ng_x\f[R], \f[CR]Ng_y\f[R], and \f[CR]Ng_z\f[R] arrays), and the +position (\f[CR]P_x\f[R], \f[CR]P_y\f[R], and \f[CR]P_z\f[R] arrays) are +provided. The task of the displacement function is to use this information and change the position data. .PP -The geometry handle (\f[V]geometry\f[R] member) and primitive ID -(\f[V]primID\f[R] member) of the patch to displace are additionally -provided as well as the time step \f[V]timeStep\f[R], which can be -important if the displacement is time-dependent and motion blur is used. +The geometry handle (\f[CR]geometry\f[R] member) and primitive ID +(\f[CR]primID\f[R] member) of the patch to displace are additionally +provided as well as the time step \f[CR]timeStep\f[R], which can be +important if the displacement is time\-dependent and motion blur is +used. .PP All passed arrays must be aligned to 64 bytes and properly padded to make wide vector processing inside the displacement function easily @@ -99,9 +81,7 @@ possible. Also see tutorial [Displacement Geometry] for an example of how to use the displacement mapping functions. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_SUBDIVISION] diff --git a/man/man3/rtcSetGeometryEnableFilterFunctionFromArguments.3embree4 b/man/man3/rtcSetGeometryEnableFilterFunctionFromArguments.3embree4 index 8a855ecd2a..42302e198c 100644 --- a/man/man3/rtcSetGeometryEnableFilterFunctionFromArguments.3embree4 +++ b/man/man3/rtcSetGeometryEnableFilterFunctionFromArguments.3embree4 @@ -1,44 +1,24 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryEnableFilterFunctionFromArguments" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryEnableFilterFunctionFromArguments - enables +.EX +rtcSetGeometryEnableFilterFunctionFromArguments \- enables argument filter functions for the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryEnableFilterFunctionFromArguments( RTCGeometry geometry, bool enable); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP This function enables invokation the filter function passed through -\f[V]RTCIntersectArguments\f[R] or \f[V]RTCOccludedArguments\f[R] to the -intersect and occluded queries. +\f[CR]RTCIntersectArguments\f[R] or \f[CR]RTCOccludedArguments\f[R] to +the intersect and occluded queries. If enable is true the argument filter function invokation is enabled for the geometry or disabled otherwise. By default the invokation of the argument filter function is disabled @@ -46,21 +26,19 @@ for some geometry. .PP The argument filter function invokation can also get enforced for each geometry by using the -\f[V]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag that -can get passed to \f[V]rtcIntersect\f[R] and \f[V]rtcOccluded\f[R] +\f[CR]RTC_RAY_QUERY_FLAG_INVOKE_ARGUMENT_FILTER\f[R] ray query flag that +can get passed to \f[CR]rtcIntersect\f[R] and \f[CR]rtcOccluded\f[R] functions. See Section [rtcInitIntersectArguments] and [rtcInitOccludedArguments] for more details. .PP In order to use the argument filter function for some scene, that feature additionally has to get enabled using the -\f[V]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] scene flag. +\f[CR]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R] scene flag. See Section [rtcSetSceneFlags] for more details. .SS EXIT STATUS -.PP On failure an error code is set that can get queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcInitIntersectArguments], [rtcInitOccludedArguments], [rtcSetSceneFlags] diff --git a/man/man3/rtcSetGeometryInstancedScene.3embree4 b/man/man3/rtcSetGeometryInstancedScene.3embree4 index 33b31b42b1..f9cd31e786 100644 --- a/man/man3/rtcSetGeometryInstancedScene.3embree4 +++ b/man/man3/rtcSetGeometryInstancedScene.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryInstancedScene" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryInstancedScene - sets the instanced scene of +.EX +rtcSetGeometryInstancedScene \- sets the instanced scene of an instance geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryInstancedScene( RTCGeometry geometry, RTCScene scene ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryInstancedScene\f[R] function sets the instanced -scene (\f[V]scene\f[R] argument) of the specified instance geometry -(\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryInstancedScene\f[R] function sets the instanced +scene (\f[CR]scene\f[R] argument) of the specified instance geometry +(\f[CR]geometry\f[R] argument). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE], [rtcSetGeometryTransform] diff --git a/man/man3/rtcSetGeometryInstancedScenes.3embree4 b/man/man3/rtcSetGeometryInstancedScenes.3embree4 index 491c282f7e..778be09b19 100644 --- a/man/man3/rtcSetGeometryInstancedScenes.3embree4 +++ b/man/man3/rtcSetGeometryInstancedScenes.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryInstancedScenes" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryInstancedScenes - sets an array of scenes that can be +.EX +rtcSetGeometryInstancedScenes \- sets an array of scenes that can be instanced by an instance array geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryInstancedScenes( @@ -35,25 +17,21 @@ void rtcSetGeometryInstancedScenes( RTCScene* scene, size_t numScenes ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryInstancedScenes\f[R] function sets an array of -type \f[V]RTCScene\f[R] with \f[V]numScenes\f[R] elements that the -specified instance geometry (\f[V]geometry\f[R] argument) can instance. +The \f[CR]rtcSetGeometryInstancedScenes\f[R] function sets an array of +type \f[CR]RTCScene\f[R] with \f[CR]numScenes\f[R] elements that the +specified instance geometry (\f[CR]geometry\f[R] argument) can instance. This call also requires setting an index buffer using either -\f[V]rtcSetSharedGeometryBuffer\f[R] or -\f[V]rtcSetNewGeometryBuffer\f[R] (similar to index buffers for triangle -meshes), that specifies which instance of the instance array instances -which scene in the scene array. +\f[CR]rtcSetSharedGeometryBuffer\f[R] or +\f[CR]rtcSetNewGeometryBuffer\f[R] (similar to index buffers for +triangle meshes), that specifies which instance of the instance array +instances which scene in the scene array. If only one scene should be instanced the call -\f[V]rtcSetGeometryInstancedScene\f[R] should be preferred. +\f[CR]rtcSetGeometryInstancedScene\f[R] should be preferred. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE_ARRAY], [rtcSetNewGeometryBuffer], [rtcSetSharedGeometryBuffer], [rtcSetGeometryInstancedScene] diff --git a/man/man3/rtcSetGeometryIntersectFilterFunction.3embree4 b/man/man3/rtcSetGeometryIntersectFilterFunction.3embree4 index 34e09a94df..3949253e01 100644 --- a/man/man3/rtcSetGeometryIntersectFilterFunction.3embree4 +++ b/man/man3/rtcSetGeometryIntersectFilterFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryIntersectFilterFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryIntersectFilterFunction - sets the intersection filter +.EX +rtcSetGeometryIntersectFilterFunction \- sets the intersection filter for the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCFilterFunctionNArguments @@ -48,21 +30,19 @@ void rtcSetGeometryIntersectFilterFunction( RTCGeometry geometry, RTCFilterFunctionN filter ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryIntersectFilterFunction\f[R] function registers -an intersection filter callback function (\f[V]filter\f[R] argument) for -the specified geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryIntersectFilterFunction\f[R] function registers +an intersection filter callback function (\f[CR]filter\f[R] argument) +for the specified geometry (\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered intersection filter function is invoked for every hit -encountered during the \f[V]rtcIntersect\f[R]-type ray queries and can +encountered during the \f[CR]rtcIntersect\f[R]\-type ray queries and can accept or reject that hit. The feature can be used to define a silhouette for a primitive and reject hits that are outside the silhouette. @@ -70,58 +50,54 @@ E.g. a tree leaf could be modeled with an alpha texture that decides whether hit points lie inside or outside the leaf. .PP -If the \f[V]RTC_BUILD_QUALITY_HIGH\f[R] mode is set, the filter +If the \f[CR]RTC_BUILD_QUALITY_HIGH\f[R] mode is set, the filter functions may be called multiple times for the same primitive hit. Further, rays hitting exactly the edge might also report two hits for the same surface. For certain use cases, the application may have to work around this limitation by collecting already reported hits -(\f[V]geomID\f[R]/\f[V]primID\f[R] pairs) and ignoring duplicates. +(\f[CR]geomID\f[R]/\f[CR]primID\f[R] pairs) and ignoring duplicates. .PP -The filter function callback of type \f[V]RTCFilterFunctionN\f[R] gets +The filter function callback of type \f[CR]RTCFilterFunctionN\f[R] gets passed a number of arguments through the -\f[V]RTCFilterFunctionNArguments\f[R] structure. -The \f[V]valid\f[R] parameter of that structure points to an integer -valid mask (0 means invalid and -1 means valid). -The \f[V]geometryUserPtr\f[R] member is a user pointer optionally set -per geometry through the \f[V]rtcSetGeometryUserData\f[R] function. -The \f[V]context\f[R] member points to the ray query context passed to +\f[CR]RTCFilterFunctionNArguments\f[R] structure. +The \f[CR]valid\f[R] parameter of that structure points to an integer +valid mask (0 means invalid and \-1 means valid). +The \f[CR]geometryUserPtr\f[R] member is a user pointer optionally set +per geometry through the \f[CR]rtcSetGeometryUserData\f[R] function. +The \f[CR]context\f[R] member points to the ray query context passed to the ray query function. -The \f[V]ray\f[R] parameter points to \f[V]N\f[R] rays in SOA layout. -The \f[V]hit\f[R] parameter points to \f[V]N\f[R] hits in SOA layout to -test. -The \f[V]N\f[R] parameter is the number of rays and hits in -\f[V]ray\f[R] and \f[V]hit\f[R]. -The hit distance is provided as the \f[V]tfar\f[R] value of the ray. -If the hit geometry is instanced, the \f[V]instID\f[R] member of the ray -is valid, and the ray and the potential hit are in object space. +The \f[CR]ray\f[R] parameter points to \f[CR]N\f[R] rays in SOA layout. +The \f[CR]hit\f[R] parameter points to \f[CR]N\f[R] hits in SOA layout +to test. +The \f[CR]N\f[R] parameter is the number of rays and hits in +\f[CR]ray\f[R] and \f[CR]hit\f[R]. +The hit distance is provided as the \f[CR]tfar\f[R] value of the ray. +If the hit geometry is instanced, the \f[CR]instID\f[R] member of the +ray is valid, and the ray and the potential hit are in object space. .PP The filter callback function has the task to check for each valid ray whether it wants to accept or reject the corresponding hit. To reject a hit, the filter callback function just has to write -\f[V]0\f[R] to the integer valid mask of the corresponding ray. +\f[CR]0\f[R] to the integer valid mask of the corresponding ray. To accept the hit, it just has to leave the valid mask set to -\f[V]-1\f[R]. +\f[CR]\-1\f[R]. When accepting a hit, the filter function is further allowed to change -the hit and decrease the \f[V]tfar\f[R] value of the ray but it should +the hit and decrease the \f[CR]tfar\f[R] value of the ray but it should not modify other ray data nor any inactive components of the ray or hit. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP The implementation of the filter function can choose to implement a single code path that uses the ray access helper functions -\f[V]RTCRay_XXX\f[R] and hit access helper functions -\f[V]RTCHit_XXX\f[R] to access ray and hit data. +\f[CR]RTCRay_XXX\f[R] and hit access helper functions +\f[CR]RTCHit_XXX\f[R] to access ray and hit data. Alternatively the code can branch to optimized implementations for -specific sizes of \f[V]N\f[R] and cast the \f[V]ray\f[R] and -\f[V]hit\f[R] inputs to the proper packet types. +specific sizes of \f[CR]N\f[R] and cast the \f[CR]ray\f[R] and +\f[CR]hit\f[R] inputs to the proper packet types. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryOccludedFilterFunction] diff --git a/man/man3/rtcSetGeometryIntersectFunction.3embree4 b/man/man3/rtcSetGeometryIntersectFunction.3embree4 index d222dbdf2a..5c380530d9 100644 --- a/man/man3/rtcSetGeometryIntersectFunction.3embree4 +++ b/man/man3/rtcSetGeometryIntersectFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryIntersectFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryIntersectFunction - sets the callback function to +.EX +rtcSetGeometryIntersectFunction \- sets the callback function to intersect a user geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCIntersectFunctionNArguments @@ -49,73 +31,68 @@ void rtcSetGeometryIntersectFunction( RTCGeometry geometry, RTCIntersectFunctionN intersect ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryIntersectFunction\f[R] function registers a -ray/primitive intersection callback function (\f[V]intersect\f[R] -argument) for the specified user geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryIntersectFunction\f[R] function registers a +ray/primitive intersection callback function (\f[CR]intersect\f[R] +argument) for the specified user geometry (\f[CR]geometry\f[R] +argument). .PP Only a single callback function can be registered per geometry and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered callback function is invoked by -\f[V]rtcIntersect\f[R]-type ray queries to calculate the intersection of -a ray packet of variable size with one user-defined primitive. -The callback function of type \f[V]RTCIntersectFunctionN\f[R] gets +\f[CR]rtcIntersect\f[R]\-type ray queries to calculate the intersection +of a ray packet of variable size with one user\-defined primitive. +The callback function of type \f[CR]RTCIntersectFunctionN\f[R] gets passed a number of arguments through the -\f[V]RTCIntersectFunctionNArguments\f[R] structure. -The value \f[V]N\f[R] specifies the ray packet size, \f[V]valid\f[R] +\f[CR]RTCIntersectFunctionNArguments\f[R] structure. +The value \f[CR]N\f[R] specifies the ray packet size, \f[CR]valid\f[R] points to an array of integers that specify whether the corresponding -ray is valid (-1) or invalid (0), the \f[V]geometryUserPtr\f[R] member +ray is valid (\-1) or invalid (0), the \f[CR]geometryUserPtr\f[R] member points to the geometry user data previously set through -\f[V]rtcSetGeometryUserData\f[R], the \f[V]context\f[R] member points to -the ray query context passed to the ray query, the \f[V]rayhit\f[R] -member points to a ray and hit packet of variable size \f[V]N\f[R], and -the \f[V]geomID\f[R] and \f[V]primID\f[R] member identifies the geometry -ID and primitive ID of the primitive to intersect. +\f[CR]rtcSetGeometryUserData\f[R], the \f[CR]context\f[R] member points +to the ray query context passed to the ray query, the \f[CR]rayhit\f[R] +member points to a ray and hit packet of variable size \f[CR]N\f[R], and +the \f[CR]geomID\f[R] and \f[CR]primID\f[R] member identifies the +geometry ID and primitive ID of the primitive to intersect. .PP -The \f[V]ray\f[R] component of the \f[V]rayhit\f[R] structure contains -valid data, in particular the \f[V]tfar\f[R] value is the current +The \f[CR]ray\f[R] component of the \f[CR]rayhit\f[R] structure contains +valid data, in particular the \f[CR]tfar\f[R] value is the current closest hit distance found. -All data inside the \f[V]hit\f[R] component of the \f[V]rayhit\f[R] +All data inside the \f[CR]hit\f[R] component of the \f[CR]rayhit\f[R] structure are undefined and should not be read by the function. .PP The task of the callback function is to intersect each active ray from the ray packet with the specified user primitive. -If the user-defined primitive is missed by a ray of the ray packet, the +If the user\-defined primitive is missed by a ray of the ray packet, the function should return without modifying the ray or hit. -If an intersection of the user-defined primitive with the ray was found -in the valid range (from \f[V]tnear\f[R] to \f[V]tfar\f[R]), it should -update the hit distance of the ray (\f[V]tfar\f[R] member) and the hit -(\f[V]u\f[R], \f[V]v\f[R], \f[V]Ng\f[R], \f[V]instID\f[R], -\f[V]geomID\f[R], \f[V]primID\f[R] members). +If an intersection of the user\-defined primitive with the ray was found +in the valid range (from \f[CR]tnear\f[R] to \f[CR]tfar\f[R]), it should +update the hit distance of the ray (\f[CR]tfar\f[R] member) and the hit +(\f[CR]u\f[R], \f[CR]v\f[R], \f[CR]Ng\f[R], \f[CR]instID\f[R], +\f[CR]geomID\f[R], \f[CR]primID\f[R] members). In particular, the currently intersected instance is stored in the -\f[V]instID\f[R] field of the ray query context, which must be deep -copied into the \f[V]instID\f[R] member of the hit. +\f[CR]instID\f[R] field of the ray query context, which must be deep +copied into the \f[CR]instID\f[R] member of the hit. .PP As a primitive might have multiple intersections with a ray, the intersection filter function needs to be invoked by the user geometry intersection callback for each encountered intersection, if filtering of intersections is desired. This can be achieved through the -\f[V]rtcInvokeIntersectFilterFromGeometry\f[R] call. +\f[CR]rtcInvokeIntersectFilterFromGeometry\f[R] call. .PP Within the user geometry intersect function, it is safe to trace new rays and create new scenes and geometries. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryOccludedFunction], [rtcSetGeometryUserData], [rtcInvokeIntersectFilterFromGeometry] diff --git a/man/man3/rtcSetGeometryMask.3embree4 b/man/man3/rtcSetGeometryMask.3embree4 index 190e62adc5..22f07ec978 100644 --- a/man/man3/rtcSetGeometryMask.3embree4 +++ b/man/man3/rtcSetGeometryMask.3embree4 @@ -1,56 +1,35 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryMask" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryMask - sets the geometry mask -\f[R] -.fi +.EX +rtcSetGeometryMask \- sets the geometry mask +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryMask( RTCGeometry geometry, unsigned int mask ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryMask\f[R] function sets a 32-bit geometry mask -(\f[V]mask\f[R] argument) for the specified geometry (\f[V]geometry\f[R] -argument). +The \f[CR]rtcSetGeometryMask\f[R] function sets a 32\-bit geometry mask +(\f[CR]mask\f[R] argument) for the specified geometry +(\f[CR]geometry\f[R] argument). .PP This geometry mask is used together with the ray mask stored inside the -\f[V]mask\f[R] field of the ray. +\f[CR]mask\f[R] field of the ray. The primitives of the geometry are hit by the ray only if the bitwise -\f[V]and\f[R] operation of the geometry mask with the ray mask is not 0. +\f[CR]and\f[R] operation of the geometry mask with the ray mask is not +0. This feature can be used to disable selected geometries for specifically tagged rays, e.g.\ to disable shadow casting for certain geometries. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTCRay], [rtcGetDeviceProperty] diff --git a/man/man3/rtcSetGeometryMaxRadiusScale.3embree4 b/man/man3/rtcSetGeometryMaxRadiusScale.3embree4 index 3ff720ffe3..b5b220fe09 100644 --- a/man/man3/rtcSetGeometryMaxRadiusScale.3embree4 +++ b/man/man3/rtcSetGeometryMaxRadiusScale.3embree4 @@ -1,43 +1,23 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryMaxRadiusScale" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryMaxRadiusScale - assigns a maximal curve radius scale factor for min-width feature -\f[R] -.fi +.EX +rtcSetGeometryMaxRadiusScale \- assigns a maximal curve radius scale factor for min\-width feature +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryMaxRadiusScale(RTCGeometry geometry, float maxRadiusScale); -\f[R] -.fi +.EE .SS DESCRIPTION +The \f[CR]rtcSetMaxGeometryScale\f[R] function specifies a maximal +scaling factor for curve radii used by the min\-width feature. .PP -The \f[V]rtcSetMaxGeometryScale\f[R] function specifies a maximal -scaling factor for curve radii used by the min-width feature. -.PP -The min-width feature can increase the radius of curves and points, in +The min\-width feature can increase the radius of curves and points, in order to reduce aliasing and improve render times. The feature is disabled by default and has to get enabled using the EMBREE_MIN_WIDTH cmake option. @@ -56,11 +36,9 @@ distance away of the ray origin. For each control point p with radius r of a curve or point primitive, the primitive intersectors first calculate a target radius r\[cq] as: .IP -.nf -\f[C] -r\[aq] = length(p-ray_org) * minWidthDistanceFactor -\f[R] -.fi +.EX +r\[aq] = length(p\-ray_org) * minWidthDistanceFactor +.EE .PP Typically the minWidthDistanceFactor is set by the application such that the target radius projects to the width of half a pixel (thus primitive @@ -69,24 +47,20 @@ diameter is pixel sized). The target radius r\[cq] is then clamped against the minimal bound r and maximal bound maxRadiusScale*r to obtain the final radius r\[cq]\[cq]: .IP -.nf -\f[C] +.EX r\[aq]\[aq] = max(r, min(r\[aq], maxRadiusScale*r)) -\f[R] -.fi +.EE .PP Thus curves or points close to the camera are rendered with a normal radii r, and curves or points far from the camera are not enlarged too much, as this would be very expensive to render. .PP -When \f[V]rtcSetGeometryMaxRadiusScale\f[R] function is not invoked for +When \f[CR]rtcSetGeometryMaxRadiusScale\f[R] function is not invoked for a curve or point geometry (or if the maximal scaling factor is set to 1.0), then the curve or point geometry renders normally, with radii not -modified by the min-width feature. +modified by the min\-width feature. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcInitRayQueryContext] diff --git a/man/man3/rtcSetGeometryOccludedFilterFunction.3embree4 b/man/man3/rtcSetGeometryOccludedFilterFunction.3embree4 index 72afa29bff..2558fa9a43 100644 --- a/man/man3/rtcSetGeometryOccludedFilterFunction.3embree4 +++ b/man/man3/rtcSetGeometryOccludedFilterFunction.3embree4 @@ -1,54 +1,34 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryOccludedFilterFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryOccludedFilterFunction - sets the occlusion filter +.EX +rtcSetGeometryOccludedFilterFunction \- sets the occlusion filter for the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryOccludedFilterFunction( RTCGeometry geometry, RTCFilterFunctionN filter ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryOccludedFilterFunction\f[R] function registers an -occlusion filter callback function (\f[V]filter\f[R] argument) for the -specified geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryOccludedFilterFunction\f[R] function registers +an occlusion filter callback function (\f[CR]filter\f[R] argument) for +the specified geometry (\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered occlusion filter function is invoked for every hit -encountered during the \f[V]rtcOccluded\f[R]-type ray queries and can +encountered during the \f[CR]rtcOccluded\f[R]\-type ray queries and can accept or reject that hit. The feature can be used to define a silhouette for a primitive and reject hits that are outside the silhouette. @@ -57,21 +37,19 @@ a tree leaf could be modeled with an alpha texture that decides whether hit points lie inside or outside the leaf. .PP Please see the description of the -\f[V]rtcSetGeometryIntersectFilterFunction\f[R] for a description of the -filter callback function. +\f[CR]rtcSetGeometryIntersectFilterFunction\f[R] for a description of +the filter callback function. .PP -The \f[V]rtcOccluded\f[R]-type functions terminate traversal when a hit -got committed. -As filter functions can only set the \f[V]tfar\f[R] distance of the ray +The \f[CR]rtcOccluded\f[R]\-type functions terminate traversal when a +hit got committed. +As filter functions can only set the \f[CR]tfar\f[R] distance of the ray for a committed hit, the occlusion filter cannot influence the -\f[V]tfar\f[R] value of subsequent traversal, as that directly ends. -For that reason \f[V]rtcOccluded\f[R] and occlusion filters cannot get -used to gather the next n-hits, and \f[V]rtcIntersect\f[R] and +\f[CR]tfar\f[R] value of subsequent traversal, as that directly ends. +For that reason \f[CR]rtcOccluded\f[R] and occlusion filters cannot get +used to gather the next n\-hits, and \f[CR]rtcIntersect\f[R] and intersection filters should get used instead. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryIntersectFilterFunction] diff --git a/man/man3/rtcSetGeometryOccludedFunction.3embree4 b/man/man3/rtcSetGeometryOccludedFunction.3embree4 index 001c71a0f9..b9415cc948 100644 --- a/man/man3/rtcSetGeometryOccludedFunction.3embree4 +++ b/man/man3/rtcSetGeometryOccludedFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryOccludedFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryOccludedFunction - sets the callback function to +.EX +rtcSetGeometryOccludedFunction \- sets the callback function to test a user geometry for occlusion -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCOccludedFunctionNArguments @@ -49,62 +31,56 @@ void rtcSetGeometryOccludedFunction( RTCGeometry geometry, RTCOccludedFunctionN filter ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryOccludedFunction\f[R] function registers a -ray/primitive occlusion callback function (\f[V]filter\f[R] argument) -for the specified user geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryOccludedFunction\f[R] function registers a +ray/primitive occlusion callback function (\f[CR]filter\f[R] argument) +for the specified user geometry (\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered callback function is invoked by -\f[V]rtcOccluded\f[R]-type ray queries to test whether the rays of a -packet of variable size are occluded by a user-defined primitive. -The callback function of type \f[V]RTCOccludedFunctionN\f[R] gets passed -a number of arguments through the -\f[V]RTCOccludedFunctionNArguments\f[R] structure. -The value \f[V]N\f[R] specifies the ray packet size, \f[V]valid\f[R] +\f[CR]rtcOccluded\f[R]\-type ray queries to test whether the rays of a +packet of variable size are occluded by a user\-defined primitive. +The callback function of type \f[CR]RTCOccludedFunctionN\f[R] gets +passed a number of arguments through the +\f[CR]RTCOccludedFunctionNArguments\f[R] structure. +The value \f[CR]N\f[R] specifies the ray packet size, \f[CR]valid\f[R] points to an array of integers which specify whether the corresponding -ray is valid (-1) or invalid (0), the \f[V]geometryUserPtr\f[R] member +ray is valid (\-1) or invalid (0), the \f[CR]geometryUserPtr\f[R] member points to the geometry user data previously set through -\f[V]rtcSetGeometryUserData\f[R], the \f[V]context\f[R] member points to -the ray query context passed to the ray query, the \f[V]ray\f[R] member -points to a ray packet of variable size \f[V]N\f[R], and the -\f[V]geomID\f[R] and \f[V]primID\f[R] member identifies the geometry ID -and primitive ID of the primitive to intersect. +\f[CR]rtcSetGeometryUserData\f[R], the \f[CR]context\f[R] member points +to the ray query context passed to the ray query, the \f[CR]ray\f[R] +member points to a ray packet of variable size \f[CR]N\f[R], and the +\f[CR]geomID\f[R] and \f[CR]primID\f[R] member identifies the geometry +ID and primitive ID of the primitive to intersect. .PP The task of the callback function is to intersect each active ray from the ray packet with the specified user primitive. -If the user-defined primitive is missed by a ray of the ray packet, the +If the user\-defined primitive is missed by a ray of the ray packet, the function should return without modifying the ray. -If an intersection of the user-defined primitive with the ray was found -in the valid range (from \f[V]tnear\f[R] to \f[V]tfar\f[R]), it should -set the \f[V]tfar\f[R] member of the ray to \f[V]-inf\f[R]. +If an intersection of the user\-defined primitive with the ray was found +in the valid range (from \f[CR]tnear\f[R] to \f[CR]tfar\f[R]), it should +set the \f[CR]tfar\f[R] member of the ray to \f[CR]\-inf\f[R]. .PP As a primitive might have multiple intersections with a ray, the occlusion filter function needs to be invoked by the user geometry occlusion callback for each encountered intersection, if filtering of intersections is desired. This can be achieved through the -\f[V]rtcInvokeOccludedFilterFromGeometry\f[R] call. +\f[CR]rtcInvokeOccludedFilterFromGeometry\f[R] call. .PP Within the user geometry occlusion function, it is safe to trace new rays and create new scenes and geometries. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryIntersectFunction], [rtcSetGeometryUserData], [rtcInvokeOccludedFilterFromGeometry] diff --git a/man/man3/rtcSetGeometryPointQueryFunction.3embree4 b/man/man3/rtcSetGeometryPointQueryFunction.3embree4 index 9177f8b404..797eae4860 100644 --- a/man/man3/rtcSetGeometryPointQueryFunction.3embree4 +++ b/man/man3/rtcSetGeometryPointQueryFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryPointQueryFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryPointQueryFunction - sets the point query callback function +.EX +rtcSetGeometryPointQueryFunction \- sets the point query callback function for a geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include struct RTCPointQueryFunctionArguments @@ -58,33 +40,31 @@ void rtcSetGeometryPointQueryFunction( RTCGeometry geometry, RTCPointQueryFunction queryFunc ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryPointQueryFunction\f[R] function registers a -point query callback function (\f[V]queryFunc\f[R] argument) for the -specified geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryPointQueryFunction\f[R] function registers a +point query callback function (\f[CR]queryFunc\f[R] argument) for the +specified geometry (\f[CR]geometry\f[R] argument). .PP Only a single callback function can be registered per geometry and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP The registered callback function is invoked by [rtcPointQuery] for every primitive of the geometry that intersects the corresponding point query domain. -The callback function of type \f[V]RTCPointQueryFunction\f[R] gets +The callback function of type \f[CR]RTCPointQueryFunction\f[R] gets passed a number of arguments through the -\f[V]RTCPointQueryFunctionArguments\f[R] structure. -The \f[V]query\f[R] object is the original point query object passed -into [rtcPointQuery], \f[V]usrPtr\f[R] is an arbitrary pointer to pass +\f[CR]RTCPointQueryFunctionArguments\f[R] structure. +The \f[CR]query\f[R] object is the original point query object passed +into [rtcPointQuery], \f[CR]usrPtr\f[R] is an arbitrary pointer to pass input into and store results of the callback function. -The \f[V]primID\f[R], \f[V]geomID\f[R] and \f[V]context\f[R] (see +The \f[CR]primID\f[R], \f[CR]geomID\f[R] and \f[CR]context\f[R] (see [rtcInitPointQueryContext] for details) can be used to identify the geometry data of the primitive. .PP -A \f[V]RTCPointQueryFunction\f[R] can also be passed directly as an +A \f[CR]RTCPointQueryFunction\f[R] can also be passed directly as an argument to [rtcPointQuery]. In this case the callback is invoked for all primitives in the scene that intersect the query domain. @@ -94,24 +74,24 @@ If a callback function is passed as an argument to [rtcPointQuery] and and the callback function passed to [rtcPointQuery] will be called before the geometry specific callback function. .PP -If instancing is used, the parameter \f[V]simliarityScale\f[R] indicates -whether the current instance transform (top element of the stack in -\f[V]context\f[R]) is a similarity transformation or not. +If instancing is used, the parameter \f[CR]simliarityScale\f[R] +indicates whether the current instance transform (top element of the +stack in \f[CR]context\f[R]) is a similarity transformation or not. Similarity transformations are composed of translation, rotation and uniform scaling and if a matrix M defines a similarity transformation, there is a scaling factor D such that for all x,y: dist(Mx, My) = D * dist(x, y). -In this case the parameter \f[V]scalingFactor\f[R] is this scaling +In this case the parameter \f[CR]scalingFactor\f[R] is this scaling factor D and otherwise it is 0. -A valid similarity scale (\f[V]similarityScale\f[R] > 0) allows to +A valid similarity scale (\f[CR]similarityScale\f[R] > 0) allows to compute distance information in instance space and scale the distances into world space (for example, to update the query radius, see below) by dividing the instance space distance with the similarity scale. If the current instance transform is not a similarity transform -(\f[V]similarityScale\f[R] is 0), the distance computation has to be +(\f[CR]similarityScale\f[R] is 0), the distance computation has to be performed in world space to ensure correctness. In this case the instance to world transformations given with the -\f[V]context\f[R] should be used to transform the primitive data into +\f[CR]context\f[R] should be used to transform the primitive data into world space. Otherwise, the query location can be transformed into instance space which can be more efficient. @@ -131,25 +111,24 @@ In any case, the callbacks are conservative, i.e.\ if a primitive is inside the query domain a callback will be invoked but the reverse is not necessarily true. .PP -For efficiency, the radius of the \f[V]query\f[R] object can be +For efficiency, the radius of the \f[CR]query\f[R] object can be decreased (in world space) inside the callback function to improve culling of geometry during BVH traversal. If the query radius was updated, the callback function should return -\f[V]true\f[R] to issue an update of internal traversal information. +\f[CR]true\f[R] to issue an update of internal traversal information. Increasing the radius or modifying the time or position of the query results in undefined behaviour. .PP Within the callback function, it is safe to call [rtcPointQuery] again, for example when implementing instancing manually. In this case the instance transformation should be pushed onto the stack -in \f[V]context\f[R]. +in \f[CR]context\f[R]. Embree will internally compute the point query information in instance -space using the top element of the stack in \f[V]context\f[R] when +space using the top element of the stack in \f[CR]context\f[R] when [rtcPointQuery] is called. .PP For a reference implementation of a closest point traversal of triangle meshes using instancing and user defined instancing see the tutorial [ClosestPoint]. .SS SEE ALSO -.PP [rtcPointQuery], [rtcInitPointQueryContext] diff --git a/man/man3/rtcSetGeometrySubdivisionMode.3embree4 b/man/man3/rtcSetGeometrySubdivisionMode.3embree4 index f5990e6040..1b40309818 100644 --- a/man/man3/rtcSetGeometrySubdivisionMode.3embree4 +++ b/man/man3/rtcSetGeometrySubdivisionMode.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometrySubdivisionMode" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometrySubdivisionMode - sets the subdivision mode +.EX +rtcSetGeometrySubdivisionMode \- sets the subdivision mode of a subdivision geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometrySubdivisionMode( @@ -35,42 +17,38 @@ void rtcSetGeometrySubdivisionMode( unsigned int topologyID, enum RTCSubdivisionMode mode ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometrySubdivisionMode\f[R] function sets the -subdivision mode (\f[V]mode\f[R] parameter) for the topology -(\f[V]topologyID\f[R] parameter) of the specified subdivision geometry -(\f[V]geometry\f[R] parameter). +The \f[CR]rtcSetGeometrySubdivisionMode\f[R] function sets the +subdivision mode (\f[CR]mode\f[R] parameter) for the topology +(\f[CR]topologyID\f[R] parameter) of the specified subdivision geometry +(\f[CR]geometry\f[R] parameter). .PP The subdivision modes can be used to force linear interpolation for certain parts of the subdivision mesh: .IP \[bu] 2 -\f[V]RTC_SUBDIVISION_MODE_NO_BOUNDARY\f[R]: Boundary patches are +\f[CR]RTC_SUBDIVISION_MODE_NO_BOUNDARY\f[R]: Boundary patches are ignored. This way each rendered patch has a full set of control vertices. .IP \[bu] 2 -\f[V]RTC_SUBDIVISION_MODE_SMOOTH_BOUNDARY\f[R]: The sequence of boundary -control points are used to generate a smooth B-spline boundary curve -(default mode). +\f[CR]RTC_SUBDIVISION_MODE_SMOOTH_BOUNDARY\f[R]: The sequence of +boundary control points are used to generate a smooth B\-spline boundary +curve (default mode). .IP \[bu] 2 -\f[V]RTC_SUBDIVISION_MODE_PIN_CORNERS\f[R]: Corner vertices are pinned +\f[CR]RTC_SUBDIVISION_MODE_PIN_CORNERS\f[R]: Corner vertices are pinned to their location during subdivision. .IP \[bu] 2 -\f[V]RTC_SUBDIVISION_MODE_PIN_BOUNDARY\f[R]: All vertices at the border +\f[CR]RTC_SUBDIVISION_MODE_PIN_BOUNDARY\f[R]: All vertices at the border are pinned to their location during subdivision. This way the boundary is interpolated linearly. This mode is typically used for texturing to also map texels at the border of the texture to the mesh. .IP \[bu] 2 -\f[V]RTC_SUBDIVISION_MODE_PIN_ALL\f[R]: All vertices at the border are +\f[CR]RTC_SUBDIVISION_MODE_PIN_ALL\f[R]: All vertices at the border are pinned to their location during subdivision. This way all patches are linearly interpolated. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_SUBDIVISION] diff --git a/man/man3/rtcSetGeometryTessellationRate.3embree4 b/man/man3/rtcSetGeometryTessellationRate.3embree4 index 894ee99fb1..7bda1d436b 100644 --- a/man/man3/rtcSetGeometryTessellationRate.3embree4 +++ b/man/man3/rtcSetGeometryTessellationRate.3embree4 @@ -1,56 +1,34 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTessellationRate" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTessellationRate - sets the tessellation rate of the +.EX +rtcSetGeometryTessellationRate \- sets the tessellation rate of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTessellationRate( RTCGeometry geometry, float tessellationRate ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryTessellationRate\f[R] function sets the -tessellation rate (\f[V]tessellationRate\f[R] argument) for the -specified geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryTessellationRate\f[R] function sets the +tessellation rate (\f[CR]tessellationRate\f[R] argument) for the +specified geometry (\f[CR]geometry\f[R] argument). The tessellation rate can only be set for flat curves and subdivision geometries. -For curves, the tessellation rate specifies the number of ray-facing +For curves, the tessellation rate specifies the number of ray\-facing quads per curve segment. For subdivision surfaces, the tessellation rate specifies the number of quads along each edge. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_CURVE], [RTC_GEOMETRY_TYPE_SUBDIVISION] diff --git a/man/man3/rtcSetGeometryTimeRange.3embree4 b/man/man3/rtcSetGeometryTimeRange.3embree4 index bf6532b493..f84ae25a9a 100644 --- a/man/man3/rtcSetGeometryTimeRange.3embree4 +++ b/man/man3/rtcSetGeometryTimeRange.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTimeRange" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTimeRange - sets the time range for a motion blur geometry -\f[R] -.fi +.EX +rtcSetGeometryTimeRange \- sets the time range for a motion blur geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTimeRange( @@ -34,11 +16,9 @@ void rtcSetGeometryTimeRange( float startTime, float endTime ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryTimeRange\f[R] function sets a time range which +The \f[CR]rtcSetGeometryTimeRange\f[R] function sets a time range which defines the start (and end time) of the first (and last) time step of a motion blur geometry. The time range is defined relative to the camera shutter interval [0,1] @@ -63,13 +43,11 @@ This time range feature will also allow geometries to appear and disappear during the camera shutter time if the specified time range is a sub range of [0,1]. .PP -Please also have a look at the \f[V]rtcSetGeometryTimeStepCount\f[R] +Please also have a look at the \f[CR]rtcSetGeometryTimeStepCount\f[R] function to see how to define the time steps for the specified time range. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryTimeStepCount] diff --git a/man/man3/rtcSetGeometryTimeStepCount.3embree4 b/man/man3/rtcSetGeometryTimeStepCount.3embree4 index 7e4857b603..89f84376fa 100644 --- a/man/man3/rtcSetGeometryTimeStepCount.3embree4 +++ b/man/man3/rtcSetGeometryTimeStepCount.3embree4 @@ -1,69 +1,47 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTimeStepCount" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTimeStepCount - sets the number of time steps of the +.EX +rtcSetGeometryTimeStepCount \- sets the number of time steps of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTimeStepCount( RTCGeometry geometry, unsigned int timeStepCount ); -\f[R] -.fi +.EE .SS DESCRIPTION +The \f[CR]rtcSetGeometryTimeStepCount\f[R] function sets the number of +time steps for multi\-segment motion blur (\f[CR]timeStepCount\f[R] +parameter) of the specified geometry (\f[CR]geometry\f[R] parameter). .PP -The \f[V]rtcSetGeometryTimeStepCount\f[R] function sets the number of -time steps for multi-segment motion blur (\f[V]timeStepCount\f[R] -parameter) of the specified geometry (\f[V]geometry\f[R] parameter). -.PP -For triangle meshes (\f[V]RTC_GEOMETRY_TYPE_TRIANGLE\f[R]), quad meshes -(\f[V]RTC_GEOMETRY_TYPE_QUAD\f[R]), curves -(\f[V]RTC_GEOMETRY_TYPE_CURVE\f[R]), points -(\f[V]RTC_GEOMETRY_TYPE_POINT\f[R]), and subdivision geometries -(\f[V]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R]), the number of time steps +For triangle meshes (\f[CR]RTC_GEOMETRY_TYPE_TRIANGLE\f[R]), quad meshes +(\f[CR]RTC_GEOMETRY_TYPE_QUAD\f[R]), curves +(\f[CR]RTC_GEOMETRY_TYPE_CURVE\f[R]), points +(\f[CR]RTC_GEOMETRY_TYPE_POINT\f[R]), and subdivision geometries +(\f[CR]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R]), the number of time steps directly corresponds to the number of vertex buffer slots available -(\f[V]RTC_BUFFER_TYPE_VERTEX\f[R] buffer type). +(\f[CR]RTC_BUFFER_TYPE_VERTEX\f[R] buffer type). For these geometries, one vertex buffer per time step must be specified -when creating multi-segment motion blur geometries. +when creating multi\-segment motion blur geometries. .PP -For instance geometries (\f[V]RTC_GEOMETRY_TYPE_INSTANCE\f[R]), a +For instance geometries (\f[CR]RTC_GEOMETRY_TYPE_INSTANCE\f[R]), a transformation must be specified for each time step (see -\f[V]rtcSetGeometryTransform\f[R]). +\f[CR]rtcSetGeometryTransform\f[R]). .PP For user geometries, the registered bounding callback function must provide a bounding box per primitive and time step, and the intersection and occlusion callback functions should properly intersect the -motion-blurred geometry at the ray time. +motion\-blurred geometry at the ray time. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcSetGeometryTimeRange] diff --git a/man/man3/rtcSetGeometryTopologyCount.3embree4 b/man/man3/rtcSetGeometryTopologyCount.3embree4 index 4110ec9b33..baf957ad5d 100644 --- a/man/man3/rtcSetGeometryTopologyCount.3embree4 +++ b/man/man3/rtcSetGeometryTopologyCount.3embree4 @@ -1,58 +1,36 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTimeStepCount" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTopologyCount - sets the number of topologies of +.EX +rtcSetGeometryTopologyCount \- sets the number of topologies of a subdivision geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTopologyCount( RTCGeometry geometry, unsigned int topologyCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryTopologyCount\f[R] function sets the number of -topologies (\f[V]topologyCount\f[R] parameter) for the specified -subdivision geometry (\f[V]geometry\f[R] parameter). +The \f[CR]rtcSetGeometryTopologyCount\f[R] function sets the number of +topologies (\f[CR]topologyCount\f[R] parameter) for the specified +subdivision geometry (\f[CR]geometry\f[R] parameter). The number of topologies of a subdivision geometry must be greater or equal to 1. .PP To use multiple topologies, first the number of topologies must be specified, then the individual topologies can be configured using -\f[V]rtcSetGeometrySubdivisionMode\f[R] and by setting an index buffer -(\f[V]RTC_BUFFER_TYPE_INDEX\f[R]) using the topology ID as the buffer +\f[CR]rtcSetGeometrySubdivisionMode\f[R] and by setting an index buffer +(\f[CR]RTC_BUFFER_TYPE_INDEX\f[R]) using the topology ID as the buffer slot. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_SUBDIVISION], [rtcSetGeometrySubdivisionMode] diff --git a/man/man3/rtcSetGeometryTransform.3embree4 b/man/man3/rtcSetGeometryTransform.3embree4 index 8bb9460a8d..35e6c67613 100644 --- a/man/man3/rtcSetGeometryTransform.3embree4 +++ b/man/man3/rtcSetGeometryTransform.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTransform" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTransform - sets the transformation for a particular +.EX +rtcSetGeometryTransform \- sets the transformation for a particular time step of an instance geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTransform( @@ -36,31 +18,27 @@ void rtcSetGeometryTransform( enum RTCFormat format, const float* xfm ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryTransform\f[R] function sets the local-to-world -affine transformation (\f[V]xfm\f[R] parameter) of an instance geometry -(\f[V]geometry\f[R] parameter) for a particular time step -(\f[V]timeStep\f[R] parameter). +The \f[CR]rtcSetGeometryTransform\f[R] function sets the +local\-to\-world affine transformation (\f[CR]xfm\f[R] parameter) of an +instance geometry (\f[CR]geometry\f[R] parameter) for a particular time +step (\f[CR]timeStep\f[R] parameter). The transformation is specified as a 3×4 matrix (3×3 linear transformation plus translation), for which the following formats -(\f[V]format\f[R] parameter) are supported: +(\f[CR]format\f[R] parameter) are supported: .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid -out in row-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_ROW_MAJOR\f[R]: The 3×4 float matrix is laid +out in row\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form. +\f[CR]RTC_FORMAT_FLOAT3X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form. .IP \[bu] 2 -\f[V]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is laid -out in column-major form as a 4×4 homogeneous matrix with the last row -being equal to (0, 0, 0, 1). +\f[CR]RTC_FORMAT_FLOAT4X4_COLUMN_MAJOR\f[R]: The 3×4 float matrix is +laid out in column\-major form as a 4×4 homogeneous matrix with the last +row being equal to (0, 0, 0, 1). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_INSTANCE] diff --git a/man/man3/rtcSetGeometryTransformQuaternion.3embree4 b/man/man3/rtcSetGeometryTransformQuaternion.3embree4 index b0239a5874..1d58b1e6f2 100644 --- a/man/man3/rtcSetGeometryTransformQuaternion.3embree4 +++ b/man/man3/rtcSetGeometryTransformQuaternion.3embree4 @@ -1,34 +1,16 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTransformQuaternion" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryTransformQuaternion - sets the transformation for a particular +.EX +rtcSetGeometryTransformQuaternion \- sets the transformation for a particular time step of an instance geometry as a decomposition of the transformation matrix using quaternions to represent the rotation. -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryTransformQuaternion( @@ -36,14 +18,12 @@ void rtcSetGeometryTransformQuaternion( unsigned int timeStep, const struct RTCQuaternionDecomposition* qd ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryTransformQuaternion\f[R] function sets the -local-to-world affine transformation (\f[V]qd\f[R] parameter) of an -instance geometry (\f[V]geometry\f[R] parameter) for a particular time -step (\f[V]timeStep\f[R] parameter). +The \f[CR]rtcSetGeometryTransformQuaternion\f[R] function sets the +local\-to\-world affine transformation (\f[CR]qd\f[R] parameter) of an +instance geometry (\f[CR]geometry\f[R] parameter) for a particular time +step (\f[CR]timeStep\f[R] parameter). The transformation is specified as a [RTCQuaternionDecomposition], which is a decomposition of an affine transformation that represents the rotational component of an affine transformation as a quaternion. @@ -52,22 +32,20 @@ spherical linear interpolation (such as a turning wheel). .PP For more information about the decomposition see [RTCQuaternionDecomposition]. -The quaternion given in the \f[V]RTCQuaternionDecomposition\f[R] struct +The quaternion given in the \f[CR]RTCQuaternionDecomposition\f[R] struct will be normalized internally. .PP For correct results, the transformation matrices for all time steps must -be set either using \f[V]rtcSetGeometryTransform\f[R] or -\f[V]rtcSetGeometryTransformQuaternion\f[R]. +be set either using \f[CR]rtcSetGeometryTransform\f[R] or +\f[CR]rtcSetGeometryTransformQuaternion\f[R]. Mixing both representations is not allowed. Spherical linear interpolation will be used, iff the transformation -matizes are set with \f[V]rtcSetGeometryTransformQuaternion\f[R]. +matizes are set with \f[CR]rtcSetGeometryTransformQuaternion\f[R]. .PP For an example of this feature see the tutorial [Quaternion Motion Blur]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcInitQuaternionDecomposition], [rtcSetGeometryTransform] diff --git a/man/man3/rtcSetGeometryUserData.3embree4 b/man/man3/rtcSetGeometryUserData.3embree4 index d444bf2f64..99492b723e 100644 --- a/man/man3/rtcSetGeometryUserData.3embree4 +++ b/man/man3/rtcSetGeometryUserData.3embree4 @@ -1,55 +1,33 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryUserData" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryUserData - sets the user-defined data pointer of the +.EX +rtcSetGeometryUserData \- sets the user\-defined data pointer of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryUserData(RTCGeometry geometry, void* userPtr); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryUserData\f[R] function sets the user-defined data -pointer (\f[V]userPtr\f[R] argument) for a geometry (\f[V]geometry\f[R] -argument). +The \f[CR]rtcSetGeometryUserData\f[R] function sets the user\-defined +data pointer (\f[CR]userPtr\f[R] argument) for a geometry +(\f[CR]geometry\f[R] argument). This user data pointer is intended to be pointing to the application\[cq]s representation of the geometry, and is passed to various callback functions. The application can use this pointer inside the callback functions to access its geometry representation. .PP -The \f[V]rtcGetGeometryUserData\f[R] function can be used to query an +The \f[CR]rtcGetGeometryUserData\f[R] function can be used to query an already set user data pointer of a geometry. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetGeometryUserData] diff --git a/man/man3/rtcSetGeometryUserPrimitiveCount.3embree4 b/man/man3/rtcSetGeometryUserPrimitiveCount.3embree4 index ca01a52aa5..7a67e18a3b 100644 --- a/man/man3/rtcSetGeometryUserPrimitiveCount.3embree4 +++ b/man/man3/rtcSetGeometryUserPrimitiveCount.3embree4 @@ -1,50 +1,28 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryUserPrimitiveCount" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryUserPrimitiveCount - sets the number of primitives - of a user-defined geometry -\f[R] -.fi +.EX +rtcSetGeometryUserPrimitiveCount \- sets the number of primitives + of a user\-defined geometry +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryUserPrimitiveCount( RTCGeometry geometry, unsigned int userPrimitiveCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryUserPrimitiveCount\f[R] function sets the number -of user-defined primitives (\f[V]userPrimitiveCount\f[R] parameter) of -the specified user-defined geometry (\f[V]geometry\f[R] parameter). +The \f[CR]rtcSetGeometryUserPrimitiveCount\f[R] function sets the number +of user\-defined primitives (\f[CR]userPrimitiveCount\f[R] parameter) of +the specified user\-defined geometry (\f[CR]geometry\f[R] parameter). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [RTC_GEOMETRY_TYPE_USER] diff --git a/man/man3/rtcSetGeometryVertexAttributeCount.3embree4 b/man/man3/rtcSetGeometryVertexAttributeCount.3embree4 index b66d71a715..8b8cee7736 100644 --- a/man/man3/rtcSetGeometryVertexAttributeCount.3embree4 +++ b/man/man3/rtcSetGeometryVertexAttributeCount.3embree4 @@ -1,58 +1,36 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryTimeStepCount" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryVertexAttributeCount - sets the number of vertex +.EX +rtcSetGeometryVertexAttributeCount \- sets the number of vertex attributes of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryVertexAttributeCount( RTCGeometry geometry, unsigned int vertexAttributeCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryVertexAttributeCount\f[R] function sets the -number of slots (\f[V]vertexAttributeCount\f[R] parameter) for vertex -attribute buffers (\f[V]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R]) that can -be used for the specified geometry (\f[V]geometry\f[R] parameter). +The \f[CR]rtcSetGeometryVertexAttributeCount\f[R] function sets the +number of slots (\f[CR]vertexAttributeCount\f[R] parameter) for vertex +attribute buffers (\f[CR]RTC_BUFFER_TYPE_VERTEX_ATTRIBUTE\f[R]) that can +be used for the specified geometry (\f[CR]geometry\f[R] parameter). .PP This function is supported only for triangle meshes -(\f[V]RTC_GEOMETRY_TYPE_TRIANGLE\f[R]), quad meshes -(\f[V]RTC_GEOMETRY_TYPE_QUAD\f[R]), curves -(\f[V]RTC_GEOMETRY_TYPE_CURVE\f[R]), points -(\f[V]RTC_GEOMETRY_TYPE_POINT\f[R]), and subdivision geometries -(\f[V]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R]). +(\f[CR]RTC_GEOMETRY_TYPE_TRIANGLE\f[R]), quad meshes +(\f[CR]RTC_GEOMETRY_TYPE_QUAD\f[R]), curves +(\f[CR]RTC_GEOMETRY_TYPE_CURVE\f[R]), points +(\f[CR]RTC_GEOMETRY_TYPE_POINT\f[R]), and subdivision geometries +(\f[CR]RTC_GEOMETRY_TYPE_SUBDIVISION\f[R]). .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [RTCBufferType] diff --git a/man/man3/rtcSetGeometryVertexAttributeTopology.3embree4 b/man/man3/rtcSetGeometryVertexAttributeTopology.3embree4 index 99f167d0d5..f5dd25a6e5 100644 --- a/man/man3/rtcSetGeometryVertexAttributeTopology.3embree4 +++ b/man/man3/rtcSetGeometryVertexAttributeTopology.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetGeometryVertexAttributeTopology" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetGeometryVertexAttributeTopology - binds a vertex +.EX +rtcSetGeometryVertexAttributeTopology \- binds a vertex attribute to a topology of the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetGeometryVertexAttributeTopology( @@ -35,32 +17,28 @@ void rtcSetGeometryVertexAttributeTopology( unsigned int vertexAttributeID, unsigned int topologyID ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetGeometryVertexAttributeTopology\f[R] function binds a -vertex attribute buffer slot (\f[V]vertexAttributeID\f[R] argument) to a -topology (\f[V]topologyID\f[R] argument) for the specified subdivision -geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetGeometryVertexAttributeTopology\f[R] function binds a +vertex attribute buffer slot (\f[CR]vertexAttributeID\f[R] argument) to +a topology (\f[CR]topologyID\f[R] argument) for the specified +subdivision geometry (\f[CR]geometry\f[R] argument). Standard vertex buffers are always bound to the default topology (topology 0) and cannot be bound differently. A vertex attribute buffer always uses the topology it is bound to when -used in the \f[V]rtcInterpolate\f[R] and \f[V]rtcInterpolateN\f[R] +used in the \f[CR]rtcInterpolate\f[R] and \f[CR]rtcInterpolateN\f[R] calls. .PP -A topology with ID \f[V]i\f[R] consists of a subdivision mode set -through \f[V]rtcSetGeometrySubdivisionMode\f[R] and the index buffer -bound to the index buffer slot \f[V]i\f[R]. +A topology with ID \f[CR]i\f[R] consists of a subdivision mode set +through \f[CR]rtcSetGeometrySubdivisionMode\f[R] and the index buffer +bound to the index buffer slot \f[CR]i\f[R]. This index buffer can assign indices for each face of the subdivision geometry that are different to the indices of the default topology. These new indices can for example be used to introduce additional borders into the subdivision mesh to map multiple textures onto one subdivision geometry. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometrySubdivisionMode], [rtcInterpolate], [rtcInterpolateN] diff --git a/man/man3/rtcSetNewGeometryBuffer.3embree4 b/man/man3/rtcSetNewGeometryBuffer.3embree4 index b58235c3cd..301b935f69 100644 --- a/man/man3/rtcSetNewGeometryBuffer.3embree4 +++ b/man/man3/rtcSetNewGeometryBuffer.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetNewGeometryBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetNewGeometryBuffer - creates and assigns a new data buffer to +.EX +rtcSetNewGeometryBuffer \- creates and assigns a new data buffer to the geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void* rtcSetNewGeometryBuffer( @@ -38,30 +20,26 @@ void* rtcSetNewGeometryBuffer( size_t byteStride, size_t itemCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetNewGeometryBuffer\f[R] function creates a new data buffer -of specified format (\f[V]format\f[R] argument), byte stride -(\f[V]byteStride\f[R] argument), and number of items -(\f[V]itemCount\f[R] argument), and assigns it to a geometry buffer slot -(\f[V]type\f[R] and \f[V]slot\f[R] argument) of the specified geometry -(\f[V]geometry\f[R] argument). +The \f[CR]rtcSetNewGeometryBuffer\f[R] function creates a new data +buffer of specified format (\f[CR]format\f[R] argument), byte stride +(\f[CR]byteStride\f[R] argument), and number of items +(\f[CR]itemCount\f[R] argument), and assigns it to a geometry buffer +slot (\f[CR]type\f[R] and \f[CR]slot\f[R] argument) of the specified +geometry (\f[CR]geometry\f[R] argument). The buffer data is managed internally and automatically freed when the geometry is destroyed. .PP -The byte stride (\f[V]byteStride\f[R] argument) must be aligned to 4 -bytes; otherwise the \f[V]rtcSetNewGeometryBuffer\f[R] function will +The byte stride (\f[CR]byteStride\f[R] argument) must be aligned to 4 +bytes; otherwise the \f[CR]rtcSetNewGeometryBuffer\f[R] function will fail. .PP -The allocated buffer will be automatically over-allocated slightly when +The allocated buffer will be automatically over\-allocated slightly when used as a vertex buffer, where a requirement is that each buffer element -should be readable using 16-byte SSE load instructions. +should be readable using 16\-byte SSE load instructions. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryBuffer], [rtcSetSharedGeometryBuffer] diff --git a/man/man3/rtcSetSceneBuildQuality.3embree4 b/man/man3/rtcSetSceneBuildQuality.3embree4 index f81800a1bb..0ae35794a7 100644 --- a/man/man3/rtcSetSceneBuildQuality.3embree4 +++ b/man/man3/rtcSetSceneBuildQuality.3embree4 @@ -1,61 +1,41 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetSceneBuildQuality" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetSceneBuildQuality - sets the build quality for +.EX +rtcSetSceneBuildQuality \- sets the build quality for the scene -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetSceneBuildQuality( RTCScene scene, enum RTCBuildQuality quality ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetSceneBuildQuality\f[R] function sets the build quality -(\f[V]quality\f[R] argument) for the specified scene (\f[V]scene\f[R] +The \f[CR]rtcSetSceneBuildQuality\f[R] function sets the build quality +(\f[CR]quality\f[R] argument) for the specified scene (\f[CR]scene\f[R] argument). Possible values for the build quality are: .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_LOW\f[R]: Create lower quality data structures, +\f[CR]RTC_BUILD_QUALITY_LOW\f[R]: Create lower quality data structures, e.g.\ for dynamic scenes. -A two-level spatial index structure is built when enabling this mode, +A two\-level spatial index structure is built when enabling this mode, which supports fast partial scene updates, and allows for setting a -per-geometry build quality through the -\f[V]rtcSetGeometryBuildQuality\f[R] function. +per\-geometry build quality through the +\f[CR]rtcSetGeometryBuildQuality\f[R] function. .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_MEDIUM\f[R]: Default build quality for most +\f[CR]RTC_BUILD_QUALITY_MEDIUM\f[R]: Default build quality for most usages. Gives a good compromise between build and render performance. .IP \[bu] 2 -\f[V]RTC_BUILD_QUALITY_HIGH\f[R]: Create higher quality data structures -for final-frame rendering. +\f[CR]RTC_BUILD_QUALITY_HIGH\f[R]: Create higher quality data structures +for final\-frame rendering. For certain geometry types this enables a spatial split BVH. When high quality mode is enabled, filter callbacks may be invoked multiple times for the same geometry. @@ -63,11 +43,9 @@ multiple times for the same geometry. Selecting a higher build quality results in better rendering performance but slower scene commit times. The default build quality for a scene is -\f[V]RTC_BUILD_QUALITY_MEDIUM\f[R]. +\f[CR]RTC_BUILD_QUALITY_MEDIUM\f[R]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetGeometryBuildQuality] diff --git a/man/man3/rtcSetSceneFlags.3embree4 b/man/man3/rtcSetSceneFlags.3embree4 index 5411f7133e..fc4789e1b3 100644 --- a/man/man3/rtcSetSceneFlags.3embree4 +++ b/man/man3/rtcSetSceneFlags.3embree4 @@ -1,32 +1,14 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetSceneFlags" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetSceneFlags - sets the flags for the scene -\f[R] -.fi +.EX +rtcSetSceneFlags \- sets the flags for the scene +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include enum RTCSceneFlags @@ -39,41 +21,37 @@ enum RTCSceneFlags }; void rtcSetSceneFlags(RTCScene scene, enum RTCSceneFlags flags); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetSceneFlags\f[R] function sets the scene flags -(\f[V]flags\f[R] argument) for the specified scene (\f[V]scene\f[R] +The \f[CR]rtcSetSceneFlags\f[R] function sets the scene flags +(\f[CR]flags\f[R] argument) for the specified scene (\f[CR]scene\f[R] argument). Possible scene flags are: .IP \[bu] 2 -\f[V]RTC_SCENE_FLAG_NONE\f[R]: No flags set. +\f[CR]RTC_SCENE_FLAG_NONE\f[R]: No flags set. .IP \[bu] 2 -\f[V]RTC_SCENE_FLAG_DYNAMIC\f[R]: Provides better build performance for +\f[CR]RTC_SCENE_FLAG_DYNAMIC\f[R]: Provides better build performance for dynamic scenes (but also higher memory consumption). .IP \[bu] 2 -\f[V]RTC_SCENE_FLAG_COMPACT\f[R]: Uses compact acceleration structures +\f[CR]RTC_SCENE_FLAG_COMPACT\f[R]: Uses compact acceleration structures and avoids algorithms that consume much memory. .IP \[bu] 2 -\f[V]RTC_SCENE_FLAG_ROBUST\f[R]: Uses acceleration structures that allow -for robust traversal, and avoids optimizations that reduce arithmetic -accuracy. +\f[CR]RTC_SCENE_FLAG_ROBUST\f[R]: Uses acceleration structures that +allow for robust traversal, and avoids optimizations that reduce +arithmetic accuracy. This mode is typically used for avoiding artifacts caused by rays shooting through edges of neighboring primitives. .IP \[bu] 2 -\f[V]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R]: Enables scene +\f[CR]RTC_SCENE_FLAG_FILTER_FUNCTION_IN_ARGUMENTS\f[R]: Enables scene support for filter functions passed as argument to the traversal functions. See Section [rtcInitIntersectArguments] and [rtcInitOccludedArguments] for more details. .PP -Multiple flags can be enabled using an \f[V]or\f[R] operation, -e.g.\ \f[V]RTC_SCENE_FLAG_COMPACT | RTC_SCENE_FLAG_ROBUST\f[R]. +Multiple flags can be enabled using an \f[CR]or\f[R] operation, +e.g.\ \f[CR]RTC_SCENE_FLAG_COMPACT | RTC_SCENE_FLAG_ROBUST\f[R]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcGetSceneFlags] diff --git a/man/man3/rtcSetSceneProgressMonitorFunction.3embree4 b/man/man3/rtcSetSceneProgressMonitorFunction.3embree4 index 7262cde2b9..903b492644 100644 --- a/man/man3/rtcSetSceneProgressMonitorFunction.3embree4 +++ b/man/man3/rtcSetSceneProgressMonitorFunction.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetSceneProgressMonitorFunction" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetSceneProgressMonitorFunction - registers a callback +.EX +rtcSetSceneProgressMonitorFunction \- registers a callback to track build progress -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include typedef bool (*RTCProgressMonitorFunction)( @@ -40,42 +22,38 @@ void rtcSetSceneProgressMonitorFunction( RTCProgressMonitorFunction progress, void* userPtr ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP Embree supports a progress monitor callback mechanism that can be used to report progress of hierarchy build operations and to cancel build operations. .PP -The \f[V]rtcSetSceneProgressMonitorFunction\f[R] registers a progress -monitor callback function (\f[V]progress\f[R] argument) with payload -(\f[V]userPtr\f[R] argument) for the specified scene (\f[V]scene\f[R] +The \f[CR]rtcSetSceneProgressMonitorFunction\f[R] registers a progress +monitor callback function (\f[CR]progress\f[R] argument) with payload +(\f[CR]userPtr\f[R] argument) for the specified scene (\f[CR]scene\f[R] argument). .PP Only a single callback function can be registered per scene, and further invocations overwrite the previously set callback function. -Passing \f[V]NULL\f[R] as function pointer disables the registered +Passing \f[CR]NULL\f[R] as function pointer disables the registered callback function. .PP Once registered, Embree will invoke the callback function multiple times during hierarchy build operations of the scene, by passing the payload -as set at registration time (\f[V]userPtr\f[R] argument), and a double -in the range [0,1] which estimates the progress of the operation -(\f[V]n\f[R] argument). +as set at registration time (\f[CR]userPtr\f[R] argument), and a double +in the range [0, 1] which estimates the progress of the operation +(\f[CR]n\f[R] argument). The callback function might be called from multiple threads concurrently. .PP -When returning \f[V]true\f[R] from the callback function, Embree will +When returning \f[CR]true\f[R] from the callback function, Embree will continue the build operation normally. -When returning \f[V]false\f[R], Embree will cancel the build operation -with the \f[V]RTC_ERROR_CANCELLED\f[R] error code. +When returning \f[CR]false\f[R], Embree will cancel the build operation +with the \f[CR]RTC_ERROR_CANCELLED\f[R] error code. Issuing multiple cancel requests for the same build operation is allowed. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewScene] diff --git a/man/man3/rtcSetSharedGeometryBuffer.3embree4 b/man/man3/rtcSetSharedGeometryBuffer.3embree4 index 1dfa9c6855..fde5f6ce42 100644 --- a/man/man3/rtcSetSharedGeometryBuffer.3embree4 +++ b/man/man3/rtcSetSharedGeometryBuffer.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcSetSharedGeometryBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcSetSharedGeometryBuffer - assigns a view of a shared data buffer +.EX +rtcSetSharedGeometryBuffer \- assigns a view of a shared data buffer to a geometry -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcSetSharedGeometryBuffer( @@ -40,50 +22,44 @@ void rtcSetSharedGeometryBuffer( size_t byteStride, size_t itemCount ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcSetSharedGeometryBuffer\f[R] function binds a view of a -shared user-managed data buffer (\f[V]ptr\f[R] argument) to a geometry -buffer type and slot (\f[V]type\f[R] and \f[V]slot\f[R] argument) of the -specified geometry (\f[V]geometry\f[R] argument). +The \f[CR]rtcSetSharedGeometryBuffer\f[R] function binds a view of a +shared user\-managed data buffer (\f[CR]ptr\f[R] argument) to a geometry +buffer type and slot (\f[CR]type\f[R] and \f[CR]slot\f[R] argument) of +the specified geometry (\f[CR]geometry\f[R] argument). .PP One can specify the start of the first buffer element in bytes -(\f[V]byteOffset\f[R] argument), the byte stride between individual -buffer elements (\f[V]byteStride\f[R] argument), the format of the -buffer elements (\f[V]format\f[R] argument), and the number of elements -to bind (\f[V]itemCount\f[R]). +(\f[CR]byteOffset\f[R] argument), the byte stride between individual +buffer elements (\f[CR]byteStride\f[R] argument), the format of the +buffer elements (\f[CR]format\f[R] argument), and the number of elements +to bind (\f[CR]itemCount\f[R]). .PP -The start address (\f[V]byteOffset\f[R] argument) and stride -(\f[V]byteStride\f[R] argument) must be both aligned to 4 bytes; -otherwise the \f[V]rtcSetSharedGeometryBuffer\f[R] function will fail. +The start address (\f[CR]byteOffset\f[R] argument) and stride +(\f[CR]byteStride\f[R] argument) must be both aligned to 4 bytes; +otherwise the \f[CR]rtcSetSharedGeometryBuffer\f[R] function will fail. .IP -.nf -\f[C] -\f[R] -.fi +.EX +.EE .PP The buffer data must remain valid for as long as the buffer may be used, and the user is responsible for freeing the buffer data when no longer required. .PP -If using a SYCL Embree device, \f[V]ptr\f[R] must be allocated using +If using a SYCL Embree device, \f[CR]ptr\f[R] must be allocated using SYCL USM shared memory to be accessible on the device. Alternatively the function -\f[V]rtcSetSharedGeometryBufferHostDevice\f[R] can be used to pass an +\f[CR]rtcSetSharedGeometryBufferHostDevice\f[R] can be used to pass an explicitly managed host/device buffer pair. .PP Sharing buffers can significantly reduce the memory required by the application, thus we recommend using this feature. -When enabling the \f[V]RTC_SCENE_FLAG_COMPACT\f[R] scene flag, the +When enabling the \f[CR]RTC_SCENE_FLAG_COMPACT\f[R] scene flag, the spatial index structures index into the vertex buffer, resulting in even higher memory savings. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcSetSharedGeometryBufferHostDevice], [rtcSetGeometryBuffer], [rtcSetNewGeometryBuffer] diff --git a/man/man3/rtcUpdateGeometryBuffer.3embree4 b/man/man3/rtcUpdateGeometryBuffer.3embree4 index a0f1de1aae..93637356fd 100644 --- a/man/man3/rtcUpdateGeometryBuffer.3embree4 +++ b/man/man3/rtcUpdateGeometryBuffer.3embree4 @@ -1,33 +1,15 @@ -.\" Automatically generated by Pandoc 3.1.3 +.\" Automatically generated by Pandoc 3.1.11.1 .\" -.\" Define V font for inline verbatim, using C font in formats -.\" that render this, and otherwise B font. -.ie "\f[CB]x\f[]"x" \{\ -. ftr V B -. ftr VI BI -. ftr VB B -. ftr VBI BI -.\} -.el \{\ -. ftr V CR -. ftr VI CI -. ftr VB CB -. ftr VBI CBI -.\} .TH "rtcUpdateGeometryBuffer" "3" "" "" "Embree Ray Tracing Kernels 4" -.hy .SS NAME .IP -.nf -\f[C] -rtcUpdateGeometryBuffer - marks a buffer view bound to the geometry +.EX +rtcUpdateGeometryBuffer \- marks a buffer view bound to the geometry as modified -\f[R] -.fi +.EE .SS SYNOPSIS .IP -.nf -\f[C] +.EX #include void rtcUpdateGeometryBuffer( @@ -35,24 +17,20 @@ void rtcUpdateGeometryBuffer( enum RTCBufferType type, unsigned int slot ); -\f[R] -.fi +.EE .SS DESCRIPTION -.PP -The \f[V]rtcUpdateGeometryBuffer\f[R] function marks the buffer view -bound to the specified buffer type and slot (\f[V]type\f[R] and -\f[V]slot\f[R] argument) of a geometry (\f[V]geometry\f[R] argument) as -modified. +The \f[CR]rtcUpdateGeometryBuffer\f[R] function marks the buffer view +bound to the specified buffer type and slot (\f[CR]type\f[R] and +\f[CR]slot\f[R] argument) of a geometry (\f[CR]geometry\f[R] argument) +as modified. .PP If a data buffer is changed by the application, the -\f[V]rtcUpdateGeometryBuffer\f[R] call must be invoked for that buffer. +\f[CR]rtcUpdateGeometryBuffer\f[R] call must be invoked for that buffer. Each buffer view assigned to a buffer slot is initially marked as modified, thus this function needs to be called only when doing buffer -modifications after the first \f[V]rtcCommitScene\f[R]. +modifications after the first \f[CR]rtcCommitScene\f[R]. .SS EXIT STATUS -.PP On failure an error code is set that can be queried using -\f[V]rtcGetDeviceError\f[R]. +\f[CR]rtcGetDeviceError\f[R]. .SS SEE ALSO -.PP [rtcNewGeometry], [rtcCommitScene] diff --git a/readme.pdf b/readme.pdf index 16f71fd0bb59d3ea18a86682335496e0c7fc35f3..ab3f538cb0c9e625c6297e6cd65affe3d6cde80b 100644 GIT binary patch delta 169477 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 @tZXa)gTr-nMlNpBO^wAd`T{2^rC-snpFEM0^NX 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 r3 zib*h2N(As}`3zFRQ+T-2&6I$DIKW1TBd4;JaGwQH3Ff4J2E=Y=)bj*l)bX5i zpp5Cyf~XaQ%g;dAPLwVKh@OvEor``PJ)j}qo{ynj8jsPNy5w`{XOR)WQLoJi)d6%$ z*wW2J=j5xe$Y$X4LTd~-VDk*UyO{?FZc}%H`riDO=~*Op(+{A`(}ag$55jDHGIAJjTo~WMa{t4yq4nPdoE< zJj`Tvff@aj)^sx)LVF^#q0*hN#8x($q@0qJF<*mvWP-tNoToL1#J`8|2+=iXVvQVv zBtA>&AlOrMZst`gV`^^Fr8C8UBwbHa4zLyjs7J`=HIpN#dwB(pn{=gIt0qM1J_~Bn zc%3)NG2WcT~!ZIdyXpLC2&p9P4D0mf09cX$^F6 zqDi$&;)n)nx7uPP16MVFE`(96ZO$rHwHsL#6m|n=1Ehr9>#L||mq6SxA5PO-(LT4` z7kN8FUN@~G8)HHD8)H%L_q#k2fCSl=0GI$;?O$9UQU2t4u1!cgX9V6DhE;aKK zrB83xTKq_hW#*Y_G-lmW;TuC9-AJy6(Z+o>thV)(4zE&jX-h@3j+8XDtp`ylCsz`; zYeJ7ZAKMn2zM*l}lKZ&3$OwpSf_p`GQMc57x7*X52$R;fBRxsGEzeFd3+8vggCy=v zSVPApZ4fAPE!$Lo#-z^Qhb)v6$&S`SOhiy|Jr-os2DWX3Z@0G_-AFV~=5MWg@J+c~ z7J7|lg9`>KR9wDntM$AI7h*!8^VdT5kz?Ao$}jQO+Df z(>=8Eb`#{3g@md(NC-{nX;YgkMyPrN1Fe|Tray?#WQERu*_vfgimg8Yn1M`>SE3`U z;$mTT90KW`vR&v;A+|rEs8S*D1pm!0Y8QJ5E^?s^4-;GrR}+h zjch=^Zc&?$8g8FWd*37zG4C}VKoq6ubUl!y13%R`F{Y`lIu+fg5QXX_VK_9ipUm2O zAo%y=d3!&9)5KSp;uW3+D7T^v5M2%wVDd@nnxc|w^TyQzG8P0R35utt1uEW^BEo~# zuTpr>bzQVZj_wr=roB2-^K?NdL_fTu&qmK}Z~C}oZbhDl)(+ob0ZNR0eOdYNMWhm% zHd=>`lXkOV)~*_6t^dfYAl7Ym+qe5}XP<8GP%o{2A%8Wq-8)-dXXO(xpl3nuc1{G}5Dc@vhpdd?aQo z&6Ip8>g|q?y?@YTA8okVy3X9@ka7L9!{E;jgO7C>ba`a@{P{2c0}E1iJC_j?0uzTT zqye`pqyj(E~NK0XR_baG{3Z3=kW?OofB8^;lS&sPkP7w2Jny1M#m1V-XpBESg@ z%XtWlAfUP96(cT5kX*_3*XNub-We&9!qM(3GO*^5Gt*VoRbBUPITst-IF}o74xgoQ z-ZxHdqcPx98lMwBT@!7_r#1=qocbnvJgcE8k)Np%f17zx8j++J#bU$~aUqR(;kd4m zfN#!gBQg34NfL+mp^;+w3|_DR<~)9tz;OW8C5}@^$F~6Z!C{<$zesEYUPuvd@P%A> z-#2On-$H0q6t9Qas0$b)q((L44SdmH@p=?oq|Ct@O@t28HFH4xc}v1Uq!&J%Y~!8d zg=@Sfe_mjYg788c9|6#%fLY^P39py>R%rl=*tsSMXE}!^fK*&$T;M@hqzOuzif@8< z7^fs$6rgEs69R@;ybvPhMr~|D!XzkWEu=y!F>=oMMKE#!;wl+T!;~nVivrFl@Qw~6 zE4Ut2@Gux3J-DdgbmXimSR3&gF0_f+@)tZ@e=zfk=aPV@3U(*0zmz5g{sO+HSR5`~ zlQL#QL2W9^TaXpY=?9myU?vn?&W^8xx!D6>lAQzb0poJCKpuGKL|$P+!BRYoAxa$w zzZS{7C{0mEQI)26!7tG@B`6*SD@)|V5pN|RrI?XY=O;qetysPWVYO8bz*TS;Tu^XR ze{6D95+KS}co*V{|9~f+5UJ7ykreU73zCC-5%Zj?@PiQwI3k(PWsXuHvkH!jvlw3? z@>p$>C}g>=3U?%AQ!mec*XHIj0eK`8^()5 z{Ge?lI^qWjl?Xy`1*{@~;Hs*Uz$@Sv6SxAhaFromlxs;An0tr>7z45O)Jutaf6P-c zB?^D)Xp7Bsdk}dHAXC+IiIsjK(h93GzGV$<` z0Ej`rD3}MxEWUd{l*}dT14k*s=Q0%_v4SXLG>qUO!cwUJJY-l(om0wgsdEb05G&G4 z*@Y736=tI(NR5Yba@JxUQ7W8ue~x!^)vdS-N}VP5JUHPjm7vemyb)4U^*vSqpW_=? zpbh22*#a5&pwvOt1AEA%qqyS=qd+|I2B>lnHa-`t0_R<-@<@sxosfE987xQ1ky??X z6u=CS1qX1vi#Koyg+`m;s4A!&pmrh8fok3H|5fR_s8p$uRsypdg!UqXe=C7D$I&`f zV*y18{Yu3Ry_l$SY1Ig=+B50`N)%QH6i%QKfO_FwTEPU#49Yh$MxcU$De}Ban`I*v zHVqrKQlOfLPy++nCQn;~Wk4ebs(=6c_WNHJUHiw`Y`$)v-u<}dw{Ir1=k4e7<#o6G z!NMNff3$yYpR`~6ApMs=f8w>L?Vsk~&)Y9QS#{&}WIi)ujr{Jj&)V9o9yyGKKtx9mxb)kAO~y61_-pNiYtoANiPps&me0yTwVB@xk7z0Fb|gp z?9TwZXlN-R+$M0%Ycg0PmxmnAAd5GVK9ib4GXO;3rCc6xJOgZvPm@DDHu9VzycQZ@^H&3+=%r{BbWmKW}*SDwSoKf ze75EX*??icYrm#m?XPHCc!lAg^`b;4vfUKTFp`g-#Oj2t8 z&NO1o&d}(=-831dJ3>$7Gz8ISIx!}wt62RmfJW4q#S}LL)n`gEhHR?$q=p_ujIaZ7 z2%^ulV)QTs4E!v#6PycTg6MMq&}V8fsyC^sV}{H`#D)R%f1;czM#Pc$qzXzVYL5ui z@&KUEbtCOVq5EqBTuNesaAg1==S-1>lCg$;&uI9AvEnxX(e6x8ssmUI&_o4} z=>VY56j?~#Fg_z_W<-dJ%Q67yGffuY&(eiQcxxEU5*2lE0MKWeECex(9TDAu9a>S* zGz8UWnhaqDf0i+M4GV(cHo$@)>>dF0nJPnEgd2?4L9H?)l?`Ij0YIOrvLL;$L#k=2 z1H9T`hoJgQnIQ_rI@apJLx(c5gh&5h-K`;=EClt9Y-#x0cTf2D$+Pu(@oC$>eEHIh z7NhaA&dirL?Q}BkW~*-1e)Hsuum1Y9uHZhMqrL&S&#goubt* z|7OZfH8;_m8tK3hr_L~osgPMo@eLyGcPH?2hUMc( zA4hsWBMl?(A4h$7qYe|{(8Y?hc<=>S{d0=Y27V!(0g3M3=IMRpP2bI#T6WWJMDPB3 zfBtedosX{D7qG%cHutaU7xOdRnwOIqo>`e+CyPUGC$P3AbZ=@@$C_M#-w~sKBs3_T zHJ4ZeRQg4Y7RU@McZeMZaFhN=B69pE=$KAscR!o;XlZVKJz<8oaPL^lh?dTtvnJ|e zqGHPq@5HcSXv+={*D2)mFe$kmjpwVMe~-lqiz2ewM+{pIponVW8L?Bgk0l1&Dp@@! z$ckklgv}+%SQl%uQlMhBunMCWhrG|6IY@-CU1bAVHJMNwREB`;4k5=3SxhzJ?OSXZ zNNJ9UV}>XJ>;YqP*}kTMlgvJYVA$cI5sTsCRp@X4xyG>$5n5&zUcD)OlYwy;f6Kz3 zXBb%BXZu4;HH+i$iI2n_;rj{;-^@4ILw&dw{g{=33aEDaL{l95NT61o-XB)m zI214oC_u%rk4>QR*h^H3vEB`kf9HkaV)AHpjD*7V(GnY|yF?QVZNrW&>fIb4o$WdZ z4~iP8O`2L$hK`kNbsN3z2ecr9O7nrSgBaVl;Vb1IQvxF81vT6*8H`-TeaP+z3yIg)A^!Xwxi{Ge=?rJhg;9* z({?`VMvKYSYCW1=kEZx`h4&ZuoUMCB@Z0Ofc(J&`-%(+K3vf%C!mDQc<3ObS=ULvl zqU+I3`y!gd0?a1C7zK_&WV0hHnyjC*!{;&2{5ErHGu+KsU5`lDO9~j^?};*4j`7_s zZjHFYw{-20uVhW8-SP_0e_!3)O|H8ukbJf5e(ILpY}{cw7VYk#Rkyxd9Gf8Vq4s!) zgX)#KGr+I`l%+$P!iPgP0CZRDXH^nz`7naPuKqZ_9X;=^UScI|@7LE(OtoX@DJ>2( zIh*5I{HaZoaAH5K5(0b6V1y(5BQ{EFl>~NOA?oo%R^7I%b~)zdfA^n%{tDMp`F}RZ zTLvfGyx>h7R5!i>X3nw+Ak=DL;ISxR(s#Y~6U{fCM)}V7|DW!+K+F8o;}& zOR2hcyClXz<(|DRwJDwr&1@w%Y~*K&%DrW2>ivX6Z|dbS$5Ksn-yo?G)1LpA4#_ta z%fC#<%lT^l)4F{ze_lMlIY=L{p)gftE}Y`*P2gU%TvJ>3fKgqy5-@A*1ESBsYBhc> zlI{T=wrixCvqS(UeWAK=%Ti)jntMxGtUILqM{oI~xBN`XjH=E4< zHM;uoZZf?-3G%av{kBiTeN$|tF5C&ks+EQhz-y=VE!;P|fAQKm(Q3>L!kS{UAx5;?rlvLp{hJ+dbY)=gD}EN zE!leYbEe*XQLVhzlHn(E>pvl~gIX=zhWM@(e~0_uu9yx>xrlAFZoLFwL7Ic> znfoZfUVNiXI$&!bY`_@s*a=as+f9gt&2B)jtf}x=k1f5MHjbg_O$T<6PEu&1BCcXE zx!Fnf%ci5zZ&9#o(m$|hh!Qaq&K#K{!Z;;m#FE3mNYqv1(3DBElN6jgvRD1O= zz7_Uxf9W!0k3wGy;>}Zcgo$gO6+(f#{A{Z|Nj_q(`x8aDN3ll!CdJFowaNj>0L2cN z4QP7fNo6q52OEmihPpS=bE}+G4C*e)kjR9~Lr%w&4U<&QVt|-8LbtM{Az^M+2)9x2 zJesWzVO2Z@_s9y-T(5iKQu3mQhPkJdNEdgidLDtmf5YzBa62GS?t?3KPi>W`V_F|Z!{>b-cyqM) zW8&6UNX$mp^4KxU#KfSdaP_-dc~n8|S*r=fx~V1(apcT_QLPmcx21T~BYH&d+oty( zjK*1ZHDJpH4@!n>(OqmK|Q6f7Cf! zndjYd)=f|PGNR3f$Ai)oLzhKIQz4I;EQR6aA&ex2j_WR|z@7z(_ogu(gGPEC*8ge6 z+?U47M>{^Ov607wFslJyg9qd=%i-zgUOq^QCk+xlK+%+5;W0i!oK*afxhrn8sHcf; zAUmrj#4;G`;K^OklTwV}LUhP5?g^rI$_} zabGQ6u6s{-=C5bi9UdK3dXlVFTThG;hEufPEU~FPIc31k)X1UaJAX5+k|>IsxYgYLxaph9|LI#W`G0kL z{XKvCC4YVsKh*+Y^S>e3+dqC82LAl*_SbK>pMG|?v?Oo*?c2xg9u{-6X0b7Uef!so zQpzi3Uh^maYV|{#JZ9|rdE9jf>kOU$hy3&VIui4U_74qZ-ovdw;Gq>Q>p;Bak1o^x z{eSK6x4(V+5zN7xC8QpA|IDAXem=j!AGZZk)VKd4O-x*zyZwHH5SK{b{&V~1?bi*} z3ubAg=@M-qtXw`iWO9PbpNyf)6n5~q8|~MpnUXFO1>W!}eB_URq?OQbd6HSFSC+32 zTwNCPw|vwLvw+A;=*c>-jIP_h)7rPXj(?x5TX~x8aF$~P)jD3`8APyr>?0H)_#+XV zcd_2%QQWhx4+Qazo~Q>O0I9HwOj(-bF(%su+Rov;0^Ai&tJ_`cC1oBV$#-c0>4fAT z1)hc_0SrK`dw7fJ+>I~0KLr6jZpX}6F@|*`$FsXL`a@RvLsl{L0=e!}_Rktw$bT6M z#q!Leh((ZmIeO#=d7#YH1dPyUZXrr_10zw+t1AZ`i%b6Jy~%nZZz58&IN^pstDeLF zUnqX>NX`m}xz4AL66oO6ImAw%DOs|mLs~&BX z7W|9w9U@>@Y$z^|wf;6UOUo#|f>bhK>YxJ-96wEeKU9Ps3o`+nI2Y7Jq!T+A>y3 zNW3HA5kifdNg7VpI-whA*=ReG!ZIpU91*fY7lv(2xB0$Cktx4Bql)3)U^(Fkk#C

w;u)D1Q5x3Y5mnVs5LZ;4WmH?w^Y9BK1a~i1+$mn9w75%gcPs7=!70Tx6nA$EPI0$l#ogVVK78BX z^Wy(va&mU(?(Xc~dy>!0++A*CnIkHJJi(1`7+_WHQ^6~Not>|~)vM*~tTXpTJeMQe z**~yz4HHR#dOsN5>_U)wmEI<;z=kn}w?PwWk>b2YH#KD}F)vJ9ku=Y(DwUz#v~~Dk ziUAH|%`E(EeN##NhF}fY@4rUDLABr381=UB*k3|QLBuX*m6oX;V4**GG!R4+CqR@R zreXe>*3tF*csBEzGV#N;nHc3@NSSXR`@yiq+22y>o>5 zouP=io2)QHxaA*{IG?bkBI%sVPGdOJZ|cA{d{ftbXo5g4+_nv&r~!Go@VfGe7Kzz= z4&9^#3CuIw8C&cWd^_FbGdzFwtkJT)wM?6IZtCG#i#ntq*`qWU>=J!cM#NtIzL=c`y82lrjw+fM4m5q;o67@RGrb z4O}lKaQ^MtSI3Bf6HgVcu!5$GH69l3HtINi34WG0v1UcC?XFV_svApf(Z7oJ$Riki z4jq|6da3TsZ}Tiz6SYFWoJFvBzO*?39V%qe>X*6A)It?fHRaR&V?xBkP?6I|VEw3M z-43fzJx^MMtY0X;lH~C|6OE^x9?60yA2$Y_GfM2Ati-=PD=lpfx=JBhCN`0EIhEZ_ zXZ;uvKhJ{wRtO}@^QYY2w`y?;A@uE8i_xceKc7F%ba&CU%ql6yx1%g7I3W;KL%2hg zE_so7b*8CxC*gGHmU|QzN1ZSy>+!nFqp^mT(uS3+soGTT8ws0+@!3z`AJyZ)duAi% zc5!1XtY}Y->4w!4u3n2TSGBXyM!#s+V1up=?~w`K#UG!3B!}2`;3kAIvfStH-G08* zbCAE!07LOIA#4&>6dA)YXXardR9p0Qs^Mt3p-iB2F&&>HWh0b7ED1f=)qd+Zq$I5! z18kU`9)5Al9{p5#)t>$zXnZHZ>bCyL*qRJhM^YwH93|#oBH~2%a%=A$z9oFEztX@E z#<%$$E@gnM#TTW3=__9)isZ&q+3N_P_ESE6S5@QowE!ulZna+IM_bO%4AucQk9wUn zQX$5k64qZ+_G!N$8Cfv(gGeQTuX~HvrJ0jMW3FV#kdYj?xkr1O^c!&Tzzd@VDK^u& zq3b-q?Z<#uhC1TrNlc#78rK*;Ox`g=Ji4#>pNo#qZPRF3GpHf0nA~6zPv@E7*ggI>UoK;5w-iN=~)6?M3lt7^Nqwip<$^LM_p7Efy6jSzA%_oEcaq zQLK(alE2p2u?q{Nlle-}_Vkt}r5lU&_`W)6k*v)x&Y4lTS`w1A{b0#jSEMi*6v9IP zoV+S5%1kNr4#UR7T9unv)q54tXTQ6p|I=#-ZZ)x}6dkENVe_NpB-n`h<{B48*lL{h=c*J`2W@4l6%jq;mL%?tB`4WdDtUPeC*9>tiou_Gxlk!}?TB7D)hP znhDF5`fbO9uw+(9y={X?9b@o2Vn8O}S2v`ORCNz6m5sdN*Iy$fL-k;tWmD~yTnulC zoRw4`)gm<8N_e5RgB1g@PKSn5{u?()r@F=n(33{qVeQksgYw#bm4YCUO0jo{wmg61;YO+{x}(7_!==c*-Xksj5!Aq;V1 zuk2{uz!lwe9Sv*8)~32<`n61>oWSOE@2|r8{5_+pw{XuHc$Ln_%%{R`Bl6OAJtmfK zZ->4yxTFJ9!u->$Y(_<@$aFN*A&Qtjx_jHTV*KXNuNuYXHk$Z+2U;EKKx zq>8FfxAmGuXv{blKs)lccn?Lv#?rAR$+THL*F0%3F*jO=$w)_h#; z-)rBkNO>4hon7lPP_(S*lY5UDR;R6e%`B50=x_6;rqAh*5$MzF3TC|2g5|;@FOBrG zVAgw>gXxhjczU#aSmk+E8SU{JS04=|3oAatg|r~^H7c;&kKU%Ap_)#!uJrihGP*eL zTOa%;quyJPWV7a)3RS#* zw}%Sj7N*W=e7@-H1sVBp;71*qnQyR6Kp?Z)%y1F~LTW*rPY>TKMJcN1H>?i&J~|Rk zmv0n*cdx2m`q^x5sE($vEe?5?7RIaFQd*jvk&gd0-JW znJTt=r<{44XXz4CPNmVtlc4Kf+hZ`+wP#?4g?l8P_4%7eK;{872E$Za5ty zk^eo;lF7y#v6=N@gPk0&)d%dp5L>?Ruh)nHmZ!C04C%U(w6h$fefy19)%DqT)3HOC2%dVpYpiIdH$k8WV> zT_OYAc_}3hu(&t8cJZxgE2I<`K#DAme;12*vUG}Sj7Ym$5~7s45&*n>A4oa6#@Iu}+asmZU3rPZaED3xrzXI2^9x(h6URlS^z(cwF1~PFgW|uY=I|B>e79FHU2VIn_wZ90%=%x@VNYR_T0cSG zgAzQqx5)tX^wVb=*UIBBt^Ggl^U@u&-sD8|+b#Zx-qDh9MjW9Pe(LV~+TxD^C77r*pSy*|+SG+~YSA_n74b2%<7FERZ&b$+?@xvOnw8r*2}=#l z!v`>+z;g0JCYcy$pf{8NdKk#N@9;EGF>1gJGAuW5yrCjBREP}#iwfx^eO37?2uMML zI5;9uL+RuIOK^~L@mFnzF9282e+tylUJbwt;9u#!F2Eb`uk^bS00s#Aik{gT09t6B zIpFrSViJ}HI%y5K0sQOo*a4u5@L$t3Pzz5$HUi}J4;T%UH4tC{|F6T=FaR=q{FgZz z=y5av76GyWLro3ENd}Z4|Lbon7cl-hivR5TT?(*6c~zx`S~mhvQU6_^(F>r4eYFV! z!v~~+9`*wO2yh>GKR~`T0!Y9-|K}awW1ZnBDhb@>OWdX)Ih7>|(WRKO*r%9IEac%E z+bv)+W(~&F01DRA$6XUsHB(asbOQ!YnsQBN^=Zn>o;HUQMpDgIIS&SEg|-bb+Qb0$ zOj$ssi{r6-Z|24&gR-i(o{eSHu;mY72i&E$~9YuM4UG{ltQJi?z6&c#TbU zQ!HA76-nHsrfVr8Lpb%|^^%{eZD-h-ocKDVz>nR!GIdh*j6^<4;mOhvDVe_X7C9{r zmea-(dS5sK)Z1dSr-IymuH8XLRZbj=jf&QvOtmoCx^R(vnlKilJ~c@5R#AvP5+e2< z{i6(Zn_$iPiNRoujR{U_rqYyd2q^FEpD_UXX=P>3oe#(|i=$bF=6Q?CzIal7?4#o$( z82)7B`jUOMFj1^^=5mHKG~U^Jt2~^D`XlA@Wg?i9{55A8NM;W_SwWg)Q;AfX4O!)+ zd*ha_MetUzUcMfx#kS{u_OS^c$WoR18JW7+>5DwV&NqO~I?dhsGqBH-mp@BXblm-$nTYYcAph?>|i ziYNGB&BpbhF#crA;W*3Q_6HGcsFR;Js!zgFI&&bGq6?}3Hl_tkil|Jn^cf5pFj2bH zVX4xeiDJtEuG~Os&lg({CRk3T5J5D92!VQnxIMT+OzfWUy-ILqb|I3Zae}?M%ThKW zDweDWvYT4e7mk+-|6|mTBBkTqVR$o(KiR<55v!arva(2?YkT4Jjk7;x{I&dG$S8IQ z7~j7shZV66R#$0^RU5mB<_|Q&fX34|hMRXjXURD{VKHC*tUuFUA`AhbSRm5$>G?Zs z)ZM8$d@6L+$`?VrshpkvuNqwt#wS~bA>jP$l~nMNrL(l@EPR_1Ju$kyB9dJBB$yTV zCYMX^?VZ9RsJh7ff$lf^V1%CP^^aK#LeJ^FMuRVVFm!Z@g89JbC4qp>7Jx*-=9S1wgP)L4^dL#=wdnNTI#idpa%K+mNX$Zgzpqqv7 zC=TnK@{L(&7=fK>FGghIF-ro?5zNd`Nj(=pjIdsB_=NZIo1R7Ko=~A{VA-Lt2+d)0 zS5QFNA;DT08k#L}E7C=!x;^W_r{5%~>2o2qy;l5vp}7cr#>D&dIMbhzpQg$Z@SD{L z_$IugkcaHnH`XWanJcNa_Zv7tIQ_1W6S|JUG@5d|1>kGE}cH=9- zeYs7Yf;gk>;_2-l?Q*yLoDIh>tOR@BtuLzE>1DLPYz$AiRleNsT+QhJIonmw%+wd; z@9@5U4#)54itKotTh&V!1p7QctdH(5f}hS&SD#<{=fJ!^H)m6sde2wvn;G|yQ>XI! zuUhoGJeeD>=V^EN+?}jn^;Z6QISA$XB-kp?e7*YS@olS*=Erw;K*5|yEd^Xkt2Wv_ z8~=}G8U)##kNLGKRgE|wGo(s3E#z$LLx|t8O?M&EgvJX`D9mq5fveSE8jRW`3=hgV zD+sQ5-IKQ7Ye3_uPS6)wst^hgzjos`c^!C!dK0_Wr3;dfP1dJUyGsBLgJcif({9r> z2-0}TVkAeN-%%^2Wpny_u<NWLYv1(E+DsSe9GD2mvEh2l+zTe zY(BUg{g@d-?2V$3!e&(qA>JLLV&3qJG=V8GjxK2IK#?(wrdd(nk5aTfgVvcKM~e^P zC=@aS!D1oAL@rlO6BfaGUpbLHb8VQDG)^lg)M8KVc~dRG|qDs{|eifsfS=byY<90{?!Zp_y&V13pv$oC>^SatNW z_NDTU@&)N2ZoFoJzX%Vs@>Wd0zo|Sy*Q)6Lp5U0VD!9pRN>{(SMoKp}U(TLC*Td_@ zCa1=Gj7Oj93r=IXNB3+QfiQWtq_Z}W*;<p}&g&Gt=hd4c}X; zEMpq4wZ2OhShq`;bzzl8#JSfFWfWVMaRoEpV8uBhbGO#_X+M6^K)@i4uq!?|Wku*Di4=<5FL)m^f+cm*c5DT)N=ruCisXbzX z0k(419$IY0sTmsiOxsPxz1q{1VhuOa_SI$unIEC~2%eWRlIO(FWC%5y>Sy$0{P02_ z*FdYWMexo=JjX~>K-B0j6k^+WWM?7jPTj8VEVsp4OSe2{7kM(T?e_fuKQP#A(afe` zu7|mTkyFO7Vl*P)#@l%GOpCEb{X~)Q8@P3K9$!-JTBjJV5FTaB^mE;ESs4Svv@O2H zxQ%aHu&-yygHJFqj^d&;8BC&f+Y3wn58p$1{{pBeYJZnmF?+5Nw z^}FdsuSu!j^=~N@P)N-TThmE$@2|W6n0J5L_vd+kppx&`8Zis@y$QzBcXHV?0*R7x zbY^KmYl=xuZhuhTdJ~=h+jT;`uSq+~`pj|PJJij&gYY(VB8nNS%&4RVMs96cAG{kb z4MV=nc0q(JVU;h?`D#m`=G4}LM~PtRwBa|TP~(sVAA!!;;2lpnp&;+6$8iXB^oatU z5?42t3lEtrxb=rYL=<3H-6VAmz7OVf$nwN-;L@YhLxHz%{_uHRy$-eBGjnbo-(VAC zjvJ-1?IV=gRB*a_)F#w#!Mm?qC-0a}PO*AP(ktt#%2p#azV_xqFmsiCE)Oiwqsg&# zdK8{8RH}&w{Np96DmI{WSN1Z1s z1Hw;FaB0{R-39B#Vh|3E%-M5g zEa(yow;^q^U(vac$=>6b_imlqv8kMRCsMqiRN*KVLbfa7DTuZ`zC?X*L6=V}=yk{& z632DuN*AlKr9Yxr^5_9RuqAv={|s~dvym&n5~ps#oTgqwa^;|Mpde6%D7p^QWA39j z^&y9V4F9M38MElR5#;u9_e%A3bJ^e>774+<6TAn>(2rOf?@B`k@H+>=t(tiTTOyrr;anAl zeCGsi<8}o;30w$-W?wp_Z|>K%FUvV8;L}RlK3&BWlM52du>M?Nj2MyF%K-(?=2JjFgw^wQtz6Z!7{THUBhStLY(_kS&zOMx6 z1`jlahfHd}G8-%^Fb^JrX$MCG9l-|L!2g3iJtAN!3M>aN#E|xt9ocAs=7|5;upgM zMjLnpgyrFdRNK)|LlKRDZ7~0M_Rtu(19-iV7J6p^v_t*}u#wKd_kZhYp<6D%t-qyo z&@+Fa0ph=_T*85^$p4H|hX8dzuMN;Z=QDs-NRaCA*P&Y$1KZI4*(BQttV4h}^1Z?} zO(ziYm#ANx?FDZ9&;FwkU>WGY0aHWUrh!g~e`i>21(=TTZvqK+fvpJt4c$QzjvD%S z3S9il)~{dhfU@wgAO4~^HPrSGuo?JoP2_;^w*T;Y9T`6Ae~S61XdujGl<8 zDSXkMQnC30INy3Gq-$zx{0y=Y3@MGN?ryzTf9$t^^sxc_V&058>B``6GCwGFI%q8| z@v5a}ZA%nWIn%;->9x`>LurlbJ+E}rL~5UEVR2DuUHFy1S)$7RscQ5X7QHl8dUHr|Ru-M?suxY&{wf7J+7T7GGT?tu3A;Hp=lWf;S0G z7@s+LexSjkyCv3VvH~rKi7yR6Fqqh*AQ_e0&M#rXmh2Qn8px{)oO?s%Yk=i#d<^c{<0FSfF%!=k zSxv!@lIhe6>%3dBM1jA?wqhf|QM3-)TJs>s7^716L`RHOK{;8l`i7V1k|RXhD}#o$ z>6wq=)C+C(h#@XhmoGFl6ZDKBXf@!HOgfVh+A!}GkbF{a)m29~$$lJ~(9sYch}g^5 zjv=;AAZOEv)Hf-S#s$Ng3adrB_*sMm@iUT3)O#N-o8&0bgfYOC_r zeRNHGz%`zf%BMK?-2i%CXuz2d;~BMLwXFHu?-B#E0)pG)o~Uu3ke9P>V@TNpjQnvb zVif0Eq+*gK-7I75dp*}T5O9g((3lG(?9!dq0-T%eVh9X%xH7;W-Wkcr3|!n-c-&kTfF9`sBBPJU4g&fyjl z?}Lrt!~9|yArL1eCg&Iw2}%?AulqA-S;FMhv#`w-2Ei7|-(cA#Bi@9gwg3T1f|8#N z*gk-YKJLs62uy?Zc->;`8%wg0U?Jf}{RGm>>OsMGIG?5tyM!}Uk<|gsZ)%i?U=fQN z>|rA*oqvLF=C?z^&&M;{mvfb?tu5YvqCd57wygendSHdHuCzW+l|orL*!`Y1x7{Fi zEc)#UhpFS|wWq8dK9}98!|EL`kEO3~EIjSFSQaO&wz`8I?$J*5g#)qRo+ayWne;Et zhzKjM`|(+Quj_ugz|GPOhL;V5%vIg<{#4~zJ1C}Xq|O$ui`yIWQdr3(ohI#Baxyw_ z>E0tP97=I38m*I=+cA(4@j9f2z?I4qATbBf&Oeql*R5CYdq@cveKfsQC zY!<#4S*eT1Ho`>?HMWL9uRAu%r17;;# zLC$KZ;RvgPKYkj2;;lKJE|MAg*740d%z;o$DCZAYOf5t9P<9IOBg2^+CPz4}30l!R zK>Lun7Mc-mgbKHX4OcZ^8vL@`uMjth7@cf8c`%;irw=}_86g8HR9r!NWN^Y{%8^L) z#2UnJ8~m@M`1VO3tGhLHyH^aou}D8rg(XmZ1uJTk;GRHbRTonXvt0sbXRE&nqCc#i z$Hq{DIb3PqjKc#zka2urrmTAiEQ?j3ReP=_Amz7c@f0!X(s)4PKTh!T6t4I*Mbdpp zOS22zD+!D;B+fa+rhvAr_1`4X;B_7_S67fF%lkgO*+P#(+@{i5hs}(rA=IOwMer&P z^t~7fGyILhUW22$GAcK%q;zs^EDFW-jI^Bszizz(#eKkAK8gM0qR>&QX@rRCJC@tk z@Lud~QL-5W+R&v*5wf}gyezi`EzBHTi`=?N?ma|cq0hNX87_4@C8Qn{V(06N)s6nZ zKv*oD6lsq829N*DoAlJF?7aNvk6L~=#*4_#-u`LF#z-7~EFOzsO1sfrq0>kDGrn$a zu!YEx3Dk+`>fI;y@i3c~dWsO#?za#7bpuCm-r00w^xkWS`}Qt#Ot4gM>lo|06r0p< z9mG5-x!Fv?X^aFVXd7ia5cow$Zv_Ght zaqG!0_KC-TC5!O8#4(ws*q@g3KVal-GNmUA&70^_@b2Vk?r(-(Zth|($ba4e&7IFN#=TVb?GmlS`5Jkia3<{hF;-1x{#Lb~}9v|t=+ zWi;uh&r1qx!fP*3_+Btpk8}aSRwMJBz&E^gZuzvUrte`Yh~F4%Ce?q^mt3HEbn5(ux!sU1C(A+t%>?zWwkv>OO&R?euishv$H9A1kBuH~lZw`hvTKr?!jrpb`oP%_?X3kU0-H-TfC(RL#HO;Y zFJ%Ke)D1A^LZ24W4X}oXfywZZAVV+VgvD$}aQvJEcgURams*0AeWs7wUK$q~KRcwFq@@=UjN#ko;$`EG%A8>5<`c+`IAv>Ia1qjzq%`P#>e zhjr!3+N$`$sbL7F~iAc(6~E=6(i|-S9^G zh1UC>SnbrXVU9a*`|iGrl--r;rw&U@K`~w%*W69lxxz$tLrvx5=6u-{Mrbsc_ldN; zc>kJocr>NRGKZ``#de~UOD^yRZkTS_a|uo&uE%OCIdqyE+pV@BaXXc3xz^kF_<(Gn zPZi_&E+|22zVWzz7@Vvkkk_MODoDFlMqf<=Jx!*&;DyyR5`oNsuu6YG;uBDxYu;&Z zUQ2x<&y>tLhEuH(RyNUF=DyI){ejLjuRd6xc02JyYgu)@%@lLh8^}1C7IPI&p096`PozUDpqmDmnKSLdn#9(2#=SPR z`A{(*MUgUdiArRuZkazGD0qV!(nn3a0;uE5sZ~!M?b$we7ksob^*A&hGiq8|25wPy zs8x8(dNIsBf{nMg(fG#Deq%m}vJJ0fvf4Iq(Cd3=9+wp#Sn}6qErM+IDjGQU(Ka5f z%|~O^7k~6#7%$GV_`DW|ANDuY>OSb$?4mu)yJpzz{-2M-^j**0rWM{V>Jr;8La~|+ zwS&KaM3hrwG|}C_u&xtKvgpy$7NI}|2eQHOUsJq-T?x@n;h}-%g0E*qI4}?2N8M~m zNF+VEZst&%?pF2~N7B4`Tn<(eJOlTtUAhw=qdl%NPHzT4sz-p>Fl-RE2oMc4-W8ti ze>A!VhX0K89|-=1F3Iok+K7LFbTA%12}^N`VEL$OYg)hic&c{#Rw+2p{@CKqdYO5BopT6B&k&{mZqq(8nqGm%r#q z10`F4Z%6t|uyEV(m4A_)7CL_dfB!$izrBX1L-?;A@=D7XP}LWBZ6wG$PIy}A90CaK zf0T)g4if%fxY-dK)P?jP)zUzEt!6#|u_{j)DdgAxadqzE#G{ZF43nxF*w3H&=|PYqBi@;{FQ zp9u&Ggk;0NP8hx==n)z6>l&UK%Hs->goUs{Uau-}2Ymtk|F}A-9|#BK9|5aJfTaHC z@92vHas4ltPM!o(Mt<#s8k(F9B7ptpMVQG2G5+T|poP+wf_Rbt`T!uW^_bA41`r7L z-*R;~f{;M}3%FB5uR1^o|C)sS&UiJ8vmd01^x6b9!~zoz1KKqSBKsf1gXTfe07w`5 zE7`X!gDzhEF8`tb)D}qV-?TxMPeE@%{~QMKHy{tdUvC2>$q@kqD)b1l{%;kjp}&9# zqA34t=f^_W|9czIK&6Qga)AH!3dJNxK!W>siwRL8kp0aCpoRw1B8VaWD?NLUAofpH ziyL7X@UKvpAHfXpU$VmA^aC_`ga{C%`x62kfl%}Xuu?pkZHbjvDdJfr0yPf^n125XubN1T-Arw7{D6FyP?`hYnq)fU zB~2VFApWE1%Y;^@wb5}mli)()v&Vd}u~~FSO<4Y+IUtTnsixZG$jDnA{|i0Swb%%Q z48dp9{_`t}a76bUKU1Tl86)8Jhrc zGRBpzW<|^rk|Hh2a?N+FB?iw@Bn14LRgGXj`{ERb4aut`3;AE=&ssp(%b1(T3g6?F ziBG}0Y&C*PdHM4>!5GZig4$zhIfo{~@yW<3qXq9Qr5gynjBvzDpEAE_l`Bt+%gh9b zCw+BGpN=}YE+gh~M{%_LhCJiB*Ad(C(QE-JldEQ7K*fSTU&y1|89OT z8S|=?{W^1k4z|r0wrxBIUH>?wmB!7>J!9YpU zqLCbj(et7cgs%U5Xje%p=>3Z2i=nK4&ikQHSC4l3f40|ic~+nIXWUphjJ`izcb}39 zdfnZb^7`Ci%(Q#o9j8{V2zXx{c62=K97FB&3Ns82eZiL-z1{eC8`Mt*IdXxt3PFMS za_h%da=8a{ta?vKk=_qG*V-@dz>`<_=$XIL(xsiRFuW7!F_R`9c30c(cZSvN^aZ_N z1`E;k+a7ioL&skpLO*pp++FSFPGydd9e0dZM-Kl^$rq|FB)Wlz3(~}79+abbvy1$` zOgO-!%?R9*kF+w@-N4wuPgA8^W$221G%v7+3el3m#q2^tErbZ?+EzvPQ2PYQ=qdkT zm|nam*5$dRFTQaoL_C&SFcW0%WF~Rr+jiw!w^WXPZ<;53%lAq&#oUNO(nczdAtCn) zYW<>njPasp^W4ATMsfl(LfQ1gyax zsAN-sBxUbde(Nbo;JAeQm}DD~r>{>kOdlYA{jKBGg5=UmN^&#n_FDqWaurdP6BT~a zo(j$bXM!`&tS|J$`*9hO~K!KbptxUE0a~ioJBB_z-bp&giD2SeM8a}-F zhSF`s-0DROai#iIlyjz0UV%R3*-16X2DJq!WZRLQ%yUF+?PP~JXEwTxSWXN)3CB7~ z!NcaS!JJbgIGETH=GO>rcaJ5J@8`{0GH?<_=-BL>!`IN=5$;53lP~A4{%E+@)!l+| zvNnY@7-pNuNF_3xTBJsAJ{tV`a&w3|Ycz=_CB)vNtn|o+e|*E?n!VxCcOujKr~El{ zd?i$KzPF`@n~x>k#h(ik6%JLF9x3~hrX z)$MPc*gBGN-Rbl%<-s0AtEpy^s!hS~W|qu07_gqvf-A8~_rpEq4JdA9sjRlql0uEQ z_*lK5&`!CiSJY%JcLhJ#4rl3p&ok*m--FytLHH?hn(&&Z>> z=gk;CxCZx4M>AYzg)dpdmnO&HrXv3w;((i~dhD~LKrY%2D6f}Da0vJLb}e~~qP(^7 z)#bD4O2?JTjjt;Z?+w&5+>0udJvxeNP|FG<2q z`EzdwvD(eOTPx`FMz%@7vpB3bSQ^Zb(l(~J)^@OV+oYcD!g%vlTFs&dp$kqPm7@jT zvC&C9elosO$0qOu-|1Gu*fx@@!t-0>ZF=PU<2p?7#r@YG^rA!YWL~_PWUk*ptw!2t z(57uxG~r_xSKf!#QxXRl0XoT{+(QDb)D~B9xW3v5eB%|RUABI(xz&sHXr{ViyMp;@ z{SJXEe+ZXdwC1J1iqMJiC|7+={Z355@?y%Te)&&Kk;}dEGg#5LWd7%mwM)Aq2l-uB z{rMb=A_qDvhfqK5y0OX&t{mAEw23V{ENSa0|UWDxZRbNu==m{>PJ?g(E!!hPRMS4+fn* zZYg`M>MX^>$MM}q8nU67^r%J}@l6Cw*1XT65VAz z>Mc{2tNS~Xu+4ZBd`Z{&w2U-L>;1t{J-_@p9Q?1#pULQcPq{k9sxbA_6`_h$B9M8S z0XVYqxRuM;e!#u-qz$tZI>a$n;{QM#vM<8guRGtZdEB8r*7RLq-D}8&5)U`lr*Hh4 zO3{dnEW%y^Pu%zEd8BP~kGS1V6|@bBfRaHb4X0$DEhqyYoz*Rrlcj6FPI!e_jZ4Wx zfAy{i0_RebnzVF1u{w;L^m*;rTY7y{id9xK>FcL{{HnS^n&RIyxE>weim%uA2maK% znUJWt;SX#0rNq3+G)WV2bm;y2`-JGmj$YSnc3n3JoUn6}E*+dZ-3W1_T0zh$LT#!+fH<>5@YEgV;VEx=#t6mgLR6OLdls zv{_x`oapD_+47Tjp}2Z=16JVoEU)Y$J7VZvB<*+W#TZ`<03BO<#B5f8j*It98IE7o zk75<*3r(Uu{g?QKby*#>gZU0&n<8EHf|_5C#p$1scWe7>+vPac0rT^7Tn5B{8H5A# znsWUgS#_x*to>ykYG}VcLLmlZ-Iam{nqZHx{J%)^D_ME}gDM^$1epH?U3L8tR9-`| z$uKm~xo`wVw1276bSVfn|KJtcoQ=?o_!^4+o4%b|ir|d$FDlI0i0}a!h6e&;PvQyP z?M9%H`j4kxld`FyoUdmN03kIe@K}&DcBHS+0Bl5*@BbLCHXTtG0L%57IBiej4GqFZ zMEnl@lZ|Kq1BSmm=@*9EFJ%&^oDY%|!W>A@)?dQLlBa^FjA|jremh7M>RKpHp@N?G zu3xGx#&{4pdInh`EmutFI%?EBU7G>zBYOX|&%1rjqpYu9bd^fz{Aw{Dn4f%f#|H^9 z@MA^_sguj>WJ-(WYSi1&)QyD871Ub$Un^U=UqS6a{^G6zlnfO`eAeeU_za6To0i;ZGLuWBUXq?H+ zhRh|`IKSA@@<;(>#<5a9E8l8k>G(7n;tGfDxPa)Ccerf1K28G}H@LN~Cg~f?>60*| z&<%IA*1=ttoyaR{^q}Q8mWfP9_*{WSKl=H`tb;;q`&1;@ZgQIG^X&J5(5Kk|(@uvH zr1h92{x*@Fd+QNIKf^Fp={;MdMcYLOhuHm@B%({l7dnm)mEF#3Gp=+c+vsph#4Kp` zhdkW{tGwb`N-U3WgQC=78ZN8E8jgIl`=}LXtChBezRI}SehQPGM_I0?NeasY7X}~l z{$8Q^n8eDMRaTmDsW`fus>lVV;#p0%B16CWjQ;RtYdI@ESM03}Ow+bsV*0(+`9(am zeYN8rwWc3o0)okkgbNkPN8}9$t5kwzJk&g?|*-AfOR9Qx7Cfz$scp_{`27`iJ}qX&+-l@^f0& zpZ?x1*2h^!d`a~M>FJkczTk@@|0vEAJ$F(;cj>bF&G}#`QU9W_rlRB$IG`)~^_Jvy z_~@3Gq=RKsK9={AvMU^+3@Z#vD_ood+c)>oyL#k9XK2I8?sYpHg94(#LH$F}on!Jn*V_~rJ7dZzhtT)l9B={H-Dbkt%D4p#4O(Y@zv6#X1bRQWh zJX1r;LV&Bd6A(scs;|Ia*&KdY73&wGSl23f{W_u@zyn-HCPUNThq?UhBfQ7 z5bZ`88)od*@{UnJC#_*3lJ0Z#G4~0Y(1{Rlj#R!rlg>987mdzvD1v{RU+d4?kF`am z+kL5bMvY%0?ocRhCA<_ON#-1zs{|UK(|%M=5Di2>rlF_1L*cEVv1cjzPQ3&yG_mpM zkvG@Kk_@-IC>~BCnqL;e?Qc$M-)=`dM*%%N4A3VLBC~RD8+M%|ro1AxZ{D}#!ke8W zol`g5pEccF2dudaH2JixHO7Q#Hm6<86D+nWth((Ze$1zCH%Q*ggQs9uI84VuG(+G=yO}m?;1({qroPfo7`U zewtufL6N#FDT!F#%*bqQA>PF6kC`Ji%`%|6xZiH~Oc%vQgu^31B?VB@`G!Yi;euWd zCF#40k4B3hyK?s&--)j*m5;hXRkz6xtHIJv@;ssuVVyTC@}f5(F8!j_EVBG!QPJHJTVhgeh0WZ{}!nJ{;gZ zn)1(bvL`}SyoeO6^`F;ojWI zlxi&x(@I6CaaJCOm4B{TJ+W0+oHqn~c=7e3Fq@hb(x_}pkU<+xw#PDY5neyod80GH z%tV-bg0#igjfqQGk8gUcGSO64Yf4%E=&`3WgTEBTjIG9m%WT8Z|L$UH&u;hRYc>S8 z`f`3+2YMI|(sMo+@R#|Dqv+tNcJI@n#e5UZI%`-m*LYi?AqyN+0HPSwPC>viv|5kh zZnOEeSzfraLk^ZKhF>E)qRz`tVA|5jbwBK7xS@5@=+CCOOUxWx5q%eG{K5cU*)z^4 z%Vc5mUg-_s-a@|0P1-PY&nVB3`r~;>F7Ej|CyCthUX>lMJTtG2Qu1`9%}K9)B58B9 zrNj15EIg8_t;zomWH+^ikg_6yLRnCep)9B<7o@NvicktB6nR(x7H^sZq?!Q*H#Cd| zrT+< z=YTJ^DAbb5-I9aMKb9^RXw|82CRz*GB0NB2=SWZ10^=6$Ys3v#G9N~2clB8X$UMq-KV|r0eiCd0k!ezwyL}WL z{>5xnSNO=~jU7jWzL9CteDjOooMFIY|MEcLJoWCv&&iGx9T+28)BFGi{UT)QBXO4n za~PbRIf$#?M3q+G9ts&jj4BZ=;E^ubQ?r-=^A0f|^T`+Aa{%iWc8i2_U{51`&CO`& zp58qWa!KWSeJMY$y9Hx9KHuR5=`esMC#hkegdYJ49OgFYz z`I_QBcUDpDVTSZpmiF7dEUlnv0N1rVSZn`cP*HI7h#kZBtm+yXvz1)bbdpj=ZGmtb z=qjrqnvTRWM4JPjM4*TIgCQ{b*DvXar1BKqK2!6zNxo>mY706Yqt;*2u3M{n2Iy&E z2f~^%bUl)F+prRh$N|i#(|GI)Ir1~Oz+3AvJacw;ry?a6Zmtz$Z~7MEVKiK2aQI=W zcKOTQqx~4IIpLJymw7_^Pnfudb*yaGsKqPtIkkR213s`Y>hr}^xckJU-{E<8Y^w7D zx!o`ur5Cw+O5(aC77rZc7piCwrCfsC=9y#y-eBm(T{qHDq|xjb#F_iwqlw^=ogO4; zKMZ4HnI4c%5iiGPN`89_S{G^z0Z&~QVNbhMB{?DdIF|Fwa6>6+R5mAl7?=UE)xg62 zKdRn2JhJDB7mjV)wr$(q*tRvXo!!{lXk%=gjjfGs+s-@t{oUt2@BL$X`su2v^O^4I z>N@9iR|UGCdc+mTWZB^9;~8hlL_w2+{@ju6n00D>L7I`_?5&(0q(B=Q5leVac|r<@ zq<43CjvUnKM0<5Sss_~yh7b=0<!7^{jB z)kt!u+sUg>1%Tq=?aFj34A5jOg4kIcV6b?ACX{Yg$BWq4e@ifkqPDit9Z84+*c8Lp z&$~vZ%B8R<;c+*w;F|R;3!|k?<|pFbAToYP2Bg6gs`dBgsS3Dy@bv$rr(rt1Cr#DD z%UIbJdXlP8AA_hn;LSNpLx*3=6Zqo1*78-L&SDr}vK`NOYb|pi#(NQ)$w*dKO=cvm zfba(pTVcqlUDgZL^t`hMtV3M`2m|y1>_g%eYFrAoSqjs?px=HYN(D#*qv*UCiGpjq zTRlV}I$j-c&G<)HZOMwTp!I7bBcs-Jyo*AdgKmlUURsLx=AfCr$)B}C&+iJGV|9jt z^2P~%ejAaM3&A&iV6C$w?x7q*q}XW~mkj6?WP3VD%MTsDR5|M)Ao@My)dyV`_P6>(OExd zGMg$su>D7YW5J1%&g(jU=vDZH)P@%U)&32D(u_JHJg_f1o-hI6rWSd2pJ9?14p| zqrebis{T}7+I-sw=5t74OrI1Z!v(!bKN2Ie0Ql>xaCO!wE1qRSsGQk%Bk5`in)ex%Hv-b6;gKkf|#RoX5 z^IaCtP3w$uX)!L6rip7LX^f0mw^U2(A1^b5(|a!_&pI0)S&@;gT`6Zj;%)V4kT+@o zxKvn{sx~S|;c@N6-1wfXEmXoSLUMl6(q}##t=bL3aE9$OWkHjLN;Ve{wfJr|S6iJR z_e}7_|3iN1O_rMrmayF#k3|j&3L)sONBTcPDKnZO1eq9ug!H_q(cOLw!tS)o={m~2kyI?FH>&vrb<{d=YQ4SM>~E6ulLw1 zM=eA_wcZNXMH{9aCN#6A^<5iat<{fAPj-J2-AD;uIhju8yk3uOuUAaDZI=Kfq0RE& z<{wDfddVE-Zs{)zr?ilW=$3Zp3+^@Q7pxUy`OH=@NsT&%-3nS0@mKBO_oQHFB{U^` zK)?IKONPXVVM6#!hAyL)L!XLo%|@pm7S1%~Z4ZWPFxFqsRrs9fyWZ2-Y<9oRuXBzu zb4OspGCGESx4%I~CA_&fpoO;EaXqRd*iNp>#8UU0byIG{@LA`oN2_NJyFZxz`b))b)J~eP7LdC-Fk~&lLWT?xcPvX}n@t7s86i!tkRZ z{thL1^%}k=tyKho)@~qh3n{qy9!}@~Gy)ug^7AL?bSqdjh1{FzBv?8q(8IS9O~vKsNe60ff|XA;_g`rkfNdA(_o1!Yus>HSgLn^0#`o!0ulJ=w`4%bT@ z2_Ya2%R#BUC0A1b+==>ggv|;}8sDne2}8#?I(Xa>Fr~;Iafg!g>9FAsm#_{gopT_C z6#45%y9P{+*Ic|cE8X?iJeTn>Nvh$bEK?P6RCvwEUl2iHw3i_>+O`e0#7yibxx}i| z^n-Xx0_e?_q6l70;pb%-cE&O+6ko-@xmC<`n%y!S%`{X1EVE%M`Q31uwRU*sWp9T( zH6T9d^M*IHw&6clwD%a`oR$e??cRpG2gkW+$E8@>t`ttzxMbU@w#|x2k0eDEYC`9J zIx}NWEKRwKL!?JmghpT=PDlITJTnir<3N4Y>Cd zT1MvJZ*`mm%tYqpENUf*Hme5FA~sBW`lwWuK&P0nj#hnLUZ7ATG?p}UadBj6R$55* z(AmWYUN~?bxTMIGtu*8*s1Vn5_EhFiJPLeQLtmWf8k1P#$!n#WX)c7#cyg0a^s5Zv z0IkMPQT1!&9R66mIWV@j_HF)@;Kvx24!$w{)w}H zPeQYE?;A#K=A&R72u!A;do?-etiZLf;&nH;{srC!&?Uk(mM5sY6Ap^c({pKza{*I} zAhxX^Zk|~(o3R#r6@;5eCHC8c%L?36b7&X)6;(?zCS8`2^vjLa0$`N?Ju7OKPh{a_ zau`0u=gF+!cFJ{~gKu?&p+g{=et|*LL|_a>NkAFA;dCl?DbiN5G*1p9*4$^7=2x6Y zt;9`*#EtHBc}Ka#8(w4HFY8T3QIk2OnTOCLUmBWqxRhTZ&wjO*;4$R_%v?30V>Er0R%~3exwTJXfS^dc^wli zi%i-Ddtkz2EMfeqa&sJydeBUYzpOT#DRYGy!5F6HRI_#s=gTG=6-hpSP7>ztcCouCy5Ca3}>U-KN@Q zI9EKI=@7HnE4aM6anl~G{8QcJmbHYJ-6_pg>*=GR zQw3KhSBKM50Mno3rJ}6S0QZBZ)i=QTOwl>~un12Jt?jr-!@G>V30F>uN-bM4VS>IE z@j*}h25Jr{(KD{StO%E^8_IAMONSCM!iZkbI#_s}4^wt5H$wkvN-;~t#Cy^lT|6>O z{l%r}jCfBnga{h>SSnEh-)W2TH?q%94VpT%fwbOcV2m+Ih~81LW0Pa!V0sn#A@)!O zYjr+yAz&k~*sk3y3%oLv2{CxQZYux+MYIT>>IW8}L<%PFG=X!fhC>oR{cogK{6l$H z+*q@q4*d`VSA#Uo!FkPxAb(aM&pe(pNi4vp#lfjUWAWET{;$o(S(R_@GY(;d*_};7 z?y2sm7HwK_F)3Mh&8EChwiDAe5Wkxe(emn9^hc!vbce+kS5B7|AJ+0p6{p*g$MVw1 zupRvYD<-ot(l~z!EIkPO~I)x zx$#Dn|KW$22F%Kxc3T7d<~OyW!e#$mjc@@dsag)}FDr|fxDsmwbyWG~uED_f>xajw zZJWYU-{NC@XkyA>H{6UQ=3oVhhwH;So5Hl?-1NdF(L|K~%Y|C-qoh|B7;3ZYZ`_G% zqYU;kt|$lUREYwkD?+O7-mG|2PYIe-0XFj(;(Pox^gEu(m+wd*NsVR>6r5vr?9q1s z4nG42{cb-pTO6aj%8TIq)bV{j>0Ln;+*XuMc0GW3ymU+O<Zezhz9@}MbX zSP-Be*`;2I11#pH#b! ze7V>znQ!cL#}Hl#Gbm#p&!$3@Iib#!#(Q_f!?XL)GG(sa4QXh3I`=q|d94fav~F!b zz8%{P6$SpOVi72fUTb5*axp1>SQa*7s}03OAatb5UCXKlr)+){ZWx`qJIenASHkpZ z`=5uxDo$Ghot~o!1D_t7Pm2S=#>&Q#PMQi%0O02QfA-{U7}zD^54(Qk8U0C|gJe7R z@`A*Mx@_K&h)Tt20f#_A2=0)VkMoiZ-yib~3^<(^(CI%s7oYPT^iNt=Xa8&9aq8~j zF_~ls{v$JU#d^J(!apLD(xxP{H4}evD&)rcx2`)@Jd3<2g^iZZSiAr^fEh7M7u}_2 zPyCaZ@p3LaL@Q^-_<+GT4OB2O53c5J-D2uDk^yFlRtE3hzI_%ieeo-s8HgZeE%aOc#bbVceMQJ^Yp)Rv^g+?8S zRa2``Z_r557SN?1Jn}+C=_yvQxvsI6w9;{+{?fF+(-%gl`ZF;s?V;}XNZs7YiglHe zITeSdTw%k~GA+P%1*rVcY7|I9^Xq7~z&X55+EILEMEIc%+fd4`6=P}jzA z8U&jllO>SlRp1sv4d{$qjD9iAR60gjztiQAuP$L0&GOe|!4V2p5G|7e^9uFm{qu*k zMXj68Tol?7j#4hwyl8A7*v^1IGVH@a9R^mc6imu;BAcRwy!QtLHoP@D?0rUNG(>-# z-M1zX1*~bQk?GSo7Y2=2x|>)&m@GjfdLumQ&P$3;jYNfdKpC=~VS zQTC(uOlK6Hm8nSc_kxUj#}FoB!f0G%TwL*;X+RSuSsF>4w=Esv9&w5GY{({~sHXAh z_b^hJSW!ofSFy%hlkc>kcFQ8EAWKR~4Ekone5M|6lD?M`t0cs%LxD%5)ktEnu{FcF zMQ8VR*A?g990M9C!hVCmz$qJAp@9FkY0Es|Lb6={zJ{Y@CF8gU(|Zp|ybR*FN+t>n zXh)UB73kW_F%u>@q-Z>V{v$i1e0{(HSArr>X5x!Mk*E(>!PFGn75yWGGvOyp(9X$z z4mLchHt#tVXhe1eB-E1Sa|l`uW7Mw!CijG*-a&EiP#l1w0EMyv_#|9N8+d$_!3cTO zcixju22z-cDQX1sIEX+neT1$%#;9|#VO4x=ooZ;Ql5;WaAUAcPVS*?G{hS)K@| z17%jsYK)_w&y0??92fokNwS>vZu;N9^^VEO;@bj>9u~Cku3EFliPPVf?yh=XJU{>5 zK7G6|OzvLXo;~heT?|*{_q?7GD?P40aa?Yh7Tz21yYTx@SPOsL1oD2Z`F5>L13J5w z_l`RjUYB0BxYw!<9-DWBCa3QJnLSy6kJT1vz}{M5&ez@H&&l^}?2dzjz-C?Uww>kA z6luU$Fl4Q|H5~J1eRAnU#89Ir?ZFVl8x4E@bk6SZB1Q`e`&b$k%lQEDpde_J4^G;i zl3B8Q3%Og(jImyVRE_F>fyK|!@(Nc8(h`$0cj%EG@1jvqtzxCP(&a4Xan_t!d@s>f<5_V&RNthGGy8u##iP{04 z_r*ecwkChQ@%#)41(XZX@F^;V(y34dPkwKvL%pd@{leR1y(7xd9h9XO@;ST998QQA zOroSnKwnPbmZ9lVL=4{ie!3zM?e=``?e_R!bbl?x&nw;Xvc8j(URbBl$mCquq$p~*Jhs`lznXRZ z)-~u}F<@F6znP^F6rj$-9Xw4Sq1~ri^EOO#H*^t_cUFL_6)ti7y$xl*L2ag5NJ(3Y}Hq;}k3K>=LWqI$d@oZU%IyH5tIB0D`7gv>yj`kweRNMIu7NFo@y>cEM?T6k*WSCVpe_mSBajQ+ zqSWzW8qn6sH!!E??m6%*lTGxUS|DAs$G&BJqx&u6UIs~#YK>RI@WfgHhIrcAr?iOi zyr-S^Vw~Da;>u6-?8zg|AYfU9;^-RWKz_t~E64b5K3Y~Q%oyJXw%pt&2@Bnp>)wv}%{p!~7r#o`z_W2f;o|~Z&n#KU4t^zc}wiCd|qS+%v9>3yO_T)lJ zbhm*aGtfXd1~$Jq1a#@@Kcu`Iq)|?O)tuI$RusmiuPujoZf$R*7u=Y(>Q!&)J77C; z|HMQtW%Xu^6+Ym^;2N;@1&*1~+6$W9D z0IeWquI~Pr$9%v6b&D_0}q! z)eqUv>5C9ZJCX9F9F%-qBcYX+pT67@-B`FAD}q#kJ#CI#D#V1jd&N7E-)_x2;QUoN z@-!h&Z+!uc{l#p$al_I_T7KR+l*$isLH^zka@HMQE>%GPzttR3O2jA90fW)OF9v{mGB7cx^KSqID!O+h2!w@Zg)i&Fxn1vl(A-{B zWAA)lPSY1&PZhlem%dt_Jzh3!Tesr75te)McL|j{oV`UU!-g#1CSGfCm$ONNUE?3z6O2S8g?t!E0(#az8&)>A8GmS>RUKRvGehhy0o0Ont+#Q;R`wB$ zkU0P^o9Svqb{k$**$aVBuY=s#oqM$pG8YuExO8^CcUrK4UX&#}l4B}3$N=5+a zDU%(nh?Ct1wMShS+#+!mNOo6?%KKh(_ywnud{FF?QcG{?FU9;t5(GL88Xc13=5Vav z-VTM3Ooo2rVA!=?7Qym3D`5H|0U*K>RcUt5KE-Le3GESy2ILBFD-Q;3aApOVP3eRz zNUP&WIMDIIsT~|pNH~!;%pIU++H?TSAeZ@N9%F*$d_tCl)oCOg=?g39xV@%)!UsNY z?Gq3u2?uh7m{kd6<08*SXcpCu74QsmD$VOa6;k4=ZC2AcDqoP)rf8yGiVG%W;}p+y zXcpQHWhm9cJB9JM~jO?khsPn5)i=NIkhHC zC@(2t70PyebvYUVk6K|`C5q7?5$oX3qbmW&gX zB&ftv?`p98JwHy#lu!wE3LhB`X|*7Uzqx)xiHnM7Nxp=Y)&oDE7n8$rQ<9_O(0T)Nio0zD)9-Al1HrES&<`4?L8h-8RIXLD(7C9H z0EJ1oWrvYE!3E7I0OU%7P+41{2EndkfU%GY1Q8W!NOLZQ_smf>Tp;td05?5b;)#^O znS+fKL&Sr)&LmI;5lE4M?5mPVf$%EvXZa@OR-l1^mGOy!>#4TkW?Dw8!b_wyK@<$j zGV||2K_)B-=Ir^&K0!TE6jOrG=`w<<@F9v%Gu-^;yT9qz1*o5Z$ow6V63LR{0xK`c z2@mTiDS`x{n*Gpswl&i;RsOmBm)1kxX*3l+72nf*iilZ(XZXq1xh|MS*AF+-ZFF^d z1)L3^#TcQ}8 zhC$qmgxTxbBas#u&9D(zq|y!mp3CF?E8Q(ba~MckcEYj^?esGCZMhXQH;eatZN&Pz z&WXJEPrqZFJ6uGbE*l}#`=4(bCnzqphtQ7><{ZLx03iJ(m=WWI06}n%I)vH-r%$9D z2mHdr^001+tcr2KFxEX_!US594^n)XA@fk0r(A^&Qv%w7^ii(_-T=vuaW0%Gk`UuW z4BOW-IsgP;A~H>PUi+xLb}IRTM(Qsm8+HUHlU5T9ArlFF7MYIV=LyenMHmz`kdKosG64Ss?>|N)AZ)ZUkK?9br$!Dv*r8t?-8X!nk>eC5`5fl%S6djlLSDbyaCc0`CKVeqyh4Y8upN> zY#@m6Tw#t_fJegXDFNgfcNt->FCeLEG&UFOWCEc+7l>*U6A$!Rx)!ntUWP9f^8KcwN3n+Kgu$w6KEWLV$`%Pd=x*?pBtlCSx6#J(H@?@9pkoFl6nsMJzD(;x#e#IK0k$7Cl?-nc7PzWfccSjuS zKuSl)^X;U}l#d&t;d(5{gB2@PQ83NztFea-x&wncOXk|jD$Hl5A(XC@p{g$BQjnZB zq)PD8J*kO&KN*={S}w1x2cWifi$2vBv{!wufIkeHp3?c;+C8Hilx_-Y&K$D)7Z-s+ zTVv6T@CY@Eh^LXvWE`a5rh}D1U2UW$VlxW$bJNjLgovnu3ZAWMaiP#qx#crt7aMz^=hc#Fj6A`mg!j(~2YI4ojOWz~3i7?>H1^`>NOWBfUBx&13 z+DbuSu`eIIaa)RRBT@Cr+$A|)ieVhg+EX-NyQFwGqp*x?Q_H~=JP4~m)D4E{dNr)% zATyM(>*abN1r1Z+3YJFIK}*^LHG?vkj4(wi*(rGQ6zIzH1Kc~Y&uL86$1P(g5Pm5cx6 zL?1ee5u7ZtR#)YY8qHYa7bYs9LozHR@}GKfSV%9qICX2`;~m1siPE0CuW*YRqX1%QRTA%d?P98mG z5K``UI1%V+zz@IUgQ2{?%ouUCyESy~gaX=hA-vu-8W3*R`V}yT+ikAMf8J%r{ncbM za_H;}cr@2THZ@e?ZSxs+E9}NZg@0~2;T!aAXcPqHa|{iPx>NC?HKhJxl@>!T z6hwo9*$5q7p`&72c7rlz*)Jxu~t( zeg4zp$z1ibXs+oGQZ2|MbT=<6rVFH3N@9Tm^FiX6O<|;8bs;(Fy4hqh%4Pi{(x89w zp%G7M2DXKoPMgT6s8`7%7?p$0!fgb5C$@QKu+50av%d^Mkx5*Omz~>j{o-CTI!ZZ z9D=)l`#15uVZOsuK0M=7c}_5u z2aRaaB4avMYYclzsN|3i=}9)VzpH<3LjntjpaEfUm_j0qC30|a;xz-V9&O*`&xZ8! zpwKh3;xPqA=IyJuMHem1BvH%_xU>-dRl`9VnDF<=M{Ms*z@8oZZ9AS~_7nd$$9p4p zoi96GHf<$+tmw?bujI#Lc7YgGZi`P@s6!IFGG$+yq~pI$mZs|Q;r{N!^2t)f>_~EB zU(uL_=S^3{>`HQ5aYydbC#pD^wBg)2)87M+bBjl2nZoQcRQ+sB)lckr)y^MNf1p zEk~Dyb;t3IE|UttKSa1ltVO6ie&TRUI!Oc!A$h`E1D%&VR4??$8Mm+J=8i}9&-Bo9*=p+Wo&9bVr7SH!DXn>BQ`pG83VfD>%O$MdGPUN;; z<-v(Z(`o<1%5CJgtdh!;em^BWPQg9UTH9ChF`RT{xZnjq(;4}k#EKl|T*+^8L3E)K zIl%WlkO&SmH0f}`bC4K{s|hM&bHS^IdnH~z5wn*#2yA_alOJk91NKxwW7jpHZjz=5 zGBcRr7l`Hbj1Jn0F4@A_FHsWClI+3hGrb7WoowehlORFT?1Gx7&Pg7h*5b^>q@bO-E*R+bMYZFi=zDvzFpPw8OS!V=Rg^VH-Fmp+)DjK6Dk}|DI`Ur@?3C=0)L94Qx5+?3))wn&Ni>Q>4kz7n z_7mC8;~v{91Ir@i%?K%T$RKs47V@>lu-Kl82ulDY?8h{&F-y5c!p(DOxkYd@ztgN) zBoR;Vzoo=5JN{v7jhSZbNz#93C9b`G&wwKxJDYsBVt0ZM-tz4e(ynC1Vp2$ovlJo= z2(Lfs^Cd82pb(@3YXbL*?oY6c@e)aaARqD_bU5kL-=K2@o}`w2v?wuGSD&}H)V86u zeFy#8y}{k9byv>&k9ZG2ETQdBb#U3_SQkx#!RQkg=IcR@c9~hIHex zeT1N$hX*B+(iN`^#UgVb zt%I! z-PHox;>TEQ+km^tTgNfe-!2-q8@8C}nT9VK4i1_E3_tIPzn+!#Cw9G9zaG-RULKTj zk3+tp-rU%lKMUZSfj4JpuC7&&c{n90JDGavx2#zVA9R$0r8}jCNUkr5o!$VLDAL)a z4^BPTi9m)W+YBQ1ToJnsBlg4`(@8Cll?R%*S@F}+x)ZWJFsKqbJdAgL?^sW`gsLhf zGp9DkeRM=MtDy29w&@PJJXmJ*F3_{lF&Vn3BI|e2<&o_#e0~$*D+wgsQtlmwzaD`$ zjK?fLMb1{Ft%YTy?K^X?i>s!_2-gTd2NvsCotk-^-r6YkdNnoB74OFMNWX&+9U z;ZIwAn_;->8D7K{O^F=}*4R3+0d=I}fhF3qMvY7_U1oOuxaJ7MEq*WH=T|Sg>lU@I zogn_F?TD|apONQFWvnE(myfp34pmzbjJ%^Gc&#?Dx{3hrc!|Dr+cj7R^#eI!AzN^V zx~mT+*5OhNNC#GBcBmcXUp5EWO?DAaYOq+BHEMyyd<_lT|0z!O_yW)q^`^HWJM;!f znhh9D>i`u7$;Ng6D>m*U6d41-sUqi@bI#hX&+Im!jPC54I1@H^+f{`{TRkOJL-SWL zB@qK{wX->&D-0YKw|}-ssruciyU`K7&(}QKU#oZQmW!qb4gxt}F{Kd$PwfbrpP7tm zHH5rdj2zgAd^lwzRh{0>k%~84RtTjo0B4hC>D)KvFMR9U+Nth13$;`yER{xuGbS26 zVuj-UYu#=A<&JMj1Y$iZn@Y}4=<6TNkd@s-s(`yxbzzU^(OMq7TSJrm>%R`I7r>(N z;#$4hWZx<9c51-wnYQN99a!+VKA*Hqdjg9|&u7|2p4--Y`r|3y;eEePfMsg$LY3ms zAbs2}P<`TVO*9i8I`}pXzeFd~&0O=UWW}5xY*SS9yU0ipv};wOIBcnIm#PT0$DMlj zlU~E`cycjPO2Ovvv8lz833JiF;S^WAE=wQnY0K0~`n!Md5XF`(AVYT_*Pa)CWQUD@4b6jTwyRivBQ4bnbFB4*p3t&dLHHL51uC{q{i1%BzjlGV_ zy3imh->o?CL=1(tnN#7{s~hC0i?+y5yr4>y(ryqV(p8%!lp!1J_Zo~gncKkxM9lLV zu?bBO%eX9bjbI#Z>UT4Y_5zRr8uvfoQO)^PB;1JRmk=2f<(#5aQL1(!#7R>1&?zE# zgG3o%HuE|K@Fk-FX;LyH-QUMAj}5L|Q(nqzy|wGP%x*`alSxuH@DXBogUr@&HtW02 zfqPhycW+RESGC|jDxm6oeP)aZpEuK6!7FMAh*Ccf{)6&!89bi!k{GgY zW*gJ;Bd#V;YDso8W_a4F^$pG(q+G^r4Rr8x8e$Rvq z;9C33&3?g;F5Rh^G;-bk*h<+#FzGt4OptOU4|n~G_1-8+WRuxo06?5~7r1is%kJJ| zliS^Sle-CK6I$?odH72)(aPHB-7e^|jIq2g|hYz4d`O5fN9c%dlj z@0?~d2H=Q3*tu2tc1!2uzTP#RRn>={$!)7(1DrwZ3gh?in!-Ji?46NU+ipaKtn+b* zosao@Yao!+u(Cjq0(Oae3*C(SL2~!-D8f8}7e-n2a%MDFP2|+Yd-d0c+EF^sKoW@9Sv%{8F3oKJUNoU~^sht5TYoN~=I{*q1%c$rz#+@C z%zBepoCuCj5Kc(29Ki$xgyDIl)Kwq>AE_w>^NS@UB4rw;c@HzgvlHyE zoFM+q3f1e{eWlgZ+LV_^XBtG+u<|td6m`u3!}fQ#Xxfh)@8OsD-rtPI2rWZ&UP3h3 zRqHR?`qi#Sq3-p3E<(ooUY@M+z25cFpjKu-hB2eC(TTK;4Hce4AWjFvm}LNFW4X=U zshtgH`lu@0RO=1fj`k_;A!Bv2bFfVPRI=0~2&q5@^z%m@YcL~vZbqcJ3?&8lH6=DF zg35Z?p(u66vPYBe_qFVno_RSOyv2Ic4-#IU&*p2V@N_1}16`qe++3r)E-=GDSqZz# z6ej~Wc#XLMNvR5h*lj`yfa468tL=gW#S|rirFz-9XmNfnSw0t(Vf&+iohN-jveqt5 zBB$fZ>>y&SnIP9FkJ-AkD57>VVnpSpc8c$Wb_!ofq13P8L1$8#K`Z4`yxafv}-U_#v3Q$01;!a1J5E3K$T-T z!H=qWqO4AP!2>_+%i)KH_;F+2nC4=15C8(M%tb2qcoEc2qdI^c10pxY$gc*PXTMl~ zwLfY}=;ZdV$~RnJ46AE~wXaDiFY64P1Ai3xclmfIBC~ypbn@L=kVE(JMJI zxx46x7T5}`gwd?D*0)xL6;#59!0p-519h!jZ>J1WbiunpS5$>F&t5F;ypd4xGEU-u z@|Er3y?#VH?9}v$!cx)?Q@~Vewe5(gH0uF`;|iQ0H2DqR7CjGBFWv>pHDByQ-va{q zd%EiGyxYU`@2(hLDFSNY!4US`EQ#<*di4&F=67H(MNo`?DG|W@9-S&uhN){O>17eJ zI{X6)Rt<}cgkr4d?JR^1!Fa!ao?O0_rOw0RpKxXu#iDO#BnX_D>L%F1d9{i#jmrh5aeE2I@c9 z4F$=o6txiX^WLxxAyT%T5W1q|%|i7AoeMxC@+w8n$-mY1D=+?zamCA7kt-b@&*q$w z+J@4)WT+|wlSA!n{qdgw2cQ6d=!Gz;N_ae2U}s(u&d31bwOQ${OAdjC^#5`!#Yx3T z#z2!*D5A-`-_Th?CeM3gHty2bbB*HN9B8jqh%A!ekLZ*bKl@e#S^UKpy&)TRTbEKfl@)>LG~zAnZmyOYKA>Fg}u05Jd(^ za^7}KsY}761mJh@^TMf`b$9eX=d8S_)4zs1iJ}_zVI&3R9>pb5zMUpeJ#B1|?G0V8 zjt?{t2B81#OY97xB{|_!#!Ys4%7rUSx{FZ5A_A3P@=>ET1~$_{G8okUc>43L^Obsg zg|GHgbn3hjx&LSl+U~>q!oV-N@diMa?(2|$k=!%Abv^;`<1g;cxqBjHMr~RMPYvSA zQ-_loVnT-ob6|5JnHgf2s$&WG2}fJvN#fDHGW@*iqeM%B%U>%dM~HSa0}{L7GX$e+ zyHz13$5|xHzyYcSq>l`?1NF)4hOWf8YQbj=Mz_I_}4vba>eZ zQ>_=xGh2t)dbvU@X1z7BDE0sXNR&NLNm(NO$L8@L+Z2o{@TzyHl*jec4sZD7R_<1KD?KTL1trVPf=Oy|cI1>K? zkRh^V*)Rm+T<8XQySFOYtYT+S26TGS2LQxoyG1J{M~+|2WhKfQ_&&rEK({_vl?;|v zb7xx;WOXKB1DvB*z+ibBvaBb=V(2{lRKUg5)O5`~{Z5Wd3vd)J5tS0~&`)z>WcBr` zt9W6>**t9Lb<9ug3}Sn-;dvG$tBE7HE3n_+$cElPtge}b2E&^m~o%7O9soD zqV^$=;@aZXrc?6Vh*jj);mfB;GyadQ)Ge@Dqj!$C78K5#>xfeX*WlCS-M_vqFiq`) zq4f1dKGtxr-@(=24>}(Jd+pQSH%(S^g+WFMvuGO3=^Q5{OaF(Jk68kaN9rhC22}ny zwHlS7@JfS>5@!+17<~Bn-}EWIlPd`_b2p5}nDG`G#S`6oQKG!)OLc~3&$vz`Uf1`j1Qu!C@6rhmXuCM;D}RVBqiWg zH%frhNAg)$=Akj^)OToCiBK)^?NC)-R|k%yF&Y5EW*8{}chrecVGNsV6^BCk#--)Q z_=ARROTg5BYGMOCVb+IK?LX{vKS=A+%+#iIdt8g<^PR71%3E_?k-7SIb)Gsf`$hu{nd`XiqVhs5GNRBpTyV)f6? zc{)2taYTnx)uGl((($yH1MQrFfQ3e#{U3Fyk&vG6jfJqmi@Tj`L0HPPm>34vW~Fd3 zOy006q79JDpmZ`V+ms?vnZWt*Y-6-FJ@BGylhcENcf=e%q(zwQP}nnhb(BmkJZ&)W zQl(P=03a9G-@bWz`6kHQaEC4^oG2P$ZxU4C0rXy9Ea8T@2nbbUe86|n!FlH&fA>?tnMmwsm8Y&&k7@`c7=+pJ}iHIurybRVB-Cl#Xx+nN=RCIfV8D}r4gJd2`oPFFyH_PUry)dd+9{v4Ql?r5L3_D6%C?x}dQy`T0R-8v)& zumGMPrY@|Om)t&cIr9myng&fovznv_= zXmsWsiZ_!9J3 zqrX6x#0RKQ!RZ{6Akcwuk2VO7?@&BVK+G(5EzcG_K+H!!7D1p5=bE5+uEpzs)jZDs z`M@J(f%Q2Y8MVql3-b_dv%_dO+XUrwQ{n<*{1e9pu%EtT?_!AjZ&6-Ba#BPaM{>F` zE%ES<)h7Sd|Ly&qZhu1PizTQ%0Mc66sJ)iieaI*S!0G9%I0d(AO8+-FLe_9)htF`P z35jC>cq7qI;Xu%OQIM5`*)*st`fudC2&}gu72OJgiGw+nIljxTW;B>@A=QlPirz`a zqyzr*2AqzwGg^uh_f`o52$pE&A1_Ln_BR@M{y(nXDyXig=@tzT+=Dv=2=4CgPH;Bv z?k*cA1Shz&ad&rjcXxMpIDFrK|Ehb=OV?ag>tWWaRdaOD(LIK;nUSvTvZNh`ZbTjB z(QZt{Uw))vzs6rwdR^LL0ufnLl~3O98PRiPnURYF&1dQUY>ugun1#>($;6wGvi;Rr z>HI>ZR)&n>?buM;P&h+CQ~wP4Dz>@cH2XoSs;Fy613b?wh#RKm2Y@ z3QQ#j(fJNweSHK%d}184>@fH*q% z{Bx4)Aabt+KmUd&iA4wFe$*(H{FLCCM^m$FSP|DLA* zQ}x6NNDCVBTCFK}%gi4&`)U?GQL=wh7ngD}eE)jfgvrM{Fj&pr)S^LyU@a5V3V9?c zZlGl&@h79Ih5j^@Sn8~@G)>-#a@(~aNah%MB#}A{UA9QNaJx;WeuChaOnJs8LIu!9 zL{}>OP}Fuf+mnJk93CHD8fy_M)Z)G$5%m2=NYxW-WzAmFesu?uI-lC`i^!zN^Zat& z)^(694smhOh`MqQCIBIMWD)>47uL<2^)q4H?*JIvUPzIW)piU*W#H}VJIsokPicn?P6eAyc!sM9C#)9Lo zRRlHuB|ag>?|47`%69JnNOGM+Mx~LsKZ(OlbT@*RsQCsWoz~%#Si!J$`fGn9Q{rru@|4Ij6Ro*Y%LE6@!yFLmlKow#Dk{E* zUF43(*NET>p}wv>&M?B;+lY^`Dev?TDqu~n$VSnGSVD+NJS6Zjt{BT>13n|9-$fjcHlRUSMmhZ**{>|< zpP~j%y^OhH{wsj8jG1GU(=-3o8|F4PW4CSM?v7-PX!}5Gz zc8Ay{{mZhJya1L|iWVL5o;*4Y-HK&ciMmPdM|5t69!qrKjTo?I${mnLta;^QjRsQC z1O&NJRWu8M`)v9=o)h`LJSud)z3n#&e7HV>@nNgICF>eAf*5PM#J+%kj0geaX z0mhZ(8GgE0N*R!Y_PUllm7dl?I`b)dy9DzVyFyEtkiZXstcjq0j~8N`fqnCu^>KZR zHO}7lN8J9dRDhRzA<~><&kAWTsW~@Z|Av!Sn$tZ(C!d2Cs`3XCA&(v`bSH#vxtYva z4~pS1#Wo2p??C+zM8aLIFsNt;IXvwagV6l0D0q&|ke*;t5*NUmkMnm~h zLwO<*AUKMBg6Xw@UCw?@n>%kLiTl4{@S0LbAVpw5A@gHwBrz+M40hz=`mRUsQS_Y(;44QU*{*|9lQ)2xdQ0-aJYd^dK>maek@im5Z6p; zqUduoE_)(-K>-oRERs(f&7<0k21L#!&c*{a%v9oWo;}%Y6bczq2QPwsitm*O8<xi<8J(6T`qjdiZp8LtMij<~#WNopy7-=XYOR-*ry+kKPqn z=rDuxpuoNfw;rJpL=oPjUu%aUK+bM52lsUQ80;l^PDuo73Vc?mhFKoZ!tUGbLt8Aq zMl@OOYr5Y2YP-P(?8V6Kng0eJL|u5#3s=;*0e!2pl>vLr|AvU+uNA_`e;%6#>{EQ0 z149zDL!{Sll=h|SBCBqO**z$-q8nDrTXlxKP1g4|i=XL$e%hUW+N8F$@=@YVn)pIB zzy29eto=8PWPmmyn(o67@adkJKWth zqkCx70Q22Fbel~^#fm2Zciw})$zwJdc*WwM$#_Lmw8xAz+WUCH`zbak6yL;$A8&`Y zJT?TQ(gX;p`OpyQ`gt#`xDHSeug8XR{R-XAs=8ua4PdI#6%sOW$}zpzS+wW|TukeB za$?PtEZ(EY4^M~psmUT-c-5jzX)~!aDxGJHfRZ-}@}3A%ILtbP2 z4%ZH_z;j+&6MObx!TmE$zcVmwn6eomi<7rxO(%!>Lf+sp=&7{eQc1|^#yor@}`g*U{f|uV9$nx=H-%3?n>?d&xr8{#}A`e|7hs;YAOCC_R4A1*~IYF*?&t~CJA_o zwucX(aj>p1aq>PUXxs#p!E{Mh!XI2Q=Dehigi6g|JDA^rzUNNyN|B^JM^=CIk(hB6 zLeKWt2$7bDN;kSLo73-}_nCu2Huk<}193h7LHG^)CgE|93>9X-vgAmu^c^tI8uV-L z93Umt2G&odoxRNqUsb!Q!*>rZ=+L=h@mZYzmSQejRaVSODV!W*@%ZuX6nQP*_T;p4 zex9;4na;rRVq3Z|?LBk2XEph;`bOnT^jr6fA2k6^nNzsIc)^K0B`jY zEonYwly#JnKWc42$;Z6ESEIf|=m4lwz?3&5o zTq-@L@bMsRG_q%vmiZP?&t$%gu8Z#-;Px-qA=SHs|HYSHnfZC%Bh80}SMZ&8b$e>A zqe3GK?FTC6qmfEYxyzwOLTS-6FxM+<)pbp`Z5uqpwlcr+2DO2fV)0A}RWhkgIzyVF z;Pljbb#x2xly5#4p8`ub{Y4RiMrEJO(zzuS0mpQ#O7MI3+yhR;qhW zueD%(yH3e?-&#e8P*RP5eiM3Psea8}I>G7g zTiigZwxV^|vk5V?V$#hE%OL0w`-}ls*uF%u-v3&`!FBA*&}gm9^YrEQiOZK)jk8igr5<-v<#40XT2=093HQPRM zNg|`zhAPuck#1Dm)GqLBGaIQO;gOQ4*HAs2QM$hqZaN^qROo>uh&?~K{vb=L>a!8@(-=$i7fha zg+0;yl`m{P)2S75g+0qdi5ZJ)o#O8D9|yOt^Fu4gC88|LZXx%je=;f&?CW$49j%UDwKIbh(@@HquS#h-zN1gR?=1zQM05 zt}I&CK8T>>nzGE`-2Br@B$7fW3hjcL&5W7b{F8GqATa5Ey*nJRzbVCrm$mnMetrWt zE7ubJNr#W#b9p1nS%#V?E5li2EltL1N-nYZqVZr4h^X^j{J#YV1PdGMf7%CyfJ|KM z%>VzwBSBNfm97-=+zg#908UsSSzJqMV+3JCn&EbGgR{DHE1;6c%pmAPTR7gzvVBCg z{xsileqraYr-e&%Rj^NM9yd(8-j0xTdmg#eQljrXJ?Bv{S#LK99Z7kBN_7>c?`R@O%1IzJ(oly>LcyDJ@xf%tJ&45pnoMJy$nBUq;RFJ68X zMJQI9+Bxhgdndh4NcFq@ku3swyv$D3T#in4p@|{^4S@;_aEkE)Qf*AIN1N%uKL_j9 z0qMI{Ae?SeHFzlLmd18E1zBqVZoWM-JM`=sOxyRjBCaBzbQwaW3;$Hv0vgUA1qR4- zzq5ZNDRnxQQ@M0<;BDC)bjwczTv0dz3fMF7ayz?eC31|bvTqkN1r zRNH!vS9{z;U{#5%eO&I(Ud}+1B*0se+oDCvc~2G0&rZg)yI_Z z$ffsZG-Jn=xB#kqQXN39`*vvTrs^=o1)gV~-6UM@O=lSGZDE*S?pM3@{ z6elsZE>J(W(n1hyVuWYykx0VGGQoVuneTq3iS2V$U_%J`vZ0EmL)aOCa8v!+DKwTP zweZyZfw`kg5cPQK_V9FJ_x{P?N#aL2%jk)E;CO=H$VtiAf2dAH%Tkwvv&&Ak`_WuQ zF_ZsAyxQY(uC-hfu|zEXWlk&xnmb>hd*}L(rlXPc5RF$2E<)Jxl?No%} zAw9*lZzCO(jGTu>M{xu6Y#H`gd(AkuvK z#BS~1=XO=8a?=L$2NUi(U;Im<8dkv^+X6Y}uo`!iVs|r72xG()1|?-jf91hl9g| zF@7F#0xCM+?=L@}4l!II!~-_lKHjqgfS+%RdLMp+b~RcXl$W2e1cF|%1}hm^#sI2w zIf>~t$sT#`i-1)p8Xf6oC3Wp%`%@@5{`|+~rlx5@{(Oaz-|)VTJvuL=cT!Cr8!uF= zC&QPjP0efhHo;c4t(W<^%0#}EGt*VJR@$yx7xd5lNPh?-^p?s8Aeayz$M;g#f%A_u zn^IOomrRcEJV(v@zVKM`NrmZys1@PPpmyFV-8+ey&TD+S>j!s9JLqGYM|4*%j}6fY zrONxRah~f>l{y|-SLos2;$;v2jJ=#G$nPn=CI+i}(8gaI%QKw}T;t9ht6s3=uKV#_ ztQHugZ~Idz+EY3((&^;W+t0X0f#|S841b|Zv%V+!2Iy1{(zn=m=G5EQ%8X>bu0vwk z0>s@K=^EWzM>lTVq5;j}Yjh23*s^w&tE)L*vLFh}pu=QBkqViq>=%QkH;_kT1I9;3 zGUhh6<>jCA{u@`X>GSe6OYQZ`Ai9?83wK#+{9XmcG?(1QwFB+-SroQYplOeCW6QO2 z^C`cP`vh-Do){;6vjiF-sM8>-*m1G^g2wvFQANZYo}j)=U$QKr>pGIDX(X~Le5 zbpCKziKqwb0>&ei{U6;aT{HRazRP0o{Z)%~+TJxgU20(v!*3Rg7)jYix2HI{cmt>))VvyFS9lSm23;vt7d=Fw>pk)_Xm(Qbm9t z?trFtf4xI1?|C|3)5*tVi7Yxb`n<7}Abk0?k3Kefd2_XJl5U=~LGLjr;+F7l^R2K?_wgs-ch-5& zX>n7~=K$AJ`62WP&^jgX1;dd?pfm{?@Xw?~pl0kDDW=>)a5AH&-X;X}Kt#o1HL2is z`%RUJ^P$pBl+V{()7opDH{7y6dumVSzWNPo-aT4Cd_~MNM>;#AtE3(nFQCZOCDS}tElroj28hTg z@0c6K>_~8s4++d|2R=l#){O~y-@7h%)|rfBbH_#0O@_+-0Q<%t@0 zHm^r>HVQ?GZ3Qt6@?wXJ^B3I{eh+!>_7}xbk^$f?jNM~yQ#5A*{K{kcH~{9se#hSV zjtjc%(TCe>R>0l!$YSjRQCkdXGtUsG_Xa`)r@J4A!TQP!q^wJrW2BfgC7);TJ!UUd%1Io6xN~<*q6l zCQ25oB#z53t;p4rR|Nz3E(}zqOi9V+zlDd%cpxE~JDKyB7|U+^-KJzRBZMb~OV%of zd(-v&hgkoljqumM5M{3QXniVT`X*X_j`0L3hz2GoVeMpK57{hxLGu_z2J6ADvw^AU z%z;JBmO(kMl9B|O*^yx2jgnd7)-Gc@6dl2sgV>+)9|JPg(gIL*%MrjlwY=R3XkDx2WlkSlTnV70)G2a5GtaC~-iF?PH84C1c>CWaBw7fK2NHcxTSF zL8qr(Qr{-a9A_{hIt{2W?fT^9DCVkyJ5mqfv@R#XI^zN1SeG@{%s{&g0>5LUjB#>J zXU#(PKhkM&Ii#p0f%`ztNGYo`)_+j#f%yYvwa5G)1iB_OQ1VO`N1|uKJphsBX&=rb zO1=ZtoxUDfNf7r z6Tx~SHrN*P_%{QJtOo*&2HUr^{BX61LtKPtrd67V2&RIzKKtA#{)6PSetORBSi3Ov z@RGgu*<_x z`4KcwKZsvE(8nIO4*fZ6-7X2H$_EB>Gu5TTFaR-$l^>i>t+X;WzCj$9N-O&scB2i8 zuXhln0|Kge1WBBV?Ll5z$x6_jYqt9Ht+3#umDah3@GRjyUCrn=RN}OW(_`@uYz#Nz zz2P>S!{d#YoAZLI>5`Ic>BALzCt-Xt}%dVuiNQ+V6u@ao@ zJ%%;@r_KB8+XjUpVH}e!8Q!{&IojLfjM8VQ9dm^zrl3lYPo46u5^L=_+tpxk9gzJ> z9k}hjP2J81H+U+KQ@L#Q5wc$5a53AU7yIH0r_ZCaq^5VYod$PXEjCb5)9bqA9wlD3 z+7p1kN_fI!eaj&}gOOr)KPeFobmZgP1Y;PDbY8CC9BQO(mA^_mv%>o8J!+41d^Xv0 zedEpi2BkM}g;+u0@VqScSq3>wcYyVQ2=s;bw0$gKBWSA!-B1$P&F4Ru9gpfJwBUqY zKJUxPtUj64XXz4Udum@d76Fv6D*!c1;#`FjR7XptofnTa;*uAejMi=Y$}0HoiACKzF>5 zQA1ZRO#o&s1|geFy+l(X*0fm@w`qv!fP2$ z?`LDrux~TFyxe8SW*I1{r~=f!`V855==!c1>=pTY^Lmc$-(;mK$GZ2Tw@)Xl@`n8> zcivO^hpC`#TJhXkho5LU-tu)A@IY>{s3W0OXMEs+y!K)tSnV+`t2MGA128^57o!uO z+807of05pfgYh?MGD&H*fT30KN`St>v>la7UY|?z{;l2Uh+XAGJIxrcWR3prRQpY} z`dB^b!3*}-T{kavpC@4P-Cl>IB5lf+eDVC(%o`nWvEPyHv`ym!o-~yk?DT(VK9>K| ze8Nd;NsuVO1Wl>9J$8gI4EFSwwFY!-|2v2M)bHW=+)OzNqo*U4UCg1O3|K-V&P%Lb zSYTJxOq-A!tf4zFEk9;o{Po)z4daLRKNMwz)sfEXVos^*Vj3y$pUZfe0eKxMkWw1X z{MdPwbF3VTVlzu^9QJaX-c*xibo}v#s8k+3w9=WtY8Ohjz`qxYOn8{Nw___%#@n)+ zP@-EA*15BI7I-H9tPK{zaW=KH;auBA4ug&PYnnFNu{_muOF;z7c~bVJM*Gd7xi))* z&TwyNBdFEg?O_;i^YXfytl_9CQ04#BQB8FaRm8HZp>=a-;d8J87nk76w%8v8U7%V? zK|72<2(Oq!QWrt*x_IcQs(5I4!#rO5yTlum09$=L7}7C#<>tm@&JzOMJmC$P6Tz(; zR26X|%5GA!N%Op(7cNI+0q;J-Jlbp_f2uO5dJ<6TmSQl=c!U?{T8jg6P{R%Wk|@r) zpM`ypN<~4;O4#obQF&DXXM4LT`#!;P6LBFRBbg@45@ucWpW5$t&>FBFehL}BvQUF& zuiL^`&^1+tWEB4R8It4QSu=B0*UiB&T!>*0UnDFe75$YEf>4izCOzE8c%e%*)H$J} zV97>=O^)$l4~Z~fcB#S=i zfN(5wi0{we2$r@w`etaQbyyb5(=d%htpJyw&g`_0#3og2u=hWdukh!J5s(Z`{+&zt z!KB^Afz|fM({2AHkVavYk)_Y;!Ta5c0+h0|Rt5p`lLW&W`}IjJGp)fzn;0joDd_Lw z#s}F-F-@DGdXbz^F*W*&nqjXaV46{@X&$G@9FV*wO3Y!Zd1$-16!}hnm~2Irba9;p z*K}@GNjxC-bp@t~7YaVkiCPa*CvOh4r*KzskU78+kn*VSZb-_4AaAQsT=*@zfx^qL zXHsIUHRGr*ne7gcd1YlXd1LAz*y%sN!VH~{6J5fx%md{Jq>zSFg^q-4=)s<2D`vtJ}Tk)c}2BG)UG9Yv0Pg4s>LuZL)}869lWl-E&0@4(R#&_F*~$ezWn%1 z%QvuMFq!L|?WI>)lvB(bLVi%T)=}*GRv}#Px;!Z4gs#+j%rCKDp?zR0rdZ#9A+djY zYO5#ws}v!;>6j4b~Hjf=3HI+HNg+I zPVo=sIwQcewrvf7ot}oQntQc*{(w%MsbfCitLqa{TH`Yv*K$eNXg8*pUd^j2USy9{ zTMBZh%Z^gh=54EbYUYY=I0=ZK*?~(GDNAiJ<;y_lc#FA?+FIRnY|nM*9u;zM=|;}D zEaJy_)?s0Yzs4m4hOhcGb>=>DcWo z)H{EWc1XA8_I1lW;Xre^wy_gcfOuZHQg(VfE*@u$8au<)_#*vt)7Q+F18sYJ#t0C1 zem{9P;Ei=+|1@K3`co;~KxFrqhXJa{Y{Ojb7845~se1JQT-bN@*HBrsWEga5eb~P} zTG_0XaXHt?49vSC2A|L6+f7e#3%KL?>Wmrfe-rj!0H_T+u@tQZ7JdY z<&O5|`|Uf>DoBNrPrB2?wXFaM@^mg2OCp^uI*&6P3OCem=}^<@vz(VJ6Xow@RR^6f zQ=d-0$9}Sw_IYw8Mp@ovmDjk>XW?1%zxFEh+re~1lGa*+HI77 z0<^p}GwvyU$3d-UN=JM?WY;ec`>GA)4%nL)J$&NciwgU?ZT+yH?b;Lh${QH;_vdTA z{@Ao_xhbvtDP+t_#cFk*5qfasIc^ z<@n$0YsUYpZze%QChqJP%GxVBx4*29zm@yG!V?rj+wFVCFsFE(yI}zb0jrqFd$_Qr zarx*=!LT-l!T9v!e_d(TW>lcikcbt z8hqmF_p>qJ@SC*44nFYn?{)gD0lH?fEx}B3oQdSFC7BN7|z`?d$J@=qxP=WgECVgq?B1fiI0@VZg?D$ zz$6;()>*kR(X(xe;~b<)P40OyZ#o)}*h!d$A@1~2@hIa}NswU7JU=rg{hQGHFNjx2Wfngc=!)Q$)IIeB#G|W5mgiNT#7Dx za*V@xRAcN6V6}uLkz-(FOjTemCRC+>UVw=C}sacYpt`%ZPJ;6(!dlA6db_M zVJAUCzF1%exA-q^F2_0QAc>kF^qfChMO5g~BMUowMO;_eLgx_3__Av0EE@`acr>mo z4f#jb<7G8Rq~b>N*iI^%m^fa5NLwiK+Bp(L8Y-hoLrBCA;ZTOA65#9o<5#2Syju_d zJle$P;UuQcmXA_-zI;Y&9_{ ztUY15Zzjxu18?5~Y<=Y&TY(h=N|w3TaT^>*hlzt}4@$fJ!wgmK%xA2b zDe93%r4Fd;!AZaSb7zz`g?(*$P9xL9@E+rM6J{04M!aR%32n?OCu<;dDo)6~j9e1h z_f}mZ%nooKXmMs&QnDhuP9JI*TCxn)oEK;5ue>X6AzujT*LCrAU$y@l&G3q4P6O>S ze6|N$tqCVFKlBf?4#KoH7jKmXl+OTX{2WA-x^Leq77fjs4x#Ejke`q$f6HgoNRBR@d(HH7SB{x|0 zt~{vsG9PprKlNm!7TPS?In6rC0fAtb1XtGx(T}^D9KZdxIZjyGo{Aq3>*)$N7PWYHvibJf&p%6BygH_9A6ly07G5tj21eViiURcr^*Ig> zKlajEvo9sQUDko3O-TZ}{GQ_?HXH`7=U&s#1B1xJoTqH6cai-KZpQJA{AqbB&ZDBs z4sM&{eoC30O?M1X@9%}dl&y>ComK6D=a3m&CnCO`wR#doF>;ikPI67*0=N1_oBCku ztPYx{OtEATWVpi5|O=;%v#%b~Q|2j7ZP1!uY7gw?7p@Z)<(ExY?hf z=-Fb)!!~BR^NW)J)i3jY(1Dl^GS7D=&%<3~eSyWaGtcEF?B10=A>Nxet2`o|*pFDt zjmc(nZnSRQ35AnKm6KY$V&|`knxK%?zE-@aTJP=I7v3v|wnleT*wrzxPq3{tp~e5j zWzPTNa#G(b!G9~>L~=HSHK)J4{?)&b7xm|-qVevG2H(T%rv+HfrPV(n#SAqKq!v&< zioE!4Nce6H9E-dJr1|S4_+FmectkO3l#yW%r3LaZ%2bB(4f2n2L^{E9sMHZY`+?Ld zd`&x{^CK8MylxeJ+w@&MM2GyvzM`0aM^H`Ck5QMPfv9SpIYk6wcw(;T$>2(S(s-tK zxt0Y((YO#*1og`~1+J|AIB@Au(ZRr#P(Fev%!}(>?Onnq-J`t5+(&sO{5ZPbA-ODX z!6-bA>eBuca0=YC=&<-jh^~^kZZHTzJw6EJyvj%0@EgJqEr}L59BGhjPmq;4{yqz+ z&ZyZ4EYfQzGiEoAoJq41oRA4FxQL!k9 z5A5-m2|uA?OCQUA&mW-0YuF-A@Rx102NN$92OiA@k|g>^jECU+#XpXWM>#7_Lg1J+ zA)Z!GZnNeMe8-f&&N7gudVs9KRQ|^JOxvqRSEqpY!1V465IdeyeVZ=f{gYG5MWQ|4n6 zvTfq8%s1!b1>TkPQ;(qs57z+NwQy6y;hdrCdIjTl-G`AZF85aG5?(LD-#Y)h)%+k zNf6>dmG-zR^}##yoI&Ug*Wt(wz+ZCgN-~&i3FTfvu_z<^I4?mX9uVab=-C((04Ho1 z$FT*>UTe0M@aB6>*Kn){CV5gz5l>%>2p@KNOQ1i*P4BTsxR@or$xxCZ>#*8a=Y;$8 z5FRZ3FoytylTHaW|9UbMO1=&c3_<%AJXi!qY>jTczi7S%Wo#B2sP|+TYE&y)k`T>| zh%G`zi|FdW;#=L40$|!PqfDn{2aZHriSbL5YIK_8RMkI|uioc{c- zZFncpJ>GW&91xlxeE(?y;<19Sj#gS4(CkkP2mkGjV+RG5pafM{!iZA^ReWU5tMSjF zQ;~+Y^OF2a<>dPHs~eU3F9p7iSI^3q!pqb3qupkHwk>c36;~sY?-L$N2bi}?CDxhL zid{}e@{e#I^;>k(+SZ-+i+NXZgPD(W82Y^?5k}@4NRPs!KFuq++s$DiXw^f7VIJ+J zH}_+YFl-zNIE~!s{1+qT!P$Z40e=N&H5tPZtn&!ZX0>-RR&Q&3mg)fI*=1JAb$CBu zz0qLSO6@J+_=rwQ{;7(~0;u}C?QU3-gDbG1`WhkE&g|KdRosmFaM%Xuc($fn#dL@U zGp2B5sck zcS!?lI5%2YT^o3_j>SH1y(5wFK0NYzy>E{8`=Jw}4ZuA*se5RYhYFU`VV7tvP+u9$ zZ}#1}2e;*m%lsWa=RKPTvMz{v>FB0g+ESLHU-Gefj^H1!gCv-vR`nrcS&%8YM!5W$ zlu{3pk-z?{9lNBE55ytJW9et%9&%Fl5X}PUO*74{uwB`ht%C!j@wY~?9#>o+Te{$1 zoM|RcX8Y+*aB{r*D~=Ki=yn3SPHU6#@5vm(u@&xVymW_#dTL)1De1~@Z8IdFMSZs| z!aGVS!p+_VlWxYJ=_snhUot@}yfLP5fCtvOmrO&37k8U{pmOGY($%;zGMf(jA;Wg5 z(}8%+OIdWG)(ng9_AA!F&9{`E)ugjtV$SW`wNVQGsYgDlSJ!U``|nO@yIg$z8+$Vf zyFHYPVAvm+tc0({NoXxLho04qUF%+!6rYwnt*88COr0=z!j8-n4UMfY+FO4Ce68kp zh@|6Q?5%f?z+zd_0w_eoOnKkMM!WvC5p6S`38Zxd=(a(60@?%Ulz{zkAp8Ad)!kzc zC|kOLY22#SwKKU^3}<2TaK+5ojK5vH1PgP?<}xuzQ+vju{ zOCZ8Mi>|Q)Z+RBp*S|B`IjrpznPXLe)RE;ybOP%RI5X1U0_kh&ILbib=1JImu^e@o z0yt~e-ZE>bBj5~omF&b(cgxxS#M1J8;u7iAtKuj)?a6j(j@S`ku?)l2!-s2j&HwE0uWRO_F|3H*+Njv`oJOKMEHzc_X!pPbXM(n|U5DJe z*>N3HP$0~^fqIwkz;vE<-Nu4%QDNM57w=?Rg#_fLE0|xtKr&eIthD;&GSU|}WpC=q z?0Bp$VYwu_FPPoG=BuVz+ugsUy@7mM<3GRkHOc(X=*m~;7}tLwUKq&1`hUsIC1|e3 z;WeWAOsa29dk)dkM`|ZXtJa_|OB;Lbs-|;R@G8!gjRncr#sY?4Uelo%c)r0XdQRa6 zW?sy$bFLrd)Vl~t8q|>)#7`}VZ6gS1qe_|2$Wy+}F39B2Vv6JD1RSbg<$;H5DAmB= z`V;YL183WIgGgxe2BJ7-`Wde%Xy8%)NN4R8cu@Iuit=W;5#%2T0fSXK*<0EtyK!1}5<;J~U_$yIC7hv#DHdfS-s zSxJaZtZNVudYjqdE>S7cco~O&jdl?~OcIlf>|l&XkNl(yAy7_NI_s_p++DiWs0IcB zsG&cr0xA@sg{Q8(f1>Lz-^OAGgeZvm;Zd7Uuyl8JsVGW<;84tW{(yE={aAk#CU02; z0bAXpe^+8hTKtr{_Ck@I#NXzV|Gp6jW`Z5ro$%$Jhk-#SlarGY{+-<%pVuko5j-~^ zZPxnlCs{7KM?cOCEHBecjR(I_f2iCT{%Bjhcfhx9Y6ptxiRwpOOQg^;y4OS5nn5r6 zTy7Som#5pHp9=eOjG~IW()o3AA_(YF*3><;psFRwOj6>cqxNx2fR^|Ix3_RL>I%Jl3oZ}cDD?9+}vo1BfdbRqb2 zU-S3^RZEP6q+g{&{F;ucu&S9Yka0(tPC-3?X*5Z`&zK7?&1#TH_nwhe7@uj{S{Fk| zmnBOE9f%airMT2p8ncpv_!JDHWq?@L0T`um7`mwcR=VNbR20!$qTWR?o6Uax?Wu7J z>%Z!ENMezM^~jLNXvtJq0d-AjHYp3judp!PP`lVR#3dg!(MiZBi~pdy0V6|B4*PXH zkgP^lhG1b5tQz}DWM6JtgB$AGekm8F-K5~9q>)tS*Kl+s%Ysk0)O)#&feyq$L+WVi zGqV@u9EY~cKA6(;fTY6tMbqL}%dLd2{&m;VkFnc!fbrAKKTUw+8#-kt^rANi@`ClW@C7m7%(0otvkQlCFM->32W-u{#7aSgxA<0b??`;dZj_Tg*x&Z3{y|^{c0-95@fuK`JFz?a-&|Fl z)#@^5c44};)oeXM$C}mYt{+H1GxJ4NyP)z0x36p=lgi2|_+@8HaNC@qB#AG7G| zmAC?V`o&t>QtNT*>wGDuGEt%fFiHIng)2Q`pA}LjwlPA{>SY-T-1pig8jx;!Vn(G}w&7h<SLig-KSufLqX zoa}R~I&^54sY4X>P)ug(=uEQjS~h+L$1?%(KbOvdB6PH$`xon``2AplV``WE;rEst zX_u+rUhuo_P2ZY6n_c0|WSaB_#xd3U9>dRV+n?9^82KWY{}eXvo|nfznJ3uB&!ByT z7XxR<^V7FAWrm)f`98M62)r2@p>dqsR|RTm%Xhbz1x9t!KlxiXBh!2m_2}4F*Nx`v zOjiesDs{_2yy45}_aOgo9c`_Qn)dD{)jNxw2dkvp`t6zwb&U}14)}3 ziJI2GXM^9(Y=+Wq-}Wy4QO?24pqD*rHeNrp%{yx_EVw;})04|}zXe_!K~V)-&I4^{ z8;+M7QfxL);Pvof?z?K_w@c-(cS4sx#XBHuv4{xSeehR%i+h&5K86mVmdE0)L+gl! zF$;`qkA?xT#nh1r}&b#MTbm_4yVm!Dm9x&55J3{}d`W8ta%o~Qqp;Qv8-EOc28q`3? zC5RMJf2`_tU>%pBPFCu1pc*1~a}12EY*mj~XzfE^5S8#6s}gFfW^#NgsscSu5`jMN zYGY=%o6|11vCE(-5w#5;k?ZBv2)eF%=DL4^NTYnq8p8c4xAe+O&kI>Zq^U)?XaR^!alD@pl zWnx1T!a`ix7>!-1F!d|>*x!T*i768-O)ydhTgNU{a!w@GmnSCvFlJyK?8p(y2ASGa zaZv3Vm~)w%@;?_^tc)!G$#%bFmKiy}Cbj?L7|8hlOlqfV+pRUl4Q@XEzPe5iO(~MZ zVCd@p7DYg@A;(O(I((teh<&#t{WIOQaXJam@lK_?a$J)Ks$pQyRlA*(c?aedIm)j3 zS;kx7m1j!@t68*&L#h;1SL>^;K55v))ki^AmJMjYjHI|DvyK?GfdjL_2fT>Yk{NIy zV`R#~BaeMm^cnl&RHs&)$EgIJE%lw#DgNAddzx)dmA z&o@|<6$z^tJFFY@8E|jvf7NeuH7elIGfcHI+OvU%p*RfKW%eI)JH%K9B z2OrH87EQfyT9SqFi-Efk`TQXetz-;Z@=Rrhm!nk*EL*tdhX;<}5||BGnyj+EE>MQk zuP;)crg93i{#iJDEvq4^@8aIajVQ0t<&ty|M7ykuZg-A!v^j}|*jF5UDQcc5@SPIm zOxpPylE8yLZXG?SEgSj|AFF5-IxXQB}$8h8Qz(M%yGUjFER zC6^Sl#5fhZl$an%#Lq=w>bFmP5gkF8(tj^NQYYYunN|cWx-|S0|FWJEQ(kD1} zn`6X6$>S>_DL?%IPJs$5izX39k`4Sjuclm>C;KG6+{9EA-vv|dMxBsRUyc|ImbV)n zT~rR5NCpFC02YFRAr%eC!wicZfeaU`w_lv+l&{wZ18cISPteBg6&em^PwWx5LeEl) zHo~L~okuJZcP6kWq6LwYR4ohz5vEVTaV7JM76&PF>R1_??XwW>$xGZJ>Aulz= zmC6`EfJOEvo+iHmJy}-8Ze9^SU{Dt6!wH`zJ`S{9Fqwl1TBZb7b# z=ux7R#4(_xIhv2$$RGYiU-?cBN40^#Bb>d2IIp0ko+}vQA2}G6GLlcGw)hoju0IYe zqFytIn+q*fL@ngj(zN3?ol=#)Y(Dt8%{5uRfIstaNnR=@qe@Ak-N zNE7;qLwF>~5Ee0p_FA4CwdhYo%h2-lgBPFpvqi*ms|+ZB+)>nTl6A%SlLE_dmxj~t zQpt;w9lB0{ja#e6mfc+KOvj%O+owO~6!&uvjj89E4~>lgo6ZfrUj2^?zm~7}!&LLs zNV(SaLl4`I+gl_iSuE%)TC{fjmy3L`)8qFR3s`c`#`B< zuhvry!ctSggnHSL*fHJ4U7np<<>3V?z6T-xs zb>SAdp}^4j;M=+(+Xza^d9W-nVW4*O(i+)lNfq&<4+hjYnDgB1K~hE&Bos2OPgqaH z2#k^3Kb6gn-?n3T>tS!uh0+2Rwl5CESdvq3XXlBBYqRM9VDPyTU3Js@akXIoX2%dN zMGFEL0plA9{L+7_)XGjU$iqfxA~3f^&BJ)y4^=O0XIw%hVg(Oo54^hb?d^KA?bUo7 zIIAI3w19%!f-^dv93H)F0uI4WbLK1cxr>Pj2b+b@sw;Z-Y}a0um_`M|O#jHwCc5kR z?HVa3CutmUo)Iq`cB9rc!T&2>m_<1al&Z!~{>$rS zZ-s-wuEy`{{OD;C6R@TGUEA*a@;cm<0|7s6V3=3)w9%P(N;VzS69(4?CG3 zPh^Ni8dYws*X!-)cJsOSy0_B0kbp{!AQEDEo=|#SvkiYojxxw-gjE%(_vv->Xr>L2 z1q(C$%h*Eyc=bBGRHRNbH^}IPrLofC;qB{u`{?3DqytM73Oe-s;swao)ysb8ucpo) zVoXY7Eb!{s@u`{ZNtQIil3F)&s?~>7rvV*e^lxJ9)~h|2{AYp9tIgLQQZXsHX@SkL zUOzn?sirG@#*9j%Jpy#I(Q#b1KRyLWrdeQyBh1SmLN)=s_m!6> zE8JgpwtJyU#sxr3`*drZU)DHD2BGT2)k9JcXvMfyG}}r03qfHGr5icFQW`>Gn>pA> zIQ49AGL#_Nk<}4_!^hYPI|fWQVw+CY+GR^s!)Do-DOBuFpa!O+AHGdF0`$$WWvcW&;u zx;rP6jcATwS(_Yo+3$87XFhz4AMJnUROD`(Yr}G+?2g3j9vMA&eq3Lj<|VqgIvbNc zYK{;@CQc}f_@vZ{5>B2N(`073ZvdUMgGnY8O=zHNT)=MknPIVzEAsC$8qC${G;VYFdt^!i?4AIU^KfP$o{>9jbuR z4o(R2GgCuGYAQzY#exQEXV(kp z5|<1x73Kgtz$ZkIW6N!WE;Ul~4kKi)sbq-o&-1=@81H%5gA?H6CbKKhGlDOtepF-C zx%=y_=4;cwe2?S&8-fP~%b(Lf`n9U`Cx3Eb9yORZD6UrUq-uws7PD1vQ%NH=ndoMW zh2UjkyN1=+Oe3+tkHL63uQd|6r zUnvl^@}*w3CE3i!!Y!ZSXV8DoTO@2q}laLamyxo60lESp%(V&Wt5)W>Yn( z2wd7$3<+nQKP#CGk<(jMX{l-bsJf1<{SRgC0tM9lL1bNf7T*ML8HS)##~4~OG*%py z0B2FMxVlXZylG!w?u2HK_}ky{hrIpyOAaGJJBBA^&xGN_B zsCJq$v^aeAZGHe(B|ZIORxK0D28)rhJ3Z;yIL5(Sqq(MAgPDXx#X)A{xxCflGhHbU zL(6)Li_MrN(c*Valb3pn&6A*Ir?nj^fE2k>2-#3UI%k!~=V!8FuPDm*j*-g}Vuhok z(rKR2$QSh-Er2PB2t!PI56^Y2B*g(JXe22OuxnRi_^NyWPcF+_HP;Ko1<7Id@)SGu+jwm^e|{5Y ze$jRxDhep!_Hg7CO&>sExvho|s%~<8xqJB*+rc(wJ}A?vyIXY@N(@!6yAT52F7MxT zzF3^GTXf9@Bj4R^&XW8_t|^KWkqNzUZtTxGHZEV64$#WKv|_(|2c{7lr;&RTNL;vl zl*{at9Jg3v{~Bj>Kxj1jeJS8}<|HIg^Ms6iK5eI5oUDq)AIeovk-OrXRq#;qX4(2_ z*xH zkx6pVN6is6FK>(@kx3dhEVvl9TC3%Dt?xMJP|fGoqfK3q7FRaHjW+}sRjK@WL;sSN zTtiYQxQl?;@IhEG{5^V4{9u-i_vzEVlXUA6rl@QziEY;3bD_Rf(yK-`XQDkMO%f#E z_5R%@gfr%r`THOsLvIt|#Dj9E0K+{s;VV+r^_!N$3wC;8){GSUXlO*^7d2sb8+pPBr?HG}IGN#xSn~EORUUV7@b1WNX;+?_| z9K4?^gvjMmPPo>Zr$kB=k8QL*vXBBX7%$+I{ps6&db|on`lD`95w9e)B-t}290D{2 z4mhYfyMH-?KotQ1r-eoj3>OuP5& z(6#4Thc1dhWhMP;L{Pvp^XU0)zg+3cut-nrU+l8SSj>_QMP{Gl+IiK&td0t;$xeaP z$d%g*D4tIb6P2c0%QdyzV{~Sr&f45|+o&cY^2{kV|E{CpyXz_~z48Gerj(2^A5Y_y z9g!uJ?cI)DlF=t*Z^ujByf}?-{Y_iivg6tBy9s#P|8SS8p?$NzEM@;YikuRrlG+f> zeQ~g*BsY7YQ`>Rr)tj%Sa%gM!UfFJbL;Ba7;bT`QmA8A{_G^qG{i_J>bIks)s^51i zoCiPocUu|Y9ZvL+1C6?uO!4Jj|FF;{IkruWKSce-Mf0#wCmC5qjsI5l#YFjVK_nUZ zS(QIT<;6z!aDh4*IaSqXG$P9yGk8!zQz8v6X?nRHTEW%-0Dev-K)Bd zUEbxZ zzE=+LvX!!<>9=vak-XFMPX8cOjx6n~cow8gnDm;r2wlui`8~zZd*#QxrKpeo=SI9s0G3wd5HVn4iZ92Q1F>fCHB2wZQ?a^Pb^=^?97|z~(#;cwl>88$7T(?-?H0 zpT~&+9M1DV0FLLiApocIo)Lg^d7Owqz*3$EB5*CQ4H3AN_lyYK&ErG@9`>cY+LZtK zuS+c_G|)BA0~+X=*9Hyr&3lFh2IO(V07LRTV1N;MZ7{%SqPG)E#iU|Sc|{Xw0_foz zVZSm19jtAFrKFXpuhZ)m03H-e;_eUW*Z4I>TEyW6MOnn*B}E&=;T6RwM8NQxVin@> zhT;_B@Rs5Q;_!|l0@CoVA}!MJeusxHX6*T%qaJTf$}xXb@6;z;|3 ziOHwFx|Cnno#Cf+4|cd~J|oHK*O#(~4L2;RT$D%hxz?A?Jo=!DcXVaq!WNnscwn7g zobNMoU&x*`&Zq6!>UC8|wz_(2PRJMoTU~Ej=(m@LH#$6YFzwI(XOWHI5vsUn&o;aJ zqp9(*&qm&y1wDo*GB%seU=|W$Jtn3qTcE*>u_272;|l~r_&5E32mjc(I8%3TsK`LM z{)eNH>Hoo+XKQ!H;J2fEH&}ZIXB+p5>oWo!+$9hFYm?Vk2RRsFa$y1f^^s$wArLBu z#0gh)bbsmXai*u&m0lT2M@ki-Jf`a$9wCx~$kB?IAT5cq64*<#OtvrbrUQ03-J=8! z`YRbn6C1gh$X_}+$PQx#6@X487?uB{XSz5z!)UAxr8T;ah<5SHBAh8TZXXIqXWuXw zeNm9aY$QfWxTs81l@_iiS2=uYE(a=M$cToQj3|p(ZgKjjhi*S=u3_dtTk_4Y^2R>d zkT!^r+*K%~p%DbH5D=!m!Cze(0VdRcgs_!FU0nDdw(TWVSr{-L8USXl147QGZw1c_ z)bUqb2un+upr^e`hJt#@vxCv{Z@c8#JZ$Giu5~GobWceWYP$Dl8V@Zg4LG6j^8Twr%5w&hy0_MwB z1)8%B$tz5Nl4So{(usc=FBMIrW2GRQ!O0()C)kD{!!DaR!)zw>L1_BmN0!7?1$eUH z5jn8dJC9Uw!5x@^QrQHG)lcs-R|UR7724VZ1K=N_KxzN}10a|LYbVx2cr&03{XyqOJ#ZhO-WPs%~-TM__GF#L0v435xro20BJE#on6jojs$+Y0OQq= zH?KJzbX%F71-wBi;%ytU(n=e2*vN9osP|yij!E5PS+_)yr4dG*v60J%2|ly+XH95G zkp{vKn!E}va62Sz#L7_RzZ@kL5OtQ&%M2KwHjnhlvVeLLWnN(6S9XRGhVU*9R&=a5~kxD0sobyLi|}9Fi#4cuAQqL zuU)J8{dqgdkjwv_4*49t{(5}{cG|cLeC&UHy}h1Zf4#?kJiV>h3p|3^<-T9OwGy`7 zyawVdfbf4jY_whr=wHIpJm&&FmWUMmHGKAwL1sfBOmXM!zdoMMWoYGTQa`BWHP&~2 z`vXF=T_l_3%a?PkJY|+L;u6mg8;VTFvY%2ZAZkTsAquKQP7saMj+edI@G)0h$NiF- z@^L7Fs~)^$%Iwf!w8O^GVD!SU;1k>%YlRkb=WK5BDhW)IKeV?+BAtR3;E@2A9uoK2 z^bX7fV`-(#ZYWu;tO0SZFgb#YuHnp~;Q&i)k`XrJar$~|_Z0(gnbq2k-}~&uLn^|H zXa%sMT4A$HqQJ=?mL!q|uHo-28PQkOO7Ca#net)a4G0Nd^3ITs3UY5n^o2z^&bpyf z8^a8p2y5NH8h`7R@KQ^2tvpNhO`?Euz! zxUvu2W}q)4z;8E6^+Fmk?-odXNQG9w-dZlmck`v%YV4OYN$pCdhU7>rn<8d!$rIk> z_L?JPNOFLW^kdpxA7|6L+nMb-!SX7-$Mcax+mPE*2Z_NQ+TC(vXC{l|7ttEMo)MFo z*S@2^&R(OZ^CGF83*$nG+cHYLjsPugYHRMZ^54c@t*Ylms@_W6&L`M56qj3J-76Er z0<<*;%=cT&4_kcA+sUv0wrH|dpY-fyZs+7wOFLSrK924}&+FScbX%t)^+6&v3cw?CS(*8!CH^IZ#T zG|$nqOQ!~Ws+vizb^3;_f3u59y% z+@#zYH)lc5=7sb&hcjOy8i07EkwU_VVo*Lb%)}!bL11i5YNV30{+lUsu+T{aHI*Z| zXOk5F2vRFm{2FA82jrGZQbMhipn*4>JFFOlY5kP9wYDSkMn!U{! zg`3O0;mp;3_4p0Wk>{n$N#f&`*EUemafOD!-xSOLE?@CV|4;cNXxgcZkiFQL4$5r= ztQv)iYn!LuPSd|C(tPG;;9CtPnccisG66lP%C6lHO3S}{?sl6a$o*qTU%zKR?$Wm#Nrp*kj|fLmL78&seDv^AZ*;`E?e_c9Drp=Lm31p13`xi?LHP!bYFrs@6!|(1avcsR@yU;h2DH zBue^5WPB|?z$x84P(UTri^{qCez>0Z-pLhda3t|K`WXCu&SPSU$zy-qHEp4y%6|Ts zm8+D}ZwBwZjvjB<2?5@e^De>G)7f*Xi}WLS*q72X7{Er@ZN#_Jum5g9^vuZeY{C0{ z&yDB2AfLo(n^@$mpDVZ{#%28O5pj}FNNyvQ5 zM4t8TT^kDu2?Oy-u}}Q%h#BwG49}c-sa}2-Ev0+7!|yN+&X4EU+Q<%i(ANt=i|{^U zS}lS!4f$Oy#$GclAHbbv%<>1YV3GqTQsi&$OuD!wqsb53OW83 z7EC%y*!3%jsQrn(X?imDD|>~rJO0bY=keleQ*xfkr|JvI<^6hlM}XZD#cYpFn8~Lt z&IjK~kqZ6XL3$f!QlEFeW$9COo`a60;~nVR1%RIL=_vF4h(G6>eL|oYb3lV$@pBl4 zNG0af{9z9m0>qGhCNka_qu-p7Zaar7uogviNT+{#ok{iF>lN#d5C5?nik%sfDe%}J z;;%)`)rk00S=8a+cl68ewRju$#NnXmE?z}JoA6hu6FJ=jn#7h#o0Qg0(TZ$@z^=O! z7T}rjBtNne!4mJGi(3GNX3M*4r01CKcvdj%7e#h#R?c5vZ#4_mIoIs~UgBDM?J)eX z8J-yE)xv$scSoM`R+qCx?gynr{a(TWdEO#!Ia4vO3SVlPK^3fQgb6Bk~^)`o5fnetTu#V-QVZ$#t4nMjr3n zNV$UJx1xPlG7`R6srz)QYM4;%LSC)!tTo~NvHj}r#SM%HH?b|UrT^T!^^~4e=?aGmxvEsEzW?oDa4<6d7rNko9SlaU|Br*wA9K)#*nO?>j4WP6Dh=@y z9)jzNO!I(!j93y%h@PeY@q!r88=GL!Y3lj+OeR%2WlZ8WzCaCM%oSdzyg_Nz2)4;` z6BrsD-a-lV{6=ru>0&9|j;yP%+iY6(VUlHz=}^O>c~0h6$I)q2`2&bxt*GIwPX^^y=|8MjbHL8MjuM6gN( zD#bTYxjE03;1Vb)<^ybpp&%nzOA+Il>cS=A zR?A`Z3r2pHNkepCA)|6Ufh+D==}S4vD3K7TBjA{#rjP|i8x%nxTlY88+H$o~307%F zu#v+95?*wO8I}y>g*a6p88EVBe-ehg7R~3V)p4&U&FM@vK=`RB&!YTgZcK*?GifP; zO@W$wSN|J{AOm28rZ5$35GXsH0t?D6W2Z$PNAZst z(nGu`jon*&=n<^weo^pmk@^B?Y@r<%zlRP2)sYEJ3l_kc-HHs7Rrqs_8=~j_!k@%p zZMi?fAO#W`*hex54e^hg8gw%<-jqGhu5LSlkSnx#?FhZ_r-wtnrlR6BQ8CnM6K(UQ zDUItmV_{PO_%y>9zY0=hl^aH+I+c2a4RlH#STp|8S-4?9qZ0o*H_gxS2~^c(gh<8# zT?HNgDslkp&*$Q03&~+PA@(A5)I~V7eg-uiFk%oKFIN$(U^5g^Dz->}kaRn*=!#9N zA6=D_GQ5!0Z0y}j34iv4==yP1>JZD#PB02{x?#`-LZg{UN$Da4;e(=o*N8}bb8m`7>R4^Zi$|=Q$wYQ!s}w`>u-TTZ zO7j8Cbp8p0TQY(3F7;88n-mjPa{9JjDDpDMH4k`<{SA#+;ONqopxH$*WP)*w97u>q?q3=1-F!uAsv~HN(JdX8>wS?4ds-9hxUJ5=airR>^?VQh0)y@E;_@O4eQw} zMU78!1TnizR}m)`*F#EN2ZxDWl-)j8u8s<+_-+(VIAseB6-65r^D37IL#!GY34Fqq zs>w}Js`JOv^zqc43B0u9gF&9E$z4?dYAphqX=k;3ui1Ut+jji+Ps*~>CYEf@1aTqh zLZZVPzT7>kL3rjaqRFYmx2Xl#imCKb39m__YFcYa*gwfrY{8Zq%AsVYL(X_Zj}>bI zsYTSUnx5%W!xFaTgW0bBWisx|$5&OD?jsTsi{9j8;azRWct>+di`;=Kqe@GF4VL={ z0wjRr}6MN+-S&j!J%~lx=?g zhK1AB+~k^9o7uwi#lj7?D?|fL)}LfctXHQqTy#vsjMJ$OSNUT z3Fr712YKBkQMpz&rdwK@ng~Y#=Io(m^;7AC*z;ji%&FESi;W%W9Oqd4iPq#@j1jjs z{$acy{y@y*VTw6kqxaHQqH&lng)&lnJK9cX*@d3!+6I*qS*a`*VhlOJeQYd+RTh_` z`H0N&j?Qv_(Z;$b&JCb9%ll2dy1=mVydc>+1mAsl`bGKRB@0IJm{>_PzO1%USxop(hX&<(KIdtcphmT=>gX zw8TXgoa1l$IP~8aWB<*0m)AIKES;**X?hFk3;ZbMzOCf0b0o6RAAz;H#?QwL52N^3 z+zA%67jzcX%n_bbS+Iud$zbY%6;|M;fEN6GP+ENTNqi7EyAFOh_bdA55f}xjlngcm)f6 z;p0gKA8cS5aPa}qf6e0_hKX5HVpka}c%C?ODv@@^HoQ^3gY3Y`ok<^+`$ZO>z((NYBrW zf$SRTVjJIM5U)?mtp=la_x!oi9P$nyE1*hTkqf(oUCv)90gz;+Z)P+gr1cfu-Iic6 zq?+QVHe6ygGV~R);OZw>F?ig#L%sYETUGmaNM41P95nLA4Yl{5{ZJB$NX1BcZVCLE z)BjIb2q44T=kZH)8wQ1k+U6jsVd8rg?4NC}U-il@1r1n^x&g#c-sepDOE-Mny`{s;vwF?Fxw%9aIH_y5w6H0nx ze>`r@!n?3Z>_f*giM2UITy_xj`gJq%m5~|O0PqrSs%uIwLL%FKv$q}43lCgrlOYOo zu5u_|^r{1cJ8jbZXv|jutJ#0ir_CRqg=89R2Bqva{>>3&<jt5r)qu6RIgS4qYZ$lPVr z%?ZVOt|vjdv($`*8`^j0K)BUb@)VjICi#FNuE6BAZ?Vv|Xa@Y;gzfM5J@7@SeZ%Ux zHg+Lr`~8Z=M-AakI7n(O_5dm7OtoC73aI;i!dOeUhe^8^DRxsdMyLH7>gK~Vt|YP` zQf$;3Zj>$dmq03^IYA|_by27SclYX>z~_yE*h^^61t#zUAN#sj*z#5Lm)g6P)uN?B z4gQ#jC1tPsS_{8Zw-1xaQQ&0C#+^UjAZsilGZVXV{U}g@#sF&&1wFWff$X*Z8^$!(KFg zEiO-w?S(qfMg73_N?|JVGBsX;3JsivlPk485{4X%g(Gzrj+z)CC+W6CdkdloWkXU- z_0YG$FjYs;A|=&h`1w-0&>@v#Cary>FGt~2SCvx1JnPQz%YQ3Be&U9!vZ#(_SEH%e zZS$aW@wfr6k^n$tm2nh9SasU zcUmCc$Y$oP^k?*s7_mwLZGX**Z;lyGE`M_vBFFEh>OSje~#t)mo+LX!#zYI}>SnodWw zh=QX2CJs61lfn#@ti+!W#S`>e*q>b=Ud7~TZo%tuaw&fGy`x8>7 z#ZjE9FD{4vF;n%!S##OBKL5#JJkq~k*hiCH!hq4W6Mc1GH1Gl6bz6}NDh&A_i6$zo zkb$#sFr}U$Q{w={3YS`lge#Lh>s>Q1r?2KcTtK6V&qBWZGWI*>{0Huie7dA!@Xe*j z#S|{ww{G#gl;N~2PS%B-i8#uFo62P1`rksPayewR+}CHK$8tE;(bJvKT(sjM8$4Eb44119 zc4RXxxW#y8Ld99;LgYic3W?qGv8dP&?BkS+=#&G43HSZjl{ZeM!2>~s9Xh#qy zeQfPBNW-S+!ys}-q;iTw^ynhGO&EV2zX>yoP+C2Z?)MFo>DX_5(4Qz@Pkg>`jUKZO zK`hq1+oaqDTIFLG9&m5tDd&HVzX71{&Zh=lbLsdk_`2)U1zGs+MBrhch}Ehy8mFGX zzeDt9|K%B@gK=>s8Y+?j*#DmrQ$6KLyCB9NU3VD#B^4x$5c85K$^#;MaV3aS*AOY_ zR9KUJ0lf?!7TUuJ@n*c8IsMj9Qfc88#z$dRw@KXU>II66?A;R)dZ+5JK^s+Nw|3&M znJek6Q-9;epQ^~s{IV1F&0jOZW3D8G43{Rn*=YgDs;a)-U0KFg^?}k!S zChKy#pe;*Yw*YLBCd`kgg{-P5DD<4fyBl)*_byFL>6jsb4E-d=1oeuMzS*595amHN z>R88lNha}Hcli8X5ScScqScdMqBd&62ld$%$!xS)J zlbBHo2{70dWqBA^W^LrmF|kkpA9)Qyhp`H=4lS1Mh72jP&R58vstwZ-7h#Kwk!55* zSUw!SCJQWUJg0^P$t*vs;cxHk3!M2rVNYZxQzFWvt7fD*2l+K2vgDIjO~VdD+<8sL z|H|~n5}F*0ohj8HYe=*RbR!pq^t^!Svk`Si7S(?y-(9`^ z&kjPWXQTph_PApNW`nZQjm1z>_DQP=aMDH^pwuSdHS-HKh6b|rzm19~CuWjb^MiXi z5!|=&dB>XHNe=-u;oc*{xTFLZ$AxwR(Nb(cJqsBwL1A3W!9^2uGCx+}W;GB0L{YTv2 z3H)`J5gC=*O$@D`V$2xDeLZ=Hj>PCcThc*QJennMn&}a`}zB+(55@gSqk)W${z=%dJ z2-)~*P|8Kxy^a%;&Gam?SzxvBF;3J|-tAO1gAo;a5|X=yC#r$83a>#=(=%B6v(r4W z!g83y{g?MJ7?0F)0RF&Z$m}_brTOx0$&0s<9BYbvKzs@vY;}ST(Hlnobkb%~Q7kDPcU2=F^GneU#_(Cl`5zk7V5#3~9Y&exNM2Z7P5keA-=0oAZi3Rf7L zl5UWxSYu`&zN!oEiP$W-%H~aGgEw{MD)We;wWq{B&!J1?^}830v0a6o4%kdIHl2e! zNQ0Y(Zs5*e7j?J3(zdsIxNdfRv@AQ*RQ9d2O@L_6VQ+x=qWGx`^?w-)TUy zMIJ_iHC~t$OE44Nj6_f=|Sv(D+yPTV|EznnLx;Es^#F9|MAl40Hj9 zjG+P5V}x*lMnM`S35j0UDRaRuC3%+?bWc$(l!r}~KjCI;VQ%-fBM)em56H)BMGr2(PfBH~v?B<}4t|Q!lWoe*k3u>t`MM#6L`{qJ|L)q>lfg z43gg7U`+sF8(V2fnkPHBaiftZzpHf5c;Ut6M`HA z1u1qhmx*gOTGIQ@29qknueVdg@r1(ZqD7p^(msk&vA+YiJP$U}hnx-cS_B_(~NYvGdJ)IQ%q=M#Kw|F4>H{kNLQ;Zlb()};|d#B@8$=9utkBgYFGQ*gYx5uh^Eq;nj?VGvySGTJf0jTW7q>CGbF z3K>eU85|;i%~>{J4Zl3PA4+T@6|QajBpiDtT;K5$MpdZ?Gtt9cR3R=xtw36zz4sK4 zj4-NUDz_JUj?j#GVBpF}5;Km-s8a~1{==n)0pw1mw5>zj`B60(O*OmTzxW*L=h}-f zZfD4{vWc6_;p_i;rJwzr=KJWu$K%_jH)lik^&|$+HO*d@I zu=<1wH24P`zgrfOt9b_n9po~KI%QP`|>R)a6#NZ`?@;%acCD|~pJsv3i z(nh9}5Y8*}c<+|LoKqg^>>2V2t_wEZM;q=d(R4AC7j%f>^ZAOk$&33Cvou!QB$rce zH@i^J+_)(st|zx~Qant?`%oo!{{kg@euco&CLkPMmv^qc4YL{3Yl7A4p9*}%_5c|hBNZ?cM_h6Hx(@lrIGa1yZT*vji;lJQu)UDi zHIz``p$ZX=;@n~qr+=Zy)P!+zKB%x|JTQIWLaNhOyb%)?av5$qN8zga88g{2yy}0< z4by+0OpghuNdU^i;lUNGN>cnF7sO)JBg`i8z1Pokv>koUHfA+7zCi`+8V$L`oagZ? zoFXeS`Hnc(8NZr5&dDN;e(>df%+&Z;pu+==3;8oai8+&xW4BJ5ISDE$eLD4#l;FU4 zR-8O3gIBLBeLvF7@Tk|K<4h5Vo=Ju+mytDXhFA9@xd1$t0UfCvn!1teIg9Saehz|M zB4f9k6Jj%Hgpl$TyJfhZA}Jw;NNc-sEJ=Giy<@RW_+NIclPNk@h=XlY5$-YYd#nwz zAs(k5mYj}RSn~L#p(`;fp&T(Bq1ogZdjs`zzpH6gn8>>`pZ{d`N}#H!+}iO(Nad62 zd%_nJx)MzvRgfo{lfT!n@ukSkj2P%wr9LBQL{G@BU1Lf|Bvb#75n^KgZzJSDM9spD zPOV-I^#387M+yN(`h!Tr$xDMdfnl>Qq+Y z82)2xGAwnAh#DWj_4bf8ecq5eF*UK?Ms56<&1PElaQ=z?AaX;d`pzW(KI**3%JC@) z=Ig9703e@!VG?u9c?H!f|I%db^y~3(^G%=~A4XPz#Y3u45)>bCRxmf=&7`V{(|~(| zFS0xpn_N(@*8kW8Hkq?9tCx1G&(xy-!~o7Wz!ih}dFBI>x;!}OG;~Q1WDYG)ts#^x zhh_fos_5vvxfpsbE$mHv2S=BZ5KBd-K;1c#_)h5WQsE7$}=ro0vXOhmAjuh12w_5ggEk3 zS#OE$Kbv47j}NEc?tCu6ngrwT-v`I46a?K&4w<;We|%*epEPuESIavSLV)NE>q?pn zYWC*0X_Bnzx4`|#j0=B>?qUe^=*M^l+tPIn@C`PTK($^{taK5kFbR)Ou<`v_ zTa4EAZ%$x{T9=ZGUj;vNJlx?Qu14J+oI5$d)r{qjm5tKEv;i|4+r@SUN&4nocZA{_ zE_+1wB)!Ss;_@yupg^Qb=u#<09Zt1&x6_MR3hq#(jK0j!(Lc@X6hBUo zlStSP8c`D8dVQmL+)Oi2&1U&^#1!>NhNzX|A4T+aB&~2~C!G{%l`y8&w3&LjM$GIS z{_%fp?b7*1uPg*Ya!*hDPW{Eve&wwI81qYSF4bfF2lNfw$}RkQQa=S`;| z{2B6uI(J+jxkj-@p`Nq-%!KB@-{P#H0}m||J3tgHeChj{-*VR|UD+>K*;m8?U|qCL zIKBW^H9Uc3{L$3Zf!v9#r8^T(oRu<<3JSj(*E_Bzp%GB9t{BZ;PoUq37X|Eiw|zSs z_TRSTl=E@wLS}%&kI2r(A^>-p>(rJw!Er4y3v}*g4u`gjhU9{-HAYDXHa#2Z^RWtw zh;$EVLTjroO0(jjr|TxtdLx6EwTLL#qA-vfC@1cFng&%S-%L400Nli`(FC!H99ebZS&Rw z@cJ%k00;0%)7)38%=U|m48VuAL|4J5Eg?98^OQRQS74V?*PcQTfnXxQF#ez8qvz@< z=_u~%fWdLKhZq9GThXtv^jCzhJr=tx+%MQ`GowB+`WVgNm$xBs&N;U}@1NkjOJuntr=OPx{g zrLNdKL~6*%MCY7Fu1Em@!*tV86?Ml z)6PBcy1eX-Ddtcbzvx0-aUztAl`{lm#$bC2e^vw87aJz8^cT?3g6P$7EZpWVXRqqL zc>u|%?~5od5SRI?k%i4W7j@jm*NDMEm-RD_g8O#6eo)&-jad}{4z~Ft@&sycD9A+j z&>OVsoi+r7X}ICXhKCK1B}+YGsE%yC8H2ZH2z?Oq+2I0_+Iby=r%p0YO6;#){xd?~ zZ|i6Gj)#f-hj$2`wMmACniPZCUQeTpV^OBIJ9Fqxw0{q-73xC&L=??*@Ve@t@&6F^ zl~HvBO`ABu-95O&#XWd%5AN>nGH8Hc!QBGE-Q6X)yF0<%Wy$;Qw`cd)o-;psPIb@R z>04D@^>lUB$SfU>hS}hRkv+-=-Z4M~HhUBbg0ZUO@Jf`ZN&eVLpp!DDoy`$|49tVt z10B47q1{k^+8?)9;%&>l7W*p1I@hcqaQ~a|eRK5mJv6~~)0vmw?Eq@r$pr=Xt(cfI z5c>uuu{u0I5`8ZcD>L7lY?YYsOz=eTbq%gumwGJ~-!?#wqqBN@;#rXbSl2B&D2r&8Ws=mrT}&WiXR&G!aMwUD$xzU4-v zO{8|pVrj~w6xO?X0pw6t@o$^}#AQ9>iGm85X-+W6xEo}(12=nPF zq8IkPjxC$F`J$!$2)Wlc=PwxJamp|?Zq-6%%!)E{wKcxkGgcckV{5lWg|6~MJBsqF=cf^S!o+`ms9kv(iXtCQK^~_N3BS*EO_6;8cL&IMss?gwR)xDp z&Vs1PI31!0aJGrplPmRg`UR!ml4@jTggjn3i}NW{1{5Z3{BJMeuZ&699Liu-e5s=W z_EU0CzXEr6PRRaxna6Y}ds~cs@FncUQ`WZa_4!L2!Cm>PA^xbzBFg(Uv3-5xg+|a; z5y!O9WOCi?x*PL1d|*8Qn_8++^r1iLj8jR>AyD;mk5HGwCiS^ZdtH(ztlK#=^9JFo9#S@Vv2byvC{99Kk^}ej7D1%A_KW{O3ltCHZbFUop3l~C ztBeeot<6hR5Lu={wb!S+^7km;h7h*_Hc!qVQ5pK&q9S=!U!bI^JrZ-;#|{yI}6?m7^%B>(oDys}}>9$^b6 zWOi(Edfv4C30PVF9Ix9wpJXw?EoH7Bk2joNTKdJw-l`{d^5bagxx5#~?s;4|2gdXB z-OGlm?`^|l1ZL`E+ zgRcc#{)_q8n6(qX%Vf*cV$rQaz?|t>-BP9lcyWNMEoxJZ7OYC{xhK-Yid z9JT0k_tQGK>zLFiwje2mU1X`nhqKnQRZ9QniuVhjDn>728_wfk)=1X6J-wm$kUM?u zbGGDnNid!jxqS4JgwL73DB7tI+;Xv!=@q7u4FHQC60sq+$BoT>9ha=<9q0__P=bw6 zp`E3miY-{&v@aD?^Z0e%i#p|E+I9&+gntwuoNHaYA6xtV^}ZkX75UyxNwxi1JH8MB zlS@E8f0FsKwUSre4eL*rXk@D^$k$1W@<6i#+0ASzB-^u?m^GH{+I}I!{o*[!z- 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

~4MLjVGXJqP)|0``KLjawtP`yBEU)v%9`^AcM= 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