Skip to content

Commit 0bdf69e

Browse files
committed
[1.3.66] 2026-03-05
## Core - Added `writeEXR()` functions for writing single-channel and multi-channel float images to OpenEXR files with lossless ZIP compression, using the tinyexr header-only library. ## Radiation - Added `writeCameraImageDataEXR()` and `writeDepthImageDataEXR()` methods for exporting camera and depth data to EXR files, preserving full floating-point precision. ## Visualizer - Fixed bug in colorbar ticks where ticks could extend past the colorbar. ## Radiation - Added OptiX 8.1 ray tracing backend for NVIDIA systems with driver ≥ 560. This resolves the driver 590+ incompatibility that prevented the OptiX 6.5 backend from working on modern NVIDIA drivers. The backend is selected automatically at build time: driver ≥ 560 uses OptiX 8.1; driver < 560 continues to use OptiX 6.5.
1 parent 6192e13 commit 0bdf69e

47 files changed

Lines changed: 23630 additions & 55 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

core/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ add_dependencies( png_static zlibstatic )
4545
include_directories("${CMAKE_BINARY_DIR}/lib/libjpeg-9a" "${CMAKE_CURRENT_SOURCE_DIR}/lib/libjpeg-9a")
4646
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/lib/libjpeg-9a" "${CMAKE_BINARY_DIR}/lib/libjpeg-9a")
4747

48+
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib/tinyexr")
49+
4850
target_link_libraries( helios PRIVATE png_static jpeg ) #note that zlib is already linked by libpng
4951

5052
# Suppress warnings for third-party libraries

core/include/global.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,26 @@ namespace helios {
878878
*/
879879
void writeJPEG(const std::string &filename, uint width, uint height, const std::vector<unsigned char> &pixel_data);
880880

881+
//! Write a single-channel float image to an EXR file with lossless ZIP compression
882+
/**
883+
* \param[in] filename Name of the EXR image file
884+
* \param[in] width Image width in pixels
885+
* \param[in] height Image height in pixels
886+
* \param[in] pixel_data Float values at each pixel (index at pixel_data[row*width+column])
887+
* \param[in] channel_name Name of the EXR channel (default "Y" for grayscale; use "Z" for depth)
888+
*/
889+
void writeEXR(const std::string &filename, uint width, uint height, const std::vector<float> &pixel_data, const std::string &channel_name = "Y");
890+
891+
//! Write a multi-channel float image to an EXR file with lossless ZIP compression
892+
/**
893+
* \param[in] filename Name of the EXR image file
894+
* \param[in] width Image width in pixels
895+
* \param[in] height Image height in pixels
896+
* \param[in] channel_data Vector of per-channel float data, each of length width*height
897+
* \param[in] channel_names Names for each channel (e.g., {"R", "G", "B"}). Channels are sorted alphabetically per EXR convention.
898+
*/
899+
void writeEXR(const std::string &filename, uint width, uint height, const std::vector<std::vector<float>> &channel_data, const std::vector<std::string> &channel_names);
900+
881901
//! Template function to flatten a 2D vector into a 1D vector
882902
/**
883903
* \ingroup functions

0 commit comments

Comments
 (0)