Compare commits
6 Commits
temp-usd-p
...
temp-pytho
Author | SHA1 | Date | |
---|---|---|---|
8d16e5ecab | |||
f6ed41ea14 | |||
7c9733e7e4 | |||
530134a002 | |||
973ee18ecb | |||
cefcc1e922 |
@@ -268,6 +268,3 @@ ForEachMacros:
|
|||||||
StatementMacros:
|
StatementMacros:
|
||||||
- PyObject_HEAD
|
- PyObject_HEAD
|
||||||
- PyObject_VAR_HEAD
|
- PyObject_VAR_HEAD
|
||||||
|
|
||||||
MacroBlockBegin: "^BSDF_CLOSURE_CLASS_BEGIN$"
|
|
||||||
MacroBlockEnd: "^BSDF_CLOSURE_CLASS_END$"
|
|
||||||
|
@@ -12,8 +12,6 @@ Checks: >
|
|||||||
-readability-avoid-const-params-in-decls,
|
-readability-avoid-const-params-in-decls,
|
||||||
-readability-simplify-boolean-expr,
|
-readability-simplify-boolean-expr,
|
||||||
-readability-make-member-function-const,
|
-readability-make-member-function-const,
|
||||||
-readability-suspicious-call-argument,
|
|
||||||
-readability-redundant-member-init,
|
|
||||||
|
|
||||||
-readability-misleading-indentation,
|
-readability-misleading-indentation,
|
||||||
|
|
||||||
@@ -27,8 +25,6 @@ Checks: >
|
|||||||
-bugprone-branch-clone,
|
-bugprone-branch-clone,
|
||||||
-bugprone-macro-parentheses,
|
-bugprone-macro-parentheses,
|
||||||
-bugprone-reserved-identifier,
|
-bugprone-reserved-identifier,
|
||||||
-bugprone-easily-swappable-parameters,
|
|
||||||
-bugprone-implicit-widening-of-multiplication-result,
|
|
||||||
|
|
||||||
-bugprone-sizeof-expression,
|
-bugprone-sizeof-expression,
|
||||||
-bugprone-integer-division,
|
-bugprone-integer-division,
|
||||||
@@ -44,8 +40,7 @@ Checks: >
|
|||||||
-modernize-pass-by-value,
|
-modernize-pass-by-value,
|
||||||
# Cannot be enabled yet, because using raw string literals in tests breaks
|
# Cannot be enabled yet, because using raw string literals in tests breaks
|
||||||
# the windows compiler currently.
|
# the windows compiler currently.
|
||||||
-modernize-raw-string-literal,
|
-modernize-raw-string-literal
|
||||||
-modernize-return-braced-init-list
|
|
||||||
|
|
||||||
CheckOptions:
|
CheckOptions:
|
||||||
- key: modernize-use-default-member-init.UseAssignment
|
- key: modernize-use-default-member-init.UseAssignment
|
||||||
|
5
.github/pull_request_template.md
vendored
5
.github/pull_request_template.md
vendored
@@ -1,5 +0,0 @@
|
|||||||
This repository is only used as a mirror of git.blender.org. Blender development happens on
|
|
||||||
https://developer.blender.org.
|
|
||||||
|
|
||||||
To get started with contributing code, please see:
|
|
||||||
https://wiki.blender.org/wiki/Process/Contributing_Code
|
|
@@ -30,7 +30,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
|
|||||||
"CMake generation for blender is not allowed within the source directory!"
|
"CMake generation for blender is not allowed within the source directory!"
|
||||||
"\n Remove \"${CMAKE_SOURCE_DIR}/CMakeCache.txt\" and try again from another folder, e.g.:"
|
"\n Remove \"${CMAKE_SOURCE_DIR}/CMakeCache.txt\" and try again from another folder, e.g.:"
|
||||||
"\n "
|
"\n "
|
||||||
"\n rm -rf CMakeCache.txt CMakeFiles"
|
"\n rm CMakeCache.txt"
|
||||||
"\n cd .."
|
"\n cd .."
|
||||||
"\n mkdir cmake-make"
|
"\n mkdir cmake-make"
|
||||||
"\n cd cmake-make"
|
"\n cd cmake-make"
|
||||||
@@ -156,15 +156,6 @@ get_blender_version()
|
|||||||
option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
|
option(WITH_BLENDER "Build blender (disable to build only the blender player)" ON)
|
||||||
mark_as_advanced(WITH_BLENDER)
|
mark_as_advanced(WITH_BLENDER)
|
||||||
|
|
||||||
if(APPLE)
|
|
||||||
# Currently this causes a build error linking, disable.
|
|
||||||
set(WITH_BLENDER_THUMBNAILER OFF)
|
|
||||||
elseif(WIN32)
|
|
||||||
option(WITH_BLENDER_THUMBNAILER "Build \"BlendThumb.dll\" helper for Windows explorer integration" ON)
|
|
||||||
else()
|
|
||||||
option(WITH_BLENDER_THUMBNAILER "Build \"blender-thumbnailer\" thumbnail extraction utility" ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
|
option(WITH_INTERNATIONAL "Enable I18N (International fonts and text)" ON)
|
||||||
|
|
||||||
option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON)
|
option(WITH_PYTHON "Enable Embedded Python API (only disable for development)" ON)
|
||||||
@@ -187,13 +178,6 @@ mark_as_advanced(CPACK_OVERRIDE_PACKAGENAME)
|
|||||||
mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
|
mark_as_advanced(BUILDINFO_OVERRIDE_DATE)
|
||||||
mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
|
mark_as_advanced(BUILDINFO_OVERRIDE_TIME)
|
||||||
|
|
||||||
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.16")
|
|
||||||
option(WITH_UNITY_BUILD "Enable unity build for modules that support it to improve compile times" ON)
|
|
||||||
mark_as_advanced(WITH_UNITY_BUILD)
|
|
||||||
else()
|
|
||||||
set(WITH_UNITY_BUILD OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
|
option(WITH_IK_ITASC "Enable ITASC IK solver (only disable for development & for incompatible C++ compilers)" ON)
|
||||||
option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
|
option(WITH_IK_SOLVER "Enable Legacy IK solver (only disable for development)" ON)
|
||||||
option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke, ocean sim, and audio effects)" ON)
|
option(WITH_FFTW3 "Enable FFTW3 support (Used for smoke, ocean sim, and audio effects)" ON)
|
||||||
@@ -415,58 +399,37 @@ mark_as_advanced(WITH_CPU_SIMD)
|
|||||||
|
|
||||||
# Cycles
|
# Cycles
|
||||||
option(WITH_CYCLES "Enable Cycles Render Engine" ON)
|
option(WITH_CYCLES "Enable Cycles Render Engine" ON)
|
||||||
option(WITH_CYCLES_OSL "Build Cycles with OpenShadingLanguage support" ON)
|
|
||||||
option(WITH_CYCLES_EMBREE "Build Cycles with Embree support" ON)
|
|
||||||
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
|
||||||
option(WITH_CYCLES_DEBUG "Build Cycles with options useful for debugging (e.g., MIS)" OFF)
|
|
||||||
|
|
||||||
option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF)
|
option(WITH_CYCLES_STANDALONE "Build Cycles standalone application" OFF)
|
||||||
option(WITH_CYCLES_STANDALONE_GUI "Build Cycles standalone with GUI" OFF)
|
option(WITH_CYCLES_STANDALONE_GUI "Build Cycles standalone with GUI" OFF)
|
||||||
|
option(WITH_CYCLES_OSL "Build Cycles with OSL support" ON)
|
||||||
|
option(WITH_CYCLES_EMBREE "Build Cycles with Embree support" ON)
|
||||||
|
option(WITH_CYCLES_CUDA_BINARIES "Build Cycles CUDA binaries" OFF)
|
||||||
|
option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF)
|
||||||
|
option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
|
||||||
|
mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
|
||||||
|
set(CYCLES_TEST_DEVICES CPU CACHE STRING "Run regression tests on the specified device types (CPU CUDA OPTIX)" )
|
||||||
|
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for")
|
||||||
|
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
||||||
|
option(WITH_CYCLES_HIP_BINARIES "Build Cycles HIP binaries" OFF)
|
||||||
|
unset(PLATFORM_DEFAULT)
|
||||||
|
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
||||||
option(WITH_CYCLES_DEBUG_NAN "Build Cycles with additional asserts for detecting NaNs and invalid values" OFF)
|
option(WITH_CYCLES_DEBUG_NAN "Build Cycles with additional asserts for detecting NaNs and invalid values" OFF)
|
||||||
option(WITH_CYCLES_NATIVE_ONLY "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
|
option(WITH_CYCLES_NATIVE_ONLY "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
|
||||||
option(WITH_CYCLES_KERNEL_ASAN "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
|
option(WITH_CYCLES_KERNEL_ASAN "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
|
||||||
set(CYCLES_TEST_DEVICES CPU CACHE STRING "Run regression tests on the specified device types (CPU CUDA OPTIX HIP)" )
|
|
||||||
mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
|
mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
|
||||||
|
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
||||||
mark_as_advanced(WITH_CYCLES_LOGGING)
|
mark_as_advanced(WITH_CYCLES_LOGGING)
|
||||||
mark_as_advanced(WITH_CYCLES_DEBUG_NAN)
|
mark_as_advanced(WITH_CYCLES_DEBUG_NAN)
|
||||||
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
||||||
|
|
||||||
# NVIDIA CUDA & OptiX
|
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles CUDA compute support" ON)
|
||||||
if(NOT APPLE)
|
option(WITH_CYCLES_DEVICE_OPTIX "Enable Cycles OptiX support" ON)
|
||||||
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles NVIDIA CUDA compute support" ON)
|
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles HIP support" OFF)
|
||||||
option(WITH_CYCLES_DEVICE_OPTIX "Enable Cycles NVIDIA OptiX support" ON)
|
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
||||||
mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
|
mark_as_advanced(WITH_CYCLES_DEVICE_CUDA)
|
||||||
|
|
||||||
option(WITH_CYCLES_CUDA_BINARIES "Build Cycles NVIDIA CUDA binaries" OFF)
|
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime" ON)
|
||||||
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for")
|
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
||||||
option(WITH_CYCLES_CUBIN_COMPILER "Build cubins with nvrtc based compiler instead of nvcc" OFF)
|
|
||||||
option(WITH_CYCLES_CUDA_BUILD_SERIAL "Build cubins one after another (useful on machines with limited RAM)" OFF)
|
|
||||||
option(WITH_CUDA_DYNLOAD "Dynamically load CUDA libraries at runtime (for developers, makes cuda-gdb work)" ON)
|
|
||||||
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
|
||||||
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
|
||||||
mark_as_advanced(WITH_CYCLES_CUDA_BUILD_SERIAL)
|
|
||||||
mark_as_advanced(WITH_CUDA_DYNLOAD)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# AMD HIP
|
|
||||||
if(NOT APPLE)
|
|
||||||
if(WIN32)
|
|
||||||
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" ON)
|
|
||||||
else()
|
|
||||||
option(WITH_CYCLES_DEVICE_HIP "Enable Cycles AMD HIP support" OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(WITH_CYCLES_HIP_BINARIES "Build Cycles AMD HIP binaries" OFF)
|
|
||||||
set(CYCLES_HIP_BINARIES_ARCH gfx1010 gfx1011 gfx1012 gfx1030 gfx1031 gfx1032 gfx1034 CACHE STRING "AMD HIP architectures to build binaries for")
|
|
||||||
mark_as_advanced(WITH_CYCLES_DEVICE_HIP)
|
|
||||||
mark_as_advanced(CYCLES_HIP_BINARIES_ARCH)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Apple Metal
|
|
||||||
if(APPLE)
|
|
||||||
option(WITH_CYCLES_DEVICE_METAL "Enable Cycles Apple Metal compute support" ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Draw Manager
|
# Draw Manager
|
||||||
option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
|
option(WITH_DRAW_DEBUG "Add extra debug capabilities to Draw Manager" OFF)
|
||||||
@@ -511,10 +474,11 @@ if(WIN32)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This should be turned off when Blender enter beta/rc/release
|
# This should be turned off when Blender enter beta/rc/release
|
||||||
if("${BLENDER_VERSION_CYCLE}" STREQUAL "alpha")
|
if("${BLENDER_VERSION_CYCLE}" STREQUAL "release" OR
|
||||||
set(WITH_EXPERIMENTAL_FEATURES ON)
|
"${BLENDER_VERSION_CYCLE}" STREQUAL "rc")
|
||||||
else()
|
|
||||||
set(WITH_EXPERIMENTAL_FEATURES OFF)
|
set(WITH_EXPERIMENTAL_FEATURES OFF)
|
||||||
|
else()
|
||||||
|
set(WITH_EXPERIMENTAL_FEATURES ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Unit testsing
|
# Unit testsing
|
||||||
@@ -663,7 +627,7 @@ if(WIN32)
|
|||||||
option(WITH_WINDOWS_PDB "Generate a pdb file for client side stacktraces" ON)
|
option(WITH_WINDOWS_PDB "Generate a pdb file for client side stacktraces" ON)
|
||||||
mark_as_advanced(WITH_WINDOWS_PDB)
|
mark_as_advanced(WITH_WINDOWS_PDB)
|
||||||
|
|
||||||
option(WITH_WINDOWS_STRIPPED_PDB "Use a stripped PDB file" ON)
|
option(WITH_WINDOWS_STRIPPED_PDB "Use a stripped PDB file" On)
|
||||||
mark_as_advanced(WITH_WINDOWS_STRIPPED_PDB)
|
mark_as_advanced(WITH_WINDOWS_STRIPPED_PDB)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
@@ -856,7 +820,7 @@ if(WITH_AUDASPACE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Auto-enable CUDA dynload if toolkit is not found.
|
# Auto-enable CUDA dynload if toolkit is not found.
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_DEVICE_CUDA AND NOT WITH_CUDA_DYNLOAD)
|
if(NOT WITH_CUDA_DYNLOAD)
|
||||||
find_package(CUDA)
|
find_package(CUDA)
|
||||||
if(NOT CUDA_FOUND)
|
if(NOT CUDA_FOUND)
|
||||||
message(STATUS "CUDA toolkit not found, using dynamic runtime loading of libraries (WITH_CUDA_DYNLOAD) instead")
|
message(STATUS "CUDA toolkit not found, using dynamic runtime loading of libraries (WITH_CUDA_DYNLOAD) instead")
|
||||||
@@ -1086,7 +1050,7 @@ if(MSVC)
|
|||||||
add_definitions(-D__LITTLE_ENDIAN__)
|
add_definitions(-D__LITTLE_ENDIAN__)
|
||||||
|
|
||||||
# OSX-Note: as we do cross-compiling with specific set architecture,
|
# OSX-Note: as we do cross-compiling with specific set architecture,
|
||||||
# endianness-detection and auto-setting is counterproductive
|
# endianess-detection and auto-setting is counterproductive
|
||||||
# so we just set endianness according CMAKE_OSX_ARCHITECTURES
|
# so we just set endianness according CMAKE_OSX_ARCHITECTURES
|
||||||
|
|
||||||
elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR CMAKE_OSX_ARCHITECTURES MATCHES arm64)
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES i386 OR CMAKE_OSX_ARCHITECTURES MATCHES x86_64 OR CMAKE_OSX_ARCHITECTURES MATCHES arm64)
|
||||||
@@ -1776,7 +1740,7 @@ endif()
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
# Do not enable compiler specific language extensions.
|
# Do not enable compiler specific language extentions.
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
define HELP_TEXT
|
define HELP_TEXT
|
||||||
|
|
||||||
Blender Convenience Targets
|
Blender Convenience Targets
|
||||||
Provided for building Blender (multiple targets can be used at once).
|
Provided for building Blender, (multiple at once can be used).
|
||||||
|
|
||||||
* debug: Build a debug binary.
|
* debug: Build a debug binary.
|
||||||
* full: Enable all supported dependencies & options.
|
* full: Enable all supported dependencies & options.
|
||||||
@@ -40,8 +40,6 @@ Blender Convenience Targets
|
|||||||
* ninja: Use ninja build tool for faster builds.
|
* ninja: Use ninja build tool for faster builds.
|
||||||
* ccache: Use ccache for faster rebuilds.
|
* ccache: Use ccache for faster rebuilds.
|
||||||
|
|
||||||
Note: when passing in multiple targets their order is not important.
|
|
||||||
So for a fast build you can for e.g. run 'make lite ccache ninja'.
|
|
||||||
Note: passing the argument 'BUILD_DIR=path' when calling make will override the default build dir.
|
Note: passing the argument 'BUILD_DIR=path' when calling make will override the default build dir.
|
||||||
Note: passing the argument 'BUILD_CMAKE_ARGS=args' lets you add cmake arguments.
|
Note: passing the argument 'BUILD_CMAKE_ARGS=args' lets you add cmake arguments.
|
||||||
|
|
||||||
@@ -51,7 +49,7 @@ Other Convenience Targets
|
|||||||
* config: Run cmake configuration tool to set build options.
|
* config: Run cmake configuration tool to set build options.
|
||||||
* deps: Build library dependencies (intended only for platform maintainers).
|
* deps: Build library dependencies (intended only for platform maintainers).
|
||||||
|
|
||||||
The existance of locally build dependencies overrides the pre-built dependencies from subversion.
|
The existance of locally build dependancies overrides the pre-built dependencies from subversion.
|
||||||
These must be manually removed from '../lib/' to go back to using the pre-compiled libraries.
|
These must be manually removed from '../lib/' to go back to using the pre-compiled libraries.
|
||||||
|
|
||||||
Project Files
|
Project Files
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
# ***** END GPL LICENSE BLOCK *****
|
# ***** END GPL LICENSE BLOCK *****
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
# Copy all generated files to the proper structure as blender prefers
|
# Copy all generated files to the proper strucure as blender prefers
|
||||||
########################################################################
|
########################################################################
|
||||||
|
|
||||||
if(NOT DEFINED HARVEST_TARGET)
|
if(NOT DEFINED HARVEST_TARGET)
|
||||||
|
@@ -42,7 +42,6 @@ ExternalProject_Add(nanovdb
|
|||||||
URL_HASH ${NANOVDB_HASH_TYPE}=${NANOVDB_HASH}
|
URL_HASH ${NANOVDB_HASH_TYPE}=${NANOVDB_HASH}
|
||||||
PREFIX ${BUILD_DIR}/nanovdb
|
PREFIX ${BUILD_DIR}/nanovdb
|
||||||
SOURCE_SUBDIR nanovdb
|
SOURCE_SUBDIR nanovdb
|
||||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/nanovdb/src/nanovdb < ${PATCH_DIR}/nanovdb.diff
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/nanovdb ${DEFAULT_CMAKE_FLAGS} ${NANOVDB_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/nanovdb ${DEFAULT_CMAKE_FLAGS} ${NANOVDB_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/nanovdb
|
INSTALL_DIR ${LIBDIR}/nanovdb
|
||||||
)
|
)
|
||||||
|
@@ -39,7 +39,7 @@ endif()
|
|||||||
set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE STRING "Path for downloaded files")
|
set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE STRING "Path for downloaded files")
|
||||||
# This path must be hard-coded like this, so that the GNUmakefile knows where it is and can pass it to make_source_archive.py:
|
# This path must be hard-coded like this, so that the GNUmakefile knows where it is and can pass it to make_source_archive.py:
|
||||||
set(PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages")
|
set(PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages")
|
||||||
option(PACKAGE_USE_UPSTREAM_SOURCES "Use sources upstream to download the package sources, when OFF the blender mirror will be used" ON)
|
option(PACKAGE_USE_UPSTREAM_SOURCES "Use soures upstream to download the package sources, when OFF the blender mirror will be used" ON)
|
||||||
|
|
||||||
file(TO_CMAKE_PATH ${DOWNLOAD_DIR} DOWNLOAD_DIR)
|
file(TO_CMAKE_PATH ${DOWNLOAD_DIR} DOWNLOAD_DIR)
|
||||||
file(TO_CMAKE_PATH ${PACKAGE_DIR} PACKAGE_DIR)
|
file(TO_CMAKE_PATH ${PACKAGE_DIR} PACKAGE_DIR)
|
||||||
|
@@ -24,7 +24,7 @@ if(MSVC)
|
|||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND echo packaging python
|
COMMAND echo packaging python
|
||||||
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND echo this should ouput at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python.exe ${PYTARGET}/bin/python.exe
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python.exe ${PYTARGET}/bin/python.exe
|
||||||
@@ -43,7 +43,7 @@ if(MSVC)
|
|||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND echo packaging python
|
COMMAND echo packaging python
|
||||||
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND echo this should ouput at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib ${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python${PYTHON_POSTFIX}.exe ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
COMMAND ${CMAKE_COMMAND} -E copy ${PYSRC}/python${PYTHON_POSTFIX}.exe ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
|
||||||
|
@@ -18,17 +18,11 @@
|
|||||||
|
|
||||||
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
if(WIN32 AND BUILD_MODE STREQUAL Debug)
|
||||||
set(SITE_PACKAGES_EXTRA --global-option build --global-option --debug)
|
set(SITE_PACKAGES_EXTRA --global-option build --global-option --debug)
|
||||||
# zstandard is determined to build and link release mode libs in a debug
|
|
||||||
# configuration, the only way to make it happy is to bend to its will
|
|
||||||
# and give it a library to link with.
|
|
||||||
set(PIP_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}_d.lib ${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib)
|
|
||||||
else()
|
|
||||||
set(PIP_CONFIGURE_COMMAND echo ".")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
ExternalProject_Add(external_python_site_packages
|
ExternalProject_Add(external_python_site_packages
|
||||||
DOWNLOAD_COMMAND ""
|
DOWNLOAD_COMMAND ""
|
||||||
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
|
CONFIGURE_COMMAND ""
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
PREFIX ${BUILD_DIR}/site_packages
|
PREFIX ${BUILD_DIR}/site_packages
|
||||||
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} --no-binary :all:
|
INSTALL_COMMAND ${PYTHON_BINARY} -m pip install ${SITE_PACKAGES_EXTRA} cython==${CYTHON_VERSION} idna==${IDNA_VERSION} charset-normalizer==${CHARSET_NORMALIZER_VERSION} urllib3==${URLLIB3_VERSION} certifi==${CERTIFI_VERSION} requests==${REQUESTS_VERSION} zstandard==${ZSTANDARD_VERSION} --no-binary :all:
|
||||||
|
@@ -371,18 +371,18 @@ NO_BUILD=false
|
|||||||
NO_CONFIRM=false
|
NO_CONFIRM=false
|
||||||
USE_CXX11=true
|
USE_CXX11=true
|
||||||
|
|
||||||
# Note about versions: Min is inclusive, Mex is 'minimum exclusive' (i.e. XXX_VERSION_MIN <= ACTUAL_VERSION < XXX_VERSION_MEX)
|
# Note about versions: Min is inclusive, Max is exclusive (i.e. XXX_VERSION_MIN <= ACTUAL_VERSION < XXX_VERSION_MAX)
|
||||||
# XXX_VERSION is officially supported/used version in official builds.
|
# XXX_VERSION is officially supported/used version in official builds.
|
||||||
# XXX_VERSION_SHORT is used for various things, like preferred version (when distribution provides several of them),
|
# XXX_VERSION_SHORT is used for various things, like preferred version (when distribution provides several of them),
|
||||||
# and to name shortcuts to built libraries' installation directories...
|
# and to name shortcuts to built libraries' installation directories...
|
||||||
|
|
||||||
CLANG_FORMAT_VERSION_MIN="6.0"
|
CLANG_FORMAT_VERSION_MIN="6.0"
|
||||||
CLANG_FORMAT_VERSION_MEX="10.0"
|
CLANG_FORMAT_VERSION_MAX="10.0"
|
||||||
|
|
||||||
PYTHON_VERSION="3.9.7"
|
PYTHON_VERSION="3.9.7"
|
||||||
PYTHON_VERSION_SHORT="3.9"
|
PYTHON_VERSION_SHORT="3.9"
|
||||||
PYTHON_VERSION_MIN="3.7"
|
PYTHON_VERSION_MIN="3.7"
|
||||||
PYTHON_VERSION_MEX="3.11"
|
PYTHON_VERSION_MAX="3.11"
|
||||||
PYTHON_VERSION_INSTALLED=$PYTHON_VERSION_SHORT
|
PYTHON_VERSION_INSTALLED=$PYTHON_VERSION_SHORT
|
||||||
PYTHON_FORCE_BUILD=false
|
PYTHON_FORCE_BUILD=false
|
||||||
PYTHON_FORCE_REBUILD=false
|
PYTHON_FORCE_REBUILD=false
|
||||||
@@ -391,48 +391,48 @@ PYTHON_SKIP=false
|
|||||||
# Additional Python modules.
|
# Additional Python modules.
|
||||||
PYTHON_IDNA_VERSION="3.2"
|
PYTHON_IDNA_VERSION="3.2"
|
||||||
PYTHON_IDNA_VERSION_MIN="2.0"
|
PYTHON_IDNA_VERSION_MIN="2.0"
|
||||||
PYTHON_IDNA_VERSION_MEX="4.0"
|
PYTHON_IDNA_VERSION_MAX="3.2"
|
||||||
PYTHON_IDNA_NAME="idna"
|
PYTHON_IDNA_NAME="idna"
|
||||||
|
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION="2.0.6"
|
PYTHON_CHARSET_NORMALIZER_VERSION="2.0.6"
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION_MIN="2.0.6"
|
PYTHON_CHARSET_NORMALIZER_VERSION_MIN="2.0.6"
|
||||||
PYTHON_CHARSET_NORMALIZER_VERSION_MEX="2.1.0" # requests uses `charset_normalizer~=2.0.0`
|
PYTHON_CHARSET_NORMALIZER_VERSION_MAX="2.1.0" # requests uses `charset_normalizer~=2.0.0`
|
||||||
PYTHON_CHARSET_NORMALIZER_NAME="charset-normalizer"
|
PYTHON_CHARSET_NORMALIZER_NAME="charset-normalizer"
|
||||||
|
|
||||||
PYTHON_URLLIB3_VERSION="1.26.7"
|
PYTHON_URLLIB3_VERSION="1.26.7"
|
||||||
PYTHON_URLLIB3_VERSION_MIN="1.0"
|
PYTHON_URLLIB3_VERSION_MIN="1.0"
|
||||||
PYTHON_URLLIB3_VERSION_MEX="2.0"
|
PYTHON_URLLIB3_VERSION_MAX="2.0"
|
||||||
PYTHON_URLLIB3_NAME="urllib3"
|
PYTHON_URLLIB3_NAME="urllib3"
|
||||||
|
|
||||||
PYTHON_CERTIFI_VERSION="2021.10.8"
|
PYTHON_CERTIFI_VERSION="2021.10.8"
|
||||||
PYTHON_CERTIFI_VERSION_MIN="2021.0"
|
PYTHON_CERTIFI_VERSION_MIN="2021.0"
|
||||||
PYTHON_CERTIFI_VERSION_MEX="2023.0"
|
PYTHON_CERTIFI_VERSION_MAX="2023.0"
|
||||||
PYTHON_CERTIFI_NAME="certifi"
|
PYTHON_CERTIFI_NAME="certifi"
|
||||||
|
|
||||||
PYTHON_REQUESTS_VERSION="2.23.0"
|
PYTHON_REQUESTS_VERSION="2.23.0"
|
||||||
PYTHON_REQUESTS_VERSION_MIN="2.0"
|
PYTHON_REQUESTS_VERSION_MIN="2.0"
|
||||||
PYTHON_REQUESTS_VERSION_MEX="3.0"
|
PYTHON_REQUESTS_VERSION_MAX="3.0"
|
||||||
PYTHON_REQUESTS_NAME="requests"
|
PYTHON_REQUESTS_NAME="requests"
|
||||||
|
|
||||||
PYTHON_ZSTANDARD_VERSION="0.15.2"
|
PYTHON_ZSTANDARD_VERSION="0.15.2"
|
||||||
PYTHON_ZSTANDARD_VERSION_MIN="0.15.2"
|
PYTHON_ZSTANDARD_VERSION_MIN="0.15.2"
|
||||||
PYTHON_ZSTANDARD_VERSION_MEX="0.16.0"
|
PYTHON_ZSTANDARD_VERSION_MAX="0.16.0"
|
||||||
PYTHON_ZSTANDARD_NAME="zstandard"
|
PYTHON_ZSTANDARD_NAME="zstandard"
|
||||||
|
|
||||||
PYTHON_NUMPY_VERSION="1.21.2"
|
PYTHON_NUMPY_VERSION="1.21.2"
|
||||||
PYTHON_NUMPY_VERSION_MIN="1.14"
|
PYTHON_NUMPY_VERSION_MIN="1.14"
|
||||||
PYTHON_NUMPY_VERSION_MEX="2.0"
|
PYTHON_NUMPY_VERSION_MAX="2.0"
|
||||||
PYTHON_NUMPY_NAME="numpy"
|
PYTHON_NUMPY_NAME="numpy"
|
||||||
|
|
||||||
# As package-ready parameters (only used with distro packages).
|
# As package-ready parameters (only used with distro packages).
|
||||||
PYTHON_MODULES_PACKAGES=(
|
PYTHON_MODULES_PACKAGES=(
|
||||||
"$PYTHON_IDNA_NAME $PYTHON_IDNA_VERSION_MIN $PYTHON_IDNA_VERSION_MEX"
|
"$PYTHON_IDNA_NAME $PYTHON_IDNA_VERSION_MIN $PYTHON_IDNA_VERSION_MAX"
|
||||||
"$PYTHON_CHARSET_NORMALIZER_NAME $PYTHON_CHARSET_NORMALIZER_VERSION_MIN $PYTHON_CHARSET_NORMALIZER_VERSION_MEX"
|
"$PYTHON_CHARSET_NORMALIZER_NAME $PYTHON_CHARSET_NORMALIZER_VERSION_MIN $PYTHON_CHARSET_NORMALIZER_VERSION_MAX"
|
||||||
"$PYTHON_URLLIB3_NAME $PYTHON_URLLIB3_VERSION_MIN $PYTHON_URLLIB3_VERSION_MEX"
|
"$PYTHON_URLLIB3_NAME $PYTHON_URLLIB3_VERSION_MIN $PYTHON_URLLIB3_VERSION_MAX"
|
||||||
"$PYTHON_CERTIFI_NAME $PYTHON_CERTIFI_VERSION_MIN $PYTHON_CERTIFI_VERSION_MEX"
|
"$PYTHON_CERTIFI_NAME $PYTHON_CERTIFI_VERSION_MIN $PYTHON_CERTIFI_VERSION_MAX"
|
||||||
"$PYTHON_REQUESTS_NAME $PYTHON_REQUESTS_VERSION_MIN $PYTHON_REQUESTS_VERSION_MEX"
|
"$PYTHON_REQUESTS_NAME $PYTHON_REQUESTS_VERSION_MIN $PYTHON_REQUESTS_VERSION_MAX"
|
||||||
"$PYTHON_ZSTANDARD_NAME $PYTHON_ZSTANDARD_VERSION_MIN $PYTHON_ZSTANDARD_VERSION_MEX"
|
"$PYTHON_ZSTANDARD_NAME $PYTHON_ZSTANDARD_VERSION_MIN $PYTHON_ZSTANDARD_VERSION_MAX"
|
||||||
"$PYTHON_NUMPY_NAME $PYTHON_NUMPY_VERSION_MIN $PYTHON_NUMPY_VERSION_MEX"
|
"$PYTHON_NUMPY_NAME $PYTHON_NUMPY_VERSION_MIN $PYTHON_NUMPY_VERSION_MAX"
|
||||||
)
|
)
|
||||||
|
|
||||||
# As pip-ready parameters (only used when building python).
|
# As pip-ready parameters (only used when building python).
|
||||||
@@ -450,7 +450,7 @@ PYTHON_MODULES_PIP=(
|
|||||||
BOOST_VERSION="1.73.0"
|
BOOST_VERSION="1.73.0"
|
||||||
BOOST_VERSION_SHORT="1.73"
|
BOOST_VERSION_SHORT="1.73"
|
||||||
BOOST_VERSION_MIN="1.49"
|
BOOST_VERSION_MIN="1.49"
|
||||||
BOOST_VERSION_MEX="2.0"
|
BOOST_VERSION_MAX="2.0"
|
||||||
BOOST_FORCE_BUILD=false
|
BOOST_FORCE_BUILD=false
|
||||||
BOOST_FORCE_REBUILD=false
|
BOOST_FORCE_REBUILD=false
|
||||||
BOOST_SKIP=false
|
BOOST_SKIP=false
|
||||||
@@ -459,7 +459,7 @@ TBB_VERSION="2020"
|
|||||||
TBB_VERSION_SHORT="2020"
|
TBB_VERSION_SHORT="2020"
|
||||||
TBB_VERSION_UPDATE="_U2" # Used for source packages...
|
TBB_VERSION_UPDATE="_U2" # Used for source packages...
|
||||||
TBB_VERSION_MIN="2018"
|
TBB_VERSION_MIN="2018"
|
||||||
TBB_VERSION_MEX="2022"
|
TBB_VERSION_MAX="2022"
|
||||||
TBB_FORCE_BUILD=false
|
TBB_FORCE_BUILD=false
|
||||||
TBB_FORCE_REBUILD=false
|
TBB_FORCE_REBUILD=false
|
||||||
TBB_SKIP=false
|
TBB_SKIP=false
|
||||||
@@ -467,7 +467,7 @@ TBB_SKIP=false
|
|||||||
OCIO_VERSION="2.0.0"
|
OCIO_VERSION="2.0.0"
|
||||||
OCIO_VERSION_SHORT="2.0"
|
OCIO_VERSION_SHORT="2.0"
|
||||||
OCIO_VERSION_MIN="2.0"
|
OCIO_VERSION_MIN="2.0"
|
||||||
OCIO_VERSION_MEX="3.0"
|
OCIO_VERSION_MAX="3.0"
|
||||||
OCIO_FORCE_BUILD=false
|
OCIO_FORCE_BUILD=false
|
||||||
OCIO_FORCE_REBUILD=false
|
OCIO_FORCE_REBUILD=false
|
||||||
OCIO_SKIP=false
|
OCIO_SKIP=false
|
||||||
@@ -475,7 +475,7 @@ OCIO_SKIP=false
|
|||||||
OPENEXR_VERSION="2.5.5"
|
OPENEXR_VERSION="2.5.5"
|
||||||
OPENEXR_VERSION_SHORT="2.5"
|
OPENEXR_VERSION_SHORT="2.5"
|
||||||
OPENEXR_VERSION_MIN="2.4"
|
OPENEXR_VERSION_MIN="2.4"
|
||||||
OPENEXR_VERSION_MEX="3.0"
|
OPENEXR_VERSION_MAX="3.0"
|
||||||
OPENEXR_FORCE_BUILD=false
|
OPENEXR_FORCE_BUILD=false
|
||||||
OPENEXR_FORCE_REBUILD=false
|
OPENEXR_FORCE_REBUILD=false
|
||||||
OPENEXR_SKIP=false
|
OPENEXR_SKIP=false
|
||||||
@@ -484,7 +484,7 @@ _with_built_openexr=false
|
|||||||
OIIO_VERSION="2.2.15.1"
|
OIIO_VERSION="2.2.15.1"
|
||||||
OIIO_VERSION_SHORT="2.2"
|
OIIO_VERSION_SHORT="2.2"
|
||||||
OIIO_VERSION_MIN="2.1.12"
|
OIIO_VERSION_MIN="2.1.12"
|
||||||
OIIO_VERSION_MEX="2.3.0"
|
OIIO_VERSION_MAX="2.3.0"
|
||||||
OIIO_FORCE_BUILD=false
|
OIIO_FORCE_BUILD=false
|
||||||
OIIO_FORCE_REBUILD=false
|
OIIO_FORCE_REBUILD=false
|
||||||
OIIO_SKIP=false
|
OIIO_SKIP=false
|
||||||
@@ -492,7 +492,7 @@ OIIO_SKIP=false
|
|||||||
LLVM_VERSION="12.0.0"
|
LLVM_VERSION="12.0.0"
|
||||||
LLVM_VERSION_SHORT="12.0"
|
LLVM_VERSION_SHORT="12.0"
|
||||||
LLVM_VERSION_MIN="11.0"
|
LLVM_VERSION_MIN="11.0"
|
||||||
LLVM_VERSION_MEX="13.0"
|
LLVM_VERSION_MAX="13.0"
|
||||||
LLVM_VERSION_FOUND=""
|
LLVM_VERSION_FOUND=""
|
||||||
LLVM_FORCE_BUILD=false
|
LLVM_FORCE_BUILD=false
|
||||||
LLVM_FORCE_REBUILD=false
|
LLVM_FORCE_REBUILD=false
|
||||||
@@ -502,7 +502,7 @@ LLVM_SKIP=false
|
|||||||
OSL_VERSION="1.11.14.1"
|
OSL_VERSION="1.11.14.1"
|
||||||
OSL_VERSION_SHORT="1.11"
|
OSL_VERSION_SHORT="1.11"
|
||||||
OSL_VERSION_MIN="1.11"
|
OSL_VERSION_MIN="1.11"
|
||||||
OSL_VERSION_MEX="2.0"
|
OSL_VERSION_MAX="2.0"
|
||||||
OSL_FORCE_BUILD=false
|
OSL_FORCE_BUILD=false
|
||||||
OSL_FORCE_REBUILD=false
|
OSL_FORCE_REBUILD=false
|
||||||
OSL_SKIP=false
|
OSL_SKIP=false
|
||||||
@@ -511,7 +511,7 @@ OSL_SKIP=false
|
|||||||
OSD_VERSION="3.4.3"
|
OSD_VERSION="3.4.3"
|
||||||
OSD_VERSION_SHORT="3.4"
|
OSD_VERSION_SHORT="3.4"
|
||||||
OSD_VERSION_MIN="3.4"
|
OSD_VERSION_MIN="3.4"
|
||||||
OSD_VERSION_MEX="4.0"
|
OSD_VERSION_MAX="4.0"
|
||||||
OSD_FORCE_BUILD=false
|
OSD_FORCE_BUILD=false
|
||||||
OSD_FORCE_REBUILD=false
|
OSD_FORCE_REBUILD=false
|
||||||
OSD_SKIP=false
|
OSD_SKIP=false
|
||||||
@@ -522,7 +522,7 @@ OPENVDB_BLOSC_VERSION="1.5.0"
|
|||||||
OPENVDB_VERSION="8.0.1"
|
OPENVDB_VERSION="8.0.1"
|
||||||
OPENVDB_VERSION_SHORT="8.0"
|
OPENVDB_VERSION_SHORT="8.0"
|
||||||
OPENVDB_VERSION_MIN="8.0"
|
OPENVDB_VERSION_MIN="8.0"
|
||||||
OPENVDB_VERSION_MEX="8.1"
|
OPENVDB_VERSION_MAX="8.1"
|
||||||
OPENVDB_FORCE_BUILD=false
|
OPENVDB_FORCE_BUILD=false
|
||||||
OPENVDB_FORCE_REBUILD=false
|
OPENVDB_FORCE_REBUILD=false
|
||||||
OPENVDB_SKIP=false
|
OPENVDB_SKIP=false
|
||||||
@@ -531,7 +531,7 @@ OPENVDB_SKIP=false
|
|||||||
ALEMBIC_VERSION="1.7.16"
|
ALEMBIC_VERSION="1.7.16"
|
||||||
ALEMBIC_VERSION_SHORT="1.7"
|
ALEMBIC_VERSION_SHORT="1.7"
|
||||||
ALEMBIC_VERSION_MIN="1.7"
|
ALEMBIC_VERSION_MIN="1.7"
|
||||||
ALEMBIC_VERSION_MEX="2.0"
|
ALEMBIC_VERSION_MAX="2.0"
|
||||||
ALEMBIC_FORCE_BUILD=false
|
ALEMBIC_FORCE_BUILD=false
|
||||||
ALEMBIC_FORCE_REBUILD=false
|
ALEMBIC_FORCE_REBUILD=false
|
||||||
ALEMBIC_SKIP=false
|
ALEMBIC_SKIP=false
|
||||||
@@ -539,7 +539,7 @@ ALEMBIC_SKIP=false
|
|||||||
USD_VERSION="21.02"
|
USD_VERSION="21.02"
|
||||||
USD_VERSION_SHORT="21.02"
|
USD_VERSION_SHORT="21.02"
|
||||||
USD_VERSION_MIN="20.05"
|
USD_VERSION_MIN="20.05"
|
||||||
USD_VERSION_MEX="22.00"
|
USD_VERSION_MAX="22.00"
|
||||||
USD_FORCE_BUILD=false
|
USD_FORCE_BUILD=false
|
||||||
USD_FORCE_REBUILD=false
|
USD_FORCE_REBUILD=false
|
||||||
USD_SKIP=false
|
USD_SKIP=false
|
||||||
@@ -547,7 +547,7 @@ USD_SKIP=false
|
|||||||
OPENCOLLADA_VERSION="1.6.68"
|
OPENCOLLADA_VERSION="1.6.68"
|
||||||
OPENCOLLADA_VERSION_SHORT="1.6"
|
OPENCOLLADA_VERSION_SHORT="1.6"
|
||||||
OPENCOLLADA_VERSION_MIN="1.6.68"
|
OPENCOLLADA_VERSION_MIN="1.6.68"
|
||||||
OPENCOLLADA_VERSION_MEX="1.7"
|
OPENCOLLADA_VERSION_MAX="1.7"
|
||||||
OPENCOLLADA_FORCE_BUILD=false
|
OPENCOLLADA_FORCE_BUILD=false
|
||||||
OPENCOLLADA_FORCE_REBUILD=false
|
OPENCOLLADA_FORCE_REBUILD=false
|
||||||
OPENCOLLADA_SKIP=false
|
OPENCOLLADA_SKIP=false
|
||||||
@@ -555,7 +555,7 @@ OPENCOLLADA_SKIP=false
|
|||||||
EMBREE_VERSION="3.10.0"
|
EMBREE_VERSION="3.10.0"
|
||||||
EMBREE_VERSION_SHORT="3.10"
|
EMBREE_VERSION_SHORT="3.10"
|
||||||
EMBREE_VERSION_MIN="3.10"
|
EMBREE_VERSION_MIN="3.10"
|
||||||
EMBREE_VERSION_MEX="4.0"
|
EMBREE_VERSION_MAX="4.0"
|
||||||
EMBREE_FORCE_BUILD=false
|
EMBREE_FORCE_BUILD=false
|
||||||
EMBREE_FORCE_REBUILD=false
|
EMBREE_FORCE_REBUILD=false
|
||||||
EMBREE_SKIP=false
|
EMBREE_SKIP=false
|
||||||
@@ -563,7 +563,7 @@ EMBREE_SKIP=false
|
|||||||
OIDN_VERSION="1.4.1"
|
OIDN_VERSION="1.4.1"
|
||||||
OIDN_VERSION_SHORT="1.4"
|
OIDN_VERSION_SHORT="1.4"
|
||||||
OIDN_VERSION_MIN="1.4.0"
|
OIDN_VERSION_MIN="1.4.0"
|
||||||
OIDN_VERSION_MEX="1.5"
|
OIDN_VERSION_MAX="1.5"
|
||||||
OIDN_FORCE_BUILD=false
|
OIDN_FORCE_BUILD=false
|
||||||
OIDN_FORCE_REBUILD=false
|
OIDN_FORCE_REBUILD=false
|
||||||
OIDN_SKIP=false
|
OIDN_SKIP=false
|
||||||
@@ -573,7 +573,7 @@ ISPC_VERSION="1.16.0"
|
|||||||
FFMPEG_VERSION="4.4"
|
FFMPEG_VERSION="4.4"
|
||||||
FFMPEG_VERSION_SHORT="4.4"
|
FFMPEG_VERSION_SHORT="4.4"
|
||||||
FFMPEG_VERSION_MIN="3.0"
|
FFMPEG_VERSION_MIN="3.0"
|
||||||
FFMPEG_VERSION_MEX="5.0"
|
FFMPEG_VERSION_MAX="5.0"
|
||||||
FFMPEG_FORCE_BUILD=false
|
FFMPEG_FORCE_BUILD=false
|
||||||
FFMPEG_FORCE_REBUILD=false
|
FFMPEG_FORCE_REBUILD=false
|
||||||
FFMPEG_SKIP=false
|
FFMPEG_SKIP=false
|
||||||
@@ -582,7 +582,7 @@ _ffmpeg_list_sep=";"
|
|||||||
XR_OPENXR_VERSION="1.0.17"
|
XR_OPENXR_VERSION="1.0.17"
|
||||||
XR_OPENXR_VERSION_SHORT="1.0"
|
XR_OPENXR_VERSION_SHORT="1.0"
|
||||||
XR_OPENXR_VERSION_MIN="1.0.8"
|
XR_OPENXR_VERSION_MIN="1.0.8"
|
||||||
XR_OPENXR_VERSION_MEX="2.0"
|
XR_OPENXR_VERSION_MAX="2.0"
|
||||||
XR_OPENXR_FORCE_BUILD=false
|
XR_OPENXR_FORCE_BUILD=false
|
||||||
XR_OPENXR_FORCE_REBUILD=false
|
XR_OPENXR_FORCE_REBUILD=false
|
||||||
XR_OPENXR_SKIP=false
|
XR_OPENXR_SKIP=false
|
||||||
@@ -1148,7 +1148,7 @@ You may also want to build them yourself (optional ones are [between brackets]):
|
|||||||
|
|
||||||
* Python $PYTHON_VERSION (from $PYTHON_SOURCE).
|
* Python $PYTHON_VERSION (from $PYTHON_SOURCE).
|
||||||
** [IDNA $PYTHON_IDNA_VERSION] (use pip).
|
** [IDNA $PYTHON_IDNA_VERSION] (use pip).
|
||||||
** [Charset Normalizer $PYTHON_CHARSET_NORMALIZER_VERSION] (use pip).
|
** [Chardet $PYTHON_CHARSET_NORMALIZER_VERSION] (use pip).
|
||||||
** [Urllib3 $PYTHON_URLLIB3_VERSION] (use pip).
|
** [Urllib3 $PYTHON_URLLIB3_VERSION] (use pip).
|
||||||
** [Certifi $PYTHON_CERTIFI_VERSION] (use pip).
|
** [Certifi $PYTHON_CERTIFI_VERSION] (use pip).
|
||||||
** [Requests $PYTHON_REQUESTS_VERSION] (use pip).
|
** [Requests $PYTHON_REQUESTS_VERSION] (use pip).
|
||||||
@@ -1826,7 +1826,7 @@ compile_OCIO() {
|
|||||||
# Force linking against static libs
|
# Force linking against static libs
|
||||||
#rm -f $_inst/lib/*.so*
|
#rm -f $_inst/lib/*.so*
|
||||||
|
|
||||||
# Additional dependencies
|
# Additional depencencies
|
||||||
#cp ext/dist/lib/libtinyxml.a $_inst/lib
|
#cp ext/dist/lib/libtinyxml.a $_inst/lib
|
||||||
#cp ext/dist/lib/libyaml-cpp.a $_inst/lib
|
#cp ext/dist/lib/libyaml-cpp.a $_inst/lib
|
||||||
|
|
||||||
@@ -2083,9 +2083,9 @@ compile_OIIO() {
|
|||||||
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
cmake_d="$cmake_d -D OPENEXR_VERSION=$OPENEXR_VERSION"
|
||||||
|
|
||||||
if [ "$_with_built_openexr" = true ]; then
|
if [ "$_with_built_openexr" = true ]; then
|
||||||
cmake_d="$cmake_d -D ILMBASE_ROOT=$INST/openexr"
|
cmake_d="$cmake_d -D ILMBASE_HOME=$INST/openexr"
|
||||||
cmake_d="$cmake_d -D OPENEXR_ROOT=$INST/openexr"
|
cmake_d="$cmake_d -D OPENEXR_HOME=$INST/openexr"
|
||||||
INFO "Ilmbase_ROOT=$INST/openexr"
|
INFO "ILMBASE_HOME=$INST/openexr"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ptex is only needed when nicholas bishop is ready
|
# ptex is only needed when nicholas bishop is ready
|
||||||
@@ -2374,9 +2374,9 @@ compile_OSL() {
|
|||||||
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
#~ cmake_d="$cmake_d -D ILMBASE_VERSION=$ILMBASE_VERSION"
|
||||||
|
|
||||||
if [ "$_with_built_openexr" = true ]; then
|
if [ "$_with_built_openexr" = true ]; then
|
||||||
cmake_d="$cmake_d -D ILMBASE_ROOT=$INST/openexr"
|
INFO "ILMBASE_HOME=$INST/openexr"
|
||||||
cmake_d="$cmake_d -D OPENEXR_ROOT=$INST/openexr"
|
cmake_d="$cmake_d -D OPENEXR_ROOT_DIR=$INST/openexr"
|
||||||
INFO "Ilmbase_ROOT=$INST/openexr"
|
cmake_d="$cmake_d -D ILMBASE_ROOT_DIR=$INST/openexr"
|
||||||
# XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
|
# XXX Temp workaround... sigh, ILMBase really messed the things up by defining their custom names ON by default :(
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -4036,7 +4036,7 @@ install_DEB() {
|
|||||||
INFO "Forced Python building, as requested..."
|
INFO "Forced Python building, as requested..."
|
||||||
_do_compile_python=true
|
_do_compile_python=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB python3-dev $PYTHON_VERSION_MIN $PYTHON_VERSION_MEX
|
check_package_version_ge_lt_DEB python3-dev $PYTHON_VERSION_MIN $PYTHON_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_DEB python3-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_DEB python3-dev` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
||||||
|
|
||||||
@@ -4049,8 +4049,8 @@ install_DEB() {
|
|||||||
module=($module)
|
module=($module)
|
||||||
package="python3-${module[0]}"
|
package="python3-${module[0]}"
|
||||||
package_vmin=${module[1]}
|
package_vmin=${module[1]}
|
||||||
package_vmex=${module[2]}
|
package_vmax=${module[2]}
|
||||||
check_package_version_ge_lt_DEB "$package" $package_vmin $package_vmex
|
check_package_version_ge_lt_DEB "$package" $package_vmin $package_vmax
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB "$package"
|
install_packages_DEB "$package"
|
||||||
else
|
else
|
||||||
@@ -4076,7 +4076,7 @@ install_DEB() {
|
|||||||
INFO "Forced Boost building, as requested..."
|
INFO "Forced Boost building, as requested..."
|
||||||
compile_Boost
|
compile_Boost
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libboost-dev $BOOST_VERSION_MIN $BOOST_VERSION_MEX
|
check_package_version_ge_lt_DEB libboost-dev $BOOST_VERSION_MIN $BOOST_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libboost-dev
|
install_packages_DEB libboost-dev
|
||||||
|
|
||||||
@@ -4097,7 +4097,7 @@ install_DEB() {
|
|||||||
INFO "Forced TBB building, as requested..."
|
INFO "Forced TBB building, as requested..."
|
||||||
compile_TBB
|
compile_TBB
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libtbb-dev $TBB_VERSION_MIN $TBB_VERSION_MEX
|
check_package_version_ge_lt_DEB libtbb-dev $TBB_VERSION_MIN $TBB_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libtbb-dev
|
install_packages_DEB libtbb-dev
|
||||||
clean_TBB
|
clean_TBB
|
||||||
@@ -4114,7 +4114,7 @@ install_DEB() {
|
|||||||
INFO "Forced OpenColorIO building, as requested..."
|
INFO "Forced OpenColorIO building, as requested..."
|
||||||
compile_OCIO
|
compile_OCIO
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libopencolorio-dev $OCIO_VERSION_MIN $OCIO_VERSION_MEX
|
check_package_version_ge_lt_DEB libopencolorio-dev $OCIO_VERSION_MIN $OCIO_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libopencolorio-dev
|
install_packages_DEB libopencolorio-dev
|
||||||
clean_OCIO
|
clean_OCIO
|
||||||
@@ -4131,7 +4131,7 @@ install_DEB() {
|
|||||||
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
||||||
compile_OPENEXR
|
compile_OPENEXR
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libopenexr-dev $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MEX
|
check_package_version_ge_lt_DEB libopenexr-dev $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libopenexr-dev
|
install_packages_DEB libopenexr-dev
|
||||||
OPENEXR_VERSION=`get_package_version_DEB libopenexr-dev`
|
OPENEXR_VERSION=`get_package_version_DEB libopenexr-dev`
|
||||||
@@ -4152,7 +4152,7 @@ install_DEB() {
|
|||||||
INFO "Forced OpenImageIO building, as requested..."
|
INFO "Forced OpenImageIO building, as requested..."
|
||||||
compile_OIIO
|
compile_OIIO
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libopenimageio-dev $OIIO_VERSION_MIN $OIIO_VERSION_MEX
|
check_package_version_ge_lt_DEB libopenimageio-dev $OIIO_VERSION_MIN $OIIO_VERSION_MAX
|
||||||
if [ $? -eq 0 -a "$_with_built_openexr" = false ]; then
|
if [ $? -eq 0 -a "$_with_built_openexr" = false ]; then
|
||||||
install_packages_DEB libopenimageio-dev openimageio-tools
|
install_packages_DEB libopenimageio-dev openimageio-tools
|
||||||
clean_OIIO
|
clean_OIIO
|
||||||
@@ -4172,7 +4172,7 @@ install_DEB() {
|
|||||||
INFO "Forced LLVM building, as requested..."
|
INFO "Forced LLVM building, as requested..."
|
||||||
_do_compile_llvm=true
|
_do_compile_llvm=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB llvm-dev $LLVM_VERSION_MIN $LLVM_VERSION_MEX
|
check_package_version_ge_lt_DEB llvm-dev $LLVM_VERSION_MIN $LLVM_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB llvm-dev clang libclang-dev
|
install_packages_DEB llvm-dev clang libclang-dev
|
||||||
have_llvm=true
|
have_llvm=true
|
||||||
@@ -4203,7 +4203,7 @@ install_DEB() {
|
|||||||
INFO "Forced OpenShadingLanguage building, as requested..."
|
INFO "Forced OpenShadingLanguage building, as requested..."
|
||||||
_do_compile_osl=true
|
_do_compile_osl=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libopenshadinglanguage-dev $OSL_VERSION_MIN $OSL_VERSION_MEX
|
check_package_version_ge_lt_DEB libopenshadinglanguage-dev $OSL_VERSION_MIN $OSL_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libopenshadinglanguage-dev
|
install_packages_DEB libopenshadinglanguage-dev
|
||||||
clean_OSL
|
clean_OSL
|
||||||
@@ -4241,7 +4241,7 @@ install_DEB() {
|
|||||||
INFO "Forced OpenVDB building, as requested..."
|
INFO "Forced OpenVDB building, as requested..."
|
||||||
compile_OPENVDB
|
compile_OPENVDB
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_DEB libopenvdb-dev $OPENVDB_VERSION_MIN $OPENVDB_VERSION_MEX
|
check_package_version_ge_lt_DEB libopenvdb-dev $OPENVDB_VERSION_MIN $OPENVDB_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libopenvdb-dev libblosc-dev
|
install_packages_DEB libopenvdb-dev libblosc-dev
|
||||||
clean_OPENVDB
|
clean_OPENVDB
|
||||||
@@ -4303,7 +4303,7 @@ install_DEB() {
|
|||||||
_do_compile_embree=true
|
_do_compile_embree=true
|
||||||
else
|
else
|
||||||
# There is a package, but it does not provide everything that Blender needs...
|
# There is a package, but it does not provide everything that Blender needs...
|
||||||
#~ check_package_version_ge_lt_DEB libembree-dev $EMBREE_VERSION_MIN $EMBREE_VERSION_MEX
|
#~ check_package_version_ge_lt_DEB libembree-dev $EMBREE_VERSION_MIN $EMBREE_VERSION_MAX
|
||||||
#~ if [ $? -eq 0 ]; then
|
#~ if [ $? -eq 0 ]; then
|
||||||
#~ install_packages_DEB libembree-dev
|
#~ install_packages_DEB libembree-dev
|
||||||
#~ clean_Embree
|
#~ clean_Embree
|
||||||
@@ -4345,7 +4345,7 @@ install_DEB() {
|
|||||||
# XXX Debian Testing / Ubuntu 16.04 finally includes FFmpeg, so check as usual
|
# XXX Debian Testing / Ubuntu 16.04 finally includes FFmpeg, so check as usual
|
||||||
check_package_DEB ffmpeg
|
check_package_DEB ffmpeg
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
check_package_version_ge_lt_DEB ffmpeg $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MEX
|
check_package_version_ge_lt_DEB ffmpeg $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_DEB libavdevice-dev
|
install_packages_DEB libavdevice-dev
|
||||||
clean_FFmpeg
|
clean_FFmpeg
|
||||||
@@ -4679,7 +4679,7 @@ install_RPM() {
|
|||||||
INFO "Forced Python building, as requested..."
|
INFO "Forced Python building, as requested..."
|
||||||
_do_compile_python=true
|
_do_compile_python=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM python3-devel $PYTHON_VERSION_MIN $PYTHON_VERSION_MEX
|
check_package_version_ge_lt_RPM python3-devel $PYTHON_VERSION_MIN $PYTHON_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_RPM python3-devel` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_RPM python3-devel` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
||||||
|
|
||||||
@@ -4691,8 +4691,8 @@ install_RPM() {
|
|||||||
module=($module)
|
module=($module)
|
||||||
package="python3-${module[0]}"
|
package="python3-${module[0]}"
|
||||||
package_vmin=${module[1]}
|
package_vmin=${module[1]}
|
||||||
package_vmex=${module[2]}
|
package_vmax=${module[2]}
|
||||||
check_package_version_ge_lt_RPM "$package" $package_vmin $package_vmex
|
check_package_version_ge_lt_RPM "$package" $package_vmin $package_vmax
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM "$package"
|
install_packages_RPM "$package"
|
||||||
else
|
else
|
||||||
@@ -4719,7 +4719,7 @@ install_RPM() {
|
|||||||
INFO "Forced Boost building, as requested..."
|
INFO "Forced Boost building, as requested..."
|
||||||
_do_compile_boost=true
|
_do_compile_boost=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM boost-devel $BOOST_VERSION_MIN $BOOST_VERSION_MEX
|
check_package_version_ge_lt_RPM boost-devel $BOOST_VERSION_MIN $BOOST_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM boost-devel
|
install_packages_RPM boost-devel
|
||||||
clean_Boost
|
clean_Boost
|
||||||
@@ -4746,7 +4746,7 @@ install_RPM() {
|
|||||||
INFO "Forced TBB building, as requested..."
|
INFO "Forced TBB building, as requested..."
|
||||||
compile_TBB
|
compile_TBB
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM tbb-devel $TBB_VERSION_MIN $TBB_VERSION_MEX
|
check_package_version_ge_lt_RPM tbb-devel $TBB_VERSION_MIN $TBB_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM tbb-devel
|
install_packages_RPM tbb-devel
|
||||||
clean_TBB
|
clean_TBB
|
||||||
@@ -4764,7 +4764,7 @@ install_RPM() {
|
|||||||
compile_OCIO
|
compile_OCIO
|
||||||
else
|
else
|
||||||
if [ "$RPM" = "SUSE" ]; then
|
if [ "$RPM" = "SUSE" ]; then
|
||||||
check_package_version_ge_lt_RPM OpenColorIO-devel $OCIO_VERSION_MIN $OCIO_VERSION_MEX
|
check_package_version_ge_lt_RPM OpenColorIO-devel $OCIO_VERSION_MIN $OCIO_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM OpenColorIO-devel
|
install_packages_RPM OpenColorIO-devel
|
||||||
clean_OCIO
|
clean_OCIO
|
||||||
@@ -4784,7 +4784,7 @@ install_RPM() {
|
|||||||
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
||||||
compile_OPENEXR
|
compile_OPENEXR
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM openexr-devel $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MEX
|
check_package_version_ge_lt_RPM openexr-devel $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM openexr-devel
|
install_packages_RPM openexr-devel
|
||||||
OPENEXR_VERSION=`get_package_version_RPM openexr-devel`
|
OPENEXR_VERSION=`get_package_version_RPM openexr-devel`
|
||||||
@@ -4802,7 +4802,7 @@ install_RPM() {
|
|||||||
INFO "Forced OpenImageIO building, as requested..."
|
INFO "Forced OpenImageIO building, as requested..."
|
||||||
compile_OIIO
|
compile_OIIO
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM OpenImageIO-devel $OIIO_VERSION_MIN $OIIO_VERSION_MEX
|
check_package_version_ge_lt_RPM OpenImageIO-devel $OIIO_VERSION_MIN $OIIO_VERSION_MAX
|
||||||
if [ $? -eq 0 -a $_with_built_openexr == false ]; then
|
if [ $? -eq 0 -a $_with_built_openexr == false ]; then
|
||||||
install_packages_RPM OpenImageIO-devel OpenImageIO-utils
|
install_packages_RPM OpenImageIO-devel OpenImageIO-utils
|
||||||
clean_OIIO
|
clean_OIIO
|
||||||
@@ -4827,7 +4827,7 @@ install_RPM() {
|
|||||||
else
|
else
|
||||||
CLANG_DEV="clang-devel"
|
CLANG_DEV="clang-devel"
|
||||||
fi
|
fi
|
||||||
check_package_version_ge_lt_RPM llvm-devel $LLVM_VERSION_MIN $LLVM_VERSION_MEX
|
check_package_version_ge_lt_RPM llvm-devel $LLVM_VERSION_MIN $LLVM_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM llvm-devel $CLANG_DEV
|
install_packages_RPM llvm-devel $CLANG_DEV
|
||||||
have_llvm=true
|
have_llvm=true
|
||||||
@@ -4863,7 +4863,7 @@ install_RPM() {
|
|||||||
else
|
else
|
||||||
OSL_DEV="openshadinglanguage-devel"
|
OSL_DEV="openshadinglanguage-devel"
|
||||||
fi
|
fi
|
||||||
check_package_version_ge_lt_RPM $OSL_DEV $OSL_VERSION_MIN $OSL_VERSION_MEX
|
check_package_version_ge_lt_RPM $OSL_DEV $OSL_VERSION_MIN $OSL_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM $OSL_DEV
|
install_packages_RPM $OSL_DEV
|
||||||
clean_OSL
|
clean_OSL
|
||||||
@@ -4958,7 +4958,7 @@ install_RPM() {
|
|||||||
_do_compile_embree=true
|
_do_compile_embree=true
|
||||||
else
|
else
|
||||||
# There is a package, but it does not provide everything that Blender needs...
|
# There is a package, but it does not provide everything that Blender needs...
|
||||||
#~ check_package_version_ge_lt_RPM embree-devel $EMBREE_VERSION_MIN $EMBREE_VERSION_MEX
|
#~ check_package_version_ge_lt_RPM embree-devel $EMBREE_VERSION_MIN $EMBREE_VERSION_MAX
|
||||||
#~ if [ $? -eq 0 ]; then
|
#~ if [ $? -eq 0 ]; then
|
||||||
#~ install_packages_RPM embree-devel
|
#~ install_packages_RPM embree-devel
|
||||||
#~ clean_Embree
|
#~ clean_Embree
|
||||||
@@ -4997,7 +4997,7 @@ install_RPM() {
|
|||||||
INFO "Forced FFMpeg building, as requested..."
|
INFO "Forced FFMpeg building, as requested..."
|
||||||
compile_FFmpeg
|
compile_FFmpeg
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_RPM ffmpeg-devel $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MEX
|
check_package_version_ge_lt_RPM ffmpeg-devel $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_RPM ffmpeg ffmpeg-devel
|
install_packages_RPM ffmpeg ffmpeg-devel
|
||||||
clean_FFmpeg
|
clean_FFmpeg
|
||||||
@@ -5222,7 +5222,7 @@ install_ARCH() {
|
|||||||
INFO "Forced Python building, as requested..."
|
INFO "Forced Python building, as requested..."
|
||||||
_do_compile_python=true
|
_do_compile_python=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH python $PYTHON_VERSION_MIN $PYTHON_VERSION_MEX
|
check_package_version_ge_lt_ARCH python $PYTHON_VERSION_MIN $PYTHON_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_ARCH python` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
PYTHON_VERSION_INSTALLED=$(echo `get_package_version_ARCH python` | sed -r 's/^([0-9]+\.[0-9]+).*/\1/')
|
||||||
|
|
||||||
@@ -5235,8 +5235,8 @@ install_ARCH() {
|
|||||||
module=($module)
|
module=($module)
|
||||||
package="python-${module[0]}"
|
package="python-${module[0]}"
|
||||||
package_vmin=${module[1]}
|
package_vmin=${module[1]}
|
||||||
package_vmex=${module[2]}
|
package_vmax=${module[2]}
|
||||||
check_package_version_ge_lt_ARCH "$package" $package_vmin $package_vmex
|
check_package_version_ge_lt_ARCH "$package" $package_vmin $package_vmax
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH "$package"
|
install_packages_ARCH "$package"
|
||||||
else
|
else
|
||||||
@@ -5262,7 +5262,7 @@ install_ARCH() {
|
|||||||
INFO "Forced Boost building, as requested..."
|
INFO "Forced Boost building, as requested..."
|
||||||
compile_Boost
|
compile_Boost
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH boost $BOOST_VERSION_MIN $BOOST_VERSION_MEX
|
check_package_version_ge_lt_ARCH boost $BOOST_VERSION_MIN $BOOST_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH boost
|
install_packages_ARCH boost
|
||||||
clean_Boost
|
clean_Boost
|
||||||
@@ -5279,7 +5279,7 @@ install_ARCH() {
|
|||||||
INFO "Forced TBB building, as requested..."
|
INFO "Forced TBB building, as requested..."
|
||||||
compile_TBB
|
compile_TBB
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH intel-tbb $TBB_VERSION_MIN $TBB_VERSION_MEX
|
check_package_version_ge_lt_ARCH intel-tbb $TBB_VERSION_MIN $TBB_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH intel-tbb
|
install_packages_ARCH intel-tbb
|
||||||
clean_TBB
|
clean_TBB
|
||||||
@@ -5296,7 +5296,7 @@ install_ARCH() {
|
|||||||
INFO "Forced OpenColorIO building, as requested..."
|
INFO "Forced OpenColorIO building, as requested..."
|
||||||
compile_OCIO
|
compile_OCIO
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH opencolorio $OCIO_VERSION_MIN $OCIO_VERSION_MEX
|
check_package_version_ge_lt_ARCH opencolorio $OCIO_VERSION_MIN $OCIO_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH opencolorio
|
install_packages_ARCH opencolorio
|
||||||
clean_OCIO
|
clean_OCIO
|
||||||
@@ -5313,7 +5313,7 @@ install_ARCH() {
|
|||||||
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
INFO "Forced ILMBase/OpenEXR building, as requested..."
|
||||||
compile_OPENEXR
|
compile_OPENEXR
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH openexr $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MEX
|
check_package_version_ge_lt_ARCH openexr $OPENEXR_VERSION_MIN $OPENEXR_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH openexr
|
install_packages_ARCH openexr
|
||||||
OPENEXR_VERSION=`get_package_version_ARCH openexr`
|
OPENEXR_VERSION=`get_package_version_ARCH openexr`
|
||||||
@@ -5332,7 +5332,7 @@ install_ARCH() {
|
|||||||
INFO "Forced OpenImageIO building, as requested..."
|
INFO "Forced OpenImageIO building, as requested..."
|
||||||
compile_OIIO
|
compile_OIIO
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH openimageio $OIIO_VERSION_MIN $OIIO_VERSION_MEX
|
check_package_version_ge_lt_ARCH openimageio $OIIO_VERSION_MIN $OIIO_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH openimageio
|
install_packages_ARCH openimageio
|
||||||
clean_OIIO
|
clean_OIIO
|
||||||
@@ -5352,7 +5352,7 @@ install_ARCH() {
|
|||||||
INFO "Forced LLVM building, as requested..."
|
INFO "Forced LLVM building, as requested..."
|
||||||
_do_compile_llvm=true
|
_do_compile_llvm=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH llvm $LLVM_VERSION_MIN $LLVM_VERSION_MEX
|
check_package_version_ge_lt_ARCH llvm $LLVM_VERSION_MIN $LLVM_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH llvm clang
|
install_packages_ARCH llvm clang
|
||||||
have_llvm=true
|
have_llvm=true
|
||||||
@@ -5383,7 +5383,7 @@ install_ARCH() {
|
|||||||
INFO "Forced OpenShadingLanguage building, as requested..."
|
INFO "Forced OpenShadingLanguage building, as requested..."
|
||||||
_do_compile_osl=true
|
_do_compile_osl=true
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH openshadinglanguage $OSL_VERSION_MIN $OSL_VERSION_MEX
|
check_package_version_ge_lt_ARCH openshadinglanguage $OSL_VERSION_MIN $OSL_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH openshadinglanguage
|
install_packages_ARCH openshadinglanguage
|
||||||
clean_OSL
|
clean_OSL
|
||||||
@@ -5409,7 +5409,7 @@ install_ARCH() {
|
|||||||
INFO "Forced OpenSubdiv building, as requested..."
|
INFO "Forced OpenSubdiv building, as requested..."
|
||||||
compile_OSD
|
compile_OSD
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH opensubdiv $OSD_VERSION_MIN $OSD_VERSION_MEX
|
check_package_version_ge_lt_ARCH opensubdiv $OSD_VERSION_MIN $OSD_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH opensubdiv
|
install_packages_ARCH opensubdiv
|
||||||
clean_OSD
|
clean_OSD
|
||||||
@@ -5426,7 +5426,7 @@ install_ARCH() {
|
|||||||
INFO "Forced OpenVDB building, as requested..."
|
INFO "Forced OpenVDB building, as requested..."
|
||||||
compile_OPENVDB
|
compile_OPENVDB
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH openvdb $OPENVDB_VERSION_MIN $OPENVDB_VERSION_MEX
|
check_package_version_ge_lt_ARCH openvdb $OPENVDB_VERSION_MIN $OPENVDB_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH openvdb
|
install_packages_ARCH openvdb
|
||||||
clean_OPENVDB
|
clean_OPENVDB
|
||||||
@@ -5492,7 +5492,7 @@ install_ARCH() {
|
|||||||
_do_compile_embree=true
|
_do_compile_embree=true
|
||||||
else
|
else
|
||||||
# There is a package, but it does not provide everything that Blender needs...
|
# There is a package, but it does not provide everything that Blender needs...
|
||||||
#~ check_package_version_ge_lt_ARCH embree $EMBREE_VERSION_MIN $EMBREE_VERSION_MEX
|
#~ check_package_version_ge_lt_ARCH embree $EMBREE_VERSION_MIN $EMBREE_VERSION_MAX
|
||||||
#~ if [ $? -eq 0 ]; then
|
#~ if [ $? -eq 0 ]; then
|
||||||
#~ install_packages_ARCH embree
|
#~ install_packages_ARCH embree
|
||||||
#~ clean_Embree
|
#~ clean_Embree
|
||||||
@@ -5531,7 +5531,7 @@ install_ARCH() {
|
|||||||
INFO "Forced FFMpeg building, as requested..."
|
INFO "Forced FFMpeg building, as requested..."
|
||||||
compile_FFmpeg
|
compile_FFmpeg
|
||||||
else
|
else
|
||||||
check_package_version_ge_lt_ARCH ffmpeg $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MEX
|
check_package_version_ge_lt_ARCH ffmpeg $FFMPEG_VERSION_MIN $FFMPEG_VERSION_MAX
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
install_packages_ARCH ffmpeg
|
install_packages_ARCH ffmpeg
|
||||||
clean_FFmpeg
|
clean_FFmpeg
|
||||||
@@ -5801,7 +5801,7 @@ print_info() {
|
|||||||
PRINT "If you're using CMake add this to your configuration flags:"
|
PRINT "If you're using CMake add this to your configuration flags:"
|
||||||
|
|
||||||
_buildargs="-U *SNDFILE* -U PYTHON* -U *BOOST* -U *Boost* -U *TBB*"
|
_buildargs="-U *SNDFILE* -U PYTHON* -U *BOOST* -U *Boost* -U *TBB*"
|
||||||
_buildargs="$_buildargs -U *OPENCOLORIO* -U *OPENEXR* -U *OPENIMAGEIO* -U *LLVM* -U *CLANG* -U *CYCLES*"
|
_buildargs="$_buildargs -U *OPENCOLORIO* -U *OPENEXR* -U *OPENIMAGEIO* -U *LLVM* -U *CYCLES*"
|
||||||
_buildargs="$_buildargs -U *OPENSUBDIV* -U *OPENVDB* -U *BLOSC* -U *COLLADA* -U *FFMPEG* -U *ALEMBIC* -U *USD*"
|
_buildargs="$_buildargs -U *OPENSUBDIV* -U *OPENVDB* -U *BLOSC* -U *COLLADA* -U *FFMPEG* -U *ALEMBIC* -U *USD*"
|
||||||
_buildargs="$_buildargs -U *EMBREE* -U *OPENIMAGEDENOISE* -U *OPENXR*"
|
_buildargs="$_buildargs -U *EMBREE* -U *OPENIMAGEDENOISE* -U *OPENXR*"
|
||||||
|
|
||||||
|
@@ -1,374 +0,0 @@
|
|||||||
Index: nanovdb/nanovdb/NanoVDB.h
|
|
||||||
===================================================================
|
|
||||||
--- a/nanovdb/nanovdb/NanoVDB.h (revision 62751)
|
|
||||||
+++ b/nanovdb/nanovdb/NanoVDB.h (working copy)
|
|
||||||
@@ -152,8 +152,8 @@
|
|
||||||
|
|
||||||
#endif // __CUDACC_RTC__
|
|
||||||
|
|
||||||
-#ifdef __CUDACC__
|
|
||||||
-// Only define __hostdev__ when using NVIDIA CUDA compiler
|
|
||||||
+#if defined(__CUDACC__) || defined(__HIP__)
|
|
||||||
+// Only define __hostdev__ when using NVIDIA CUDA or HIP compiler
|
|
||||||
#define __hostdev__ __host__ __device__
|
|
||||||
#else
|
|
||||||
#define __hostdev__
|
|
||||||
@@ -461,7 +461,7 @@
|
|
||||||
/// Maximum floating-point values
|
|
||||||
template<typename T>
|
|
||||||
struct Maximum;
|
|
||||||
-#ifdef __CUDA_ARCH__
|
|
||||||
+#if defined(__CUDA_ARCH__) || defined(__HIP__)
|
|
||||||
template<>
|
|
||||||
struct Maximum<int>
|
|
||||||
{
|
|
||||||
@@ -1006,10 +1006,10 @@
|
|
||||||
using Vec3i = Vec3<int>;
|
|
||||||
|
|
||||||
/// @brief Return a single precision floating-point vector of this coordinate
|
|
||||||
-Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
|
|
||||||
+inline __hostdev__ Vec3f Coord::asVec3s() const { return Vec3f(float(mVec[0]), float(mVec[1]), float(mVec[2])); }
|
|
||||||
|
|
||||||
/// @brief Return a double precision floating-point vector of this coordinate
|
|
||||||
-Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
|
|
||||||
+inline __hostdev__ Vec3d Coord::asVec3d() const { return Vec3d(double(mVec[0]), double(mVec[1]), double(mVec[2])); }
|
|
||||||
|
|
||||||
// ----------------------------> Vec4 <--------------------------------------
|
|
||||||
|
|
||||||
@@ -1820,7 +1820,7 @@
|
|
||||||
}; // Map
|
|
||||||
|
|
||||||
template<typename Mat4T>
|
|
||||||
-void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
|
|
||||||
+__hostdev__ void Map::set(const Mat4T& mat, const Mat4T& invMat, double taper)
|
|
||||||
{
|
|
||||||
float * mf = mMatF, *vf = mVecF;
|
|
||||||
float* mif = mInvMatF;
|
|
||||||
@@ -2170,7 +2170,7 @@
|
|
||||||
}; // Class Grid
|
|
||||||
|
|
||||||
template<typename TreeT>
|
|
||||||
-int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
|
|
||||||
+__hostdev__ int Grid<TreeT>::findBlindDataForSemantic(GridBlindDataSemantic semantic) const
|
|
||||||
{
|
|
||||||
for (uint32_t i = 0, n = blindDataCount(); i < n; ++i)
|
|
||||||
if (blindMetaData(i).mSemantic == semantic)
|
|
||||||
@@ -2328,7 +2328,7 @@
|
|
||||||
}; // Tree class
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
-void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
|
|
||||||
+__hostdev__ void Tree<RootT>::extrema(ValueType& min, ValueType& max) const
|
|
||||||
{
|
|
||||||
min = this->root().valueMin();
|
|
||||||
max = this->root().valueMax();
|
|
||||||
@@ -2336,7 +2336,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<typename NodeT>
|
|
||||||
-const NodeT* Tree<RootT>::getNode(uint32_t i) const
|
|
||||||
+__hostdev__ const NodeT* Tree<RootT>::getNode(uint32_t i) const
|
|
||||||
{
|
|
||||||
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNode: unvalid node type");
|
|
||||||
NANOVDB_ASSERT(i < DataType::mCount[NodeT::LEVEL]);
|
|
||||||
@@ -2345,7 +2345,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<int LEVEL>
|
|
||||||
-const typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i) const
|
|
||||||
+__hostdev__ const typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i) const
|
|
||||||
{
|
|
||||||
NANOVDB_ASSERT(i < DataType::mCount[LEVEL]);
|
|
||||||
return reinterpret_cast<const TreeNodeT<LEVEL>*>(reinterpret_cast<const uint8_t*>(this) + DataType::mBytes[LEVEL]) + i;
|
|
||||||
@@ -2353,7 +2353,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<typename NodeT>
|
|
||||||
-NodeT* Tree<RootT>::getNode(uint32_t i)
|
|
||||||
+__hostdev__ NodeT* Tree<RootT>::getNode(uint32_t i)
|
|
||||||
{
|
|
||||||
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNode: invalid node type");
|
|
||||||
NANOVDB_ASSERT(i < DataType::mCount[NodeT::LEVEL]);
|
|
||||||
@@ -2362,7 +2362,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<int LEVEL>
|
|
||||||
-typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i)
|
|
||||||
+__hostdev__ typename TreeNode<Tree<RootT>, LEVEL>::type* Tree<RootT>::getNode(uint32_t i)
|
|
||||||
{
|
|
||||||
NANOVDB_ASSERT(i < DataType::mCount[LEVEL]);
|
|
||||||
return reinterpret_cast<TreeNodeT<LEVEL>*>(reinterpret_cast<uint8_t*>(this) + DataType::mBytes[LEVEL]) + i;
|
|
||||||
@@ -2370,7 +2370,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<typename NodeT>
|
|
||||||
-uint32_t Tree<RootT>::getNodeID(const NodeT& node) const
|
|
||||||
+__hostdev__ uint32_t Tree<RootT>::getNodeID(const NodeT& node) const
|
|
||||||
{
|
|
||||||
static_assert(is_same<TreeNodeT<NodeT::LEVEL>, NodeT>::value, "Tree::getNodeID: invalid node type");
|
|
||||||
const NodeT* first = reinterpret_cast<const NodeT*>(reinterpret_cast<const uint8_t*>(this) + DataType::mBytes[NodeT::LEVEL]);
|
|
||||||
@@ -2380,7 +2380,7 @@
|
|
||||||
|
|
||||||
template<typename RootT>
|
|
||||||
template<typename NodeT>
|
|
||||||
-uint32_t Tree<RootT>::getLinearOffset(const NodeT& node) const
|
|
||||||
+__hostdev__ uint32_t Tree<RootT>::getLinearOffset(const NodeT& node) const
|
|
||||||
{
|
|
||||||
return this->getNodeID(node) + DataType::mPFSum[NodeT::LEVEL];
|
|
||||||
}
|
|
||||||
@@ -3366,7 +3366,7 @@
|
|
||||||
}; // LeafNode class
|
|
||||||
|
|
||||||
template<typename ValueT, typename CoordT, template<uint32_t> class MaskT, uint32_t LOG2DIM>
|
|
||||||
-inline void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
|
|
||||||
+inline __hostdev__ void LeafNode<ValueT, CoordT, MaskT, LOG2DIM>::updateBBox()
|
|
||||||
{
|
|
||||||
static_assert(LOG2DIM == 3, "LeafNode::updateBBox: only supports LOGDIM = 3!");
|
|
||||||
if (!this->isActive()) return;
|
|
||||||
Index: nanovdb/nanovdb/util/SampleFromVoxels.h
|
|
||||||
===================================================================
|
|
||||||
--- a/nanovdb/nanovdb/util/SampleFromVoxels.h (revision 62751)
|
|
||||||
+++ b/nanovdb/nanovdb/util/SampleFromVoxels.h (working copy)
|
|
||||||
@@ -22,7 +22,7 @@
|
|
||||||
#define NANOVDB_SAMPLE_FROM_VOXELS_H_HAS_BEEN_INCLUDED
|
|
||||||
|
|
||||||
// Only define __hostdev__ when compiling as NVIDIA CUDA
|
|
||||||
-#ifdef __CUDACC__
|
|
||||||
+#if defined(__CUDACC__) || defined(__HIP__)
|
|
||||||
#define __hostdev__ __host__ __device__
|
|
||||||
#else
|
|
||||||
#include <cmath> // for floor
|
|
||||||
@@ -136,7 +136,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const Vec3T& xyz) const
|
|
||||||
{
|
|
||||||
const CoordT ijk = Round<CoordT>(xyz);
|
|
||||||
if (ijk != mPos) {
|
|
||||||
@@ -147,7 +147,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, true>::operator()(const CoordT& ijk) const
|
|
||||||
{
|
|
||||||
if (ijk != mPos) {
|
|
||||||
mPos = ijk;
|
|
||||||
@@ -158,7 +158,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 0, false>::operator()(const Vec3T& xyz) const
|
|
||||||
{
|
|
||||||
return mAcc.getValue(Round<CoordT>(xyz));
|
|
||||||
}
|
|
||||||
@@ -195,7 +195,7 @@
|
|
||||||
}; // TrilinearSamplerBase
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
|
|
||||||
+__hostdev__ void TrilinearSampler<TreeOrAccT>::stencil(CoordT& ijk, ValueT (&v)[2][2][2]) const
|
|
||||||
{
|
|
||||||
v[0][0][0] = mAcc.getValue(ijk); // i, j, k
|
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType TrilinearSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
auto lerp = [](ValueT a, ValueT b, ValueT w){ return fma(w, b-a, a); };// = w*(b-a) + a
|
|
||||||
@@ -239,7 +239,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
|
||||||
+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> TrilinearSampler<TreeOrAccT>::gradient(const Vec3T<RealT> &uvw, const ValueT (&v)[2][2][2])
|
|
||||||
{
|
|
||||||
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::gradient requires a floating-point type");
|
|
||||||
#if 0
|
|
||||||
@@ -270,7 +270,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
|
|
||||||
+__hostdev__ bool TrilinearSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[2][2][2])
|
|
||||||
{
|
|
||||||
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
|
|
||||||
const bool less = v[0][0][0] < ValueT(0);
|
|
||||||
@@ -363,7 +363,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
this->cache(xyz);
|
|
||||||
return BaseT::sample(xyz, mVal);
|
|
||||||
@@ -370,7 +370,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, true>::operator()(const CoordT &ijk) const
|
|
||||||
{
|
|
||||||
return ijk == mPos ? mVal[0][0][0] : BaseT::mAcc.getValue(ijk);
|
|
||||||
}
|
|
||||||
@@ -377,7 +377,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, true>::gradient(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
this->cache(xyz);
|
|
||||||
return BaseT::gradient(xyz, mVal);
|
|
||||||
@@ -393,7 +393,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 1, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
{
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
if (ijk != mPos) {
|
|
||||||
@@ -406,7 +406,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
ValueT val[2][2][2];
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
@@ -418,7 +418,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 1, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
auto lerp = [](ValueT a, ValueT b, RealT w) { return a + ValueT(w) * (b - a); };
|
|
||||||
|
|
||||||
@@ -463,7 +463,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-inline Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
|
|
||||||
+inline __hostdev__ Vec3T<typename TreeOrAccT::ValueType> SampleFromVoxels<TreeOrAccT, 1, false>::gradient(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
ValueT val[2][2][2];
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
@@ -473,7 +473,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 1, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
ValueT val[2][2][2];
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
@@ -510,7 +510,7 @@
|
|
||||||
}; // TriquadraticSamplerBase
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
|
|
||||||
+__hostdev__ void TriquadraticSampler<TreeOrAccT>::stencil(const CoordT &ijk, ValueT (&v)[3][3][3]) const
|
|
||||||
{
|
|
||||||
CoordT p(ijk[0] - 1, 0, 0);
|
|
||||||
for (int dx = 0; dx < 3; ++dx, ++p[0]) {
|
|
||||||
@@ -526,7 +526,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType TriquadraticSampler<TreeOrAccT>::sample(const Vec3T<RealT> &uvw, const ValueT (&v)[3][3][3])
|
|
||||||
{
|
|
||||||
auto kernel = [](const ValueT* value, double weight)->ValueT {
|
|
||||||
return weight * (weight * (0.5f * (value[0] + value[2]) - value[1]) +
|
|
||||||
@@ -545,7 +545,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
|
|
||||||
+__hostdev__ bool TriquadraticSampler<TreeOrAccT>::zeroCrossing(const ValueT (&v)[3][3][3])
|
|
||||||
{
|
|
||||||
static_assert(std::is_floating_point<ValueT>::value, "TrilinearSampler::zeroCrossing requires a floating-point type");
|
|
||||||
const bool less = v[0][0][0] < ValueT(0);
|
|
||||||
@@ -624,7 +624,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
this->cache(xyz);
|
|
||||||
return BaseT::sample(xyz, mVal);
|
|
||||||
@@ -631,7 +631,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, true>::operator()(const CoordT &ijk) const
|
|
||||||
{
|
|
||||||
return ijk == mPos ? mVal[1][1][1] : BaseT::mAcc.getValue(ijk);
|
|
||||||
}
|
|
||||||
@@ -646,7 +646,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 2, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
{
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
if (ijk != mPos) {
|
|
||||||
@@ -657,7 +657,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 2, false>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
ValueT val[3][3][3];
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
@@ -667,7 +667,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ bool SampleFromVoxels<TreeOrAccT, 2, false>::zeroCrossing(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
ValueT val[3][3][3];
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
@@ -710,7 +710,7 @@
|
|
||||||
}; // TricubicSampler
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
-void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
|
|
||||||
+__hostdev__ void TricubicSampler<TreeOrAccT>::stencil(const CoordT& ijk, ValueT (&C)[64]) const
|
|
||||||
{
|
|
||||||
auto fetch = [&](int i, int j, int k) -> ValueT& { return C[((i + 1) << 4) + ((j + 1) << 2) + k + 1]; };
|
|
||||||
|
|
||||||
@@ -929,7 +929,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
+__hostdev__ typename TreeOrAccT::ValueType SampleFromVoxels<TreeOrAccT, 3, true>::operator()(Vec3T<RealT> xyz) const
|
|
||||||
{
|
|
||||||
this->cache(xyz);
|
|
||||||
return BaseT::sample(xyz, mC);
|
|
||||||
@@ -937,7 +937,7 @@
|
|
||||||
|
|
||||||
template<typename TreeOrAccT>
|
|
||||||
template<typename RealT, template<typename...> class Vec3T>
|
|
||||||
-void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
+__hostdev__ void SampleFromVoxels<TreeOrAccT, 3, true>::cache(Vec3T<RealT>& xyz) const
|
|
||||||
{
|
|
||||||
CoordT ijk = Floor<CoordT>(xyz);
|
|
||||||
if (ijk != mPos) {
|
|
@@ -197,38 +197,3 @@ index 67ec0d15f..6dc3e85a0 100644
|
|||||||
#else
|
#else
|
||||||
#error Unknown architecture.
|
#error Unknown architecture.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
diff --git a/pxr/base/arch/demangle.cpp b/pxr/base/arch/demangle.cpp
|
|
||||||
index 67ec0d15f..6dc3e85a0 100644
|
|
||||||
--- a/pxr/base/arch/demangle.cpp
|
|
||||||
+++ b/pxr/base/arch/demangle.cpp
|
|
||||||
@@ -36,6 +36,7 @@
|
|
||||||
#if (ARCH_COMPILER_GCC_MAJOR == 3 && ARCH_COMPILER_GCC_MINOR >= 1) || \
|
|
||||||
ARCH_COMPILER_GCC_MAJOR > 3 || defined(ARCH_COMPILER_CLANG)
|
|
||||||
#define _AT_LEAST_GCC_THREE_ONE_OR_CLANG
|
|
||||||
+#include <cxxabi.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PXR_NAMESPACE_OPEN_SCOPE
|
|
||||||
@@ -138,7 +139,6 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_AT_LEAST_GCC_THREE_ONE_OR_CLANG)
|
|
||||||
-#include <cxxabi.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This routine doesn't work when you get to gcc3.4.
|
|
||||||
|
|
||||||
diff --git a/pxr/base/work/singularTask.h b/pxr/base/work/singularTask.h
|
|
||||||
index 67ec0d15f..6dc3e85a0 100644
|
|
||||||
--- a/pxr/base/work/singularTask.h
|
|
||||||
+++ b/pxr/base/work/singularTask.h
|
|
||||||
@@ -120,7 +120,7 @@
|
|
||||||
// case we go again to ensure the task can do whatever it
|
|
||||||
// was awakened to do. Once we successfully take the count
|
|
||||||
// to zero, we stop.
|
|
||||||
- size_t old = count;
|
|
||||||
+ std::size_t old = count;
|
|
||||||
do { _fn(); } while (
|
|
||||||
!count.compare_exchange_strong(old, 0));
|
|
||||||
});
|
|
||||||
|
@@ -79,9 +79,6 @@ set STAGING=%BUILD_DIR%\S
|
|||||||
rem for python module build
|
rem for python module build
|
||||||
set MSSdk=1
|
set MSSdk=1
|
||||||
set DISTUTILS_USE_SDK=1
|
set DISTUTILS_USE_SDK=1
|
||||||
rem if you let pip pick its own build dirs, it'll stick it somewhere deep inside the user profile
|
|
||||||
rem and cython will refuse to link due to a path that gets too long.
|
|
||||||
set TMPDIR=c:\t\
|
|
||||||
rem for python externals source to be shared between the various archs and compilers
|
rem for python externals source to be shared between the various archs and compilers
|
||||||
mkdir %BUILD_DIR%\downloads\externals
|
mkdir %BUILD_DIR%\downloads\externals
|
||||||
|
|
||||||
|
@@ -168,7 +168,7 @@ def function_parm_wash_tokens(parm):
|
|||||||
# if tokens[-1].kind == To
|
# if tokens[-1].kind == To
|
||||||
# remove trailing char
|
# remove trailing char
|
||||||
if tokens[-1].kind == TokenKind.PUNCTUATION:
|
if tokens[-1].kind == TokenKind.PUNCTUATION:
|
||||||
if tokens[-1].spelling in {",", ")", ";"}:
|
if tokens[-1].spelling in (",", ")", ";"):
|
||||||
tokens.pop()
|
tokens.pop()
|
||||||
# else:
|
# else:
|
||||||
# print(tokens[-1].spelling)
|
# print(tokens[-1].spelling)
|
||||||
@@ -179,7 +179,7 @@ def function_parm_wash_tokens(parm):
|
|||||||
t_spelling = t.spelling
|
t_spelling = t.spelling
|
||||||
ok = True
|
ok = True
|
||||||
if t_kind == TokenKind.KEYWORD:
|
if t_kind == TokenKind.KEYWORD:
|
||||||
if t_spelling in {"const", "restrict", "volatile"}:
|
if t_spelling in ("const", "restrict", "volatile"):
|
||||||
ok = False
|
ok = False
|
||||||
elif t_spelling.startswith("__"):
|
elif t_spelling.startswith("__"):
|
||||||
ok = False # __restrict
|
ok = False # __restrict
|
||||||
|
@@ -180,7 +180,7 @@ def create_nb_project_main():
|
|||||||
f.write(' </logicalFolder>\n')
|
f.write(' </logicalFolder>\n')
|
||||||
|
|
||||||
f.write(' </logicalFolder>\n')
|
f.write(' </logicalFolder>\n')
|
||||||
# default, but this dir is in fact not in blender dir so we can ignore it
|
# default, but this dir is infact not in blender dir so we can ignore it
|
||||||
# f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n')
|
# f.write(' <sourceFolderFilter>^(nbproject)$</sourceFolderFilter>\n')
|
||||||
f.write(r' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n')
|
f.write(r' <sourceFolderFilter>^(nbproject|__pycache__|.*\.py|.*\.html|.*\.blend)$</sourceFolderFilter>\n')
|
||||||
|
|
||||||
|
@@ -9,7 +9,6 @@ set(WITH_INSTALL_PORTABLE ON CACHE BOOL "" FORCE)
|
|||||||
|
|
||||||
set(WITH_ALEMBIC OFF CACHE BOOL "" FORCE)
|
set(WITH_ALEMBIC OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_AUDASPACE OFF CACHE BOOL "" FORCE)
|
set(WITH_AUDASPACE OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_BLENDER_THUMBNAILER OFF CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_BOOST OFF CACHE BOOL "" FORCE)
|
set(WITH_BOOST OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
|
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_BULLET OFF CACHE BOOL "" FORCE)
|
set(WITH_BULLET OFF CACHE BOOL "" FORCE)
|
||||||
@@ -19,6 +18,9 @@ set(WITH_CODEC_SNDFILE OFF CACHE BOOL "" FORCE)
|
|||||||
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
|
set(WITH_COMPOSITOR OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_COREAUDIO OFF CACHE BOOL "" FORCE)
|
set(WITH_COREAUDIO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
|
set(WITH_CYCLES OFF CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_CYCLES_DEVICE_OPTIX OFF CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_CYCLES_EMBREE OFF CACHE BOOL "" FORCE)
|
||||||
|
set(WITH_CYCLES_OSL OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_DRACO OFF CACHE BOOL "" FORCE)
|
set(WITH_DRACO OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_FFTW3 OFF CACHE BOOL "" FORCE)
|
set(WITH_FFTW3 OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE)
|
set(WITH_FREESTYLE OFF CACHE BOOL "" FORCE)
|
||||||
|
@@ -61,7 +61,6 @@ set(WITH_MEM_JEMALLOC ON CACHE BOOL "" FORCE)
|
|||||||
# platform dependent options
|
# platform dependent options
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
set(WITH_COREAUDIO ON CACHE BOOL "" FORCE)
|
set(WITH_COREAUDIO ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_DEVICE_METAL ON CACHE BOOL "" FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
set(WITH_JACK ON CACHE BOOL "" FORCE)
|
set(WITH_JACK ON CACHE BOOL "" FORCE)
|
||||||
@@ -82,5 +81,4 @@ if(NOT APPLE)
|
|||||||
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_DEVICE_OPTIX ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_CUDA_BINARIES ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
|
set(WITH_CYCLES_CUBIN_COMPILER OFF CACHE BOOL "" FORCE)
|
||||||
set(WITH_CYCLES_HIP_BINARIES ON CACHE BOOL "" FORCE)
|
|
||||||
endif()
|
endif()
|
||||||
|
@@ -529,7 +529,7 @@ function(SETUP_LIBDIRS)
|
|||||||
|
|
||||||
# NOTE: For all new libraries, use absolute library paths.
|
# NOTE: For all new libraries, use absolute library paths.
|
||||||
# This should eventually be phased out.
|
# This should eventually be phased out.
|
||||||
# APPLE platform uses full paths for linking libraries, and avoids link_directories.
|
# APPLE plaform uses full paths for linking libraries, and avoids link_directories.
|
||||||
if(NOT MSVC AND NOT APPLE)
|
if(NOT MSVC AND NOT APPLE)
|
||||||
link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH})
|
link_directories(${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${FREETYPE_LIBPATH})
|
||||||
|
|
||||||
|
@@ -257,6 +257,9 @@ if(WITH_BOOST)
|
|||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
list(APPEND _boost_FIND_COMPONENTS locale)
|
list(APPEND _boost_FIND_COMPONENTS locale)
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_CYCLES_NETWORK)
|
||||||
|
list(APPEND _boost_FIND_COMPONENTS serialization)
|
||||||
|
endif()
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
list(APPEND _boost_FIND_COMPONENTS iostreams)
|
list(APPEND _boost_FIND_COMPONENTS iostreams)
|
||||||
endif()
|
endif()
|
||||||
@@ -336,7 +339,7 @@ if(WITH_LLVM)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl)
|
set(CYCLES_OSL ${LIBDIR}/osl)
|
||||||
|
|
||||||
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
find_library(OSL_LIB_EXEC NAMES oslexec PATHS ${CYCLES_OSL}/lib)
|
||||||
@@ -356,7 +359,7 @@ if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES_EMBREE)
|
||||||
find_package(Embree 3.8.0 REQUIRED)
|
find_package(Embree 3.8.0 REQUIRED)
|
||||||
# Increase stack size for Embree, only works for executables.
|
# Increase stack size for Embree, only works for executables.
|
||||||
if(NOT WITH_PYTHON_MODULE)
|
if(NOT WITH_PYTHON_MODULE)
|
||||||
|
@@ -241,7 +241,7 @@ if(WITH_INPUT_NDOF)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
if(EXISTS ${CYCLES_OSL} AND NOT OSL_ROOT)
|
if(EXISTS ${CYCLES_OSL} AND NOT OSL_ROOT)
|
||||||
set(OSL_ROOT ${CYCLES_OSL})
|
set(OSL_ROOT ${CYCLES_OSL})
|
||||||
@@ -314,7 +314,7 @@ if(WITH_BOOST)
|
|||||||
endif()
|
endif()
|
||||||
set(Boost_USE_MULTITHREADED ON)
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
set(__boost_packages filesystem regex thread date_time)
|
set(__boost_packages filesystem regex thread date_time)
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
if(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
||||||
list(APPEND __boost_packages wave)
|
list(APPEND __boost_packages wave)
|
||||||
else()
|
else()
|
||||||
@@ -323,6 +323,9 @@ if(WITH_BOOST)
|
|||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
list(APPEND __boost_packages locale)
|
list(APPEND __boost_packages locale)
|
||||||
endif()
|
endif()
|
||||||
|
if(WITH_CYCLES_NETWORK)
|
||||||
|
list(APPEND __boost_packages serialization)
|
||||||
|
endif()
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
list(APPEND __boost_packages iostreams)
|
list(APPEND __boost_packages iostreams)
|
||||||
endif()
|
endif()
|
||||||
@@ -400,7 +403,7 @@ if(WITH_OPENCOLORIO)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES_EMBREE)
|
||||||
find_package(Embree 3.8.0 REQUIRED)
|
find_package(Embree 3.8.0 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -27,7 +27,7 @@ if(NOT MSVC)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
set(MSVC_CLANG ON)
|
set(MSVC_CLANG On)
|
||||||
set(VC_TOOLS_DIR $ENV{VCToolsRedistDir} CACHE STRING "Location of the msvc redistributables")
|
set(VC_TOOLS_DIR $ENV{VCToolsRedistDir} CACHE STRING "Location of the msvc redistributables")
|
||||||
set(MSVC_REDIST_DIR ${VC_TOOLS_DIR})
|
set(MSVC_REDIST_DIR ${VC_TOOLS_DIR})
|
||||||
if(DEFINED MSVC_REDIST_DIR)
|
if(DEFINED MSVC_REDIST_DIR)
|
||||||
@@ -53,7 +53,7 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
|||||||
endif()
|
endif()
|
||||||
if(WITH_WINDOWS_STRIPPED_PDB)
|
if(WITH_WINDOWS_STRIPPED_PDB)
|
||||||
message(WARNING "stripped pdb not supported with clang, disabling..")
|
message(WARNING "stripped pdb not supported with clang, disabling..")
|
||||||
set(WITH_WINDOWS_STRIPPED_PDB OFF)
|
set(WITH_WINDOWS_STRIPPED_PDB Off)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ endif()
|
|||||||
if(WITH_COMPILER_ASAN AND MSVC AND NOT MSVC_CLANG)
|
if(WITH_COMPILER_ASAN AND MSVC AND NOT MSVC_CLANG)
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28.29828)
|
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.28.29828)
|
||||||
#set a flag so we don't have to do this comparison all the time
|
#set a flag so we don't have to do this comparison all the time
|
||||||
SET(MSVC_ASAN ON)
|
SET(MSVC_ASAN On)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fsanitize=address")
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /fsanitize=address")
|
||||||
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /INCREMENTAL:NO")
|
string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " /INCREMENTAL:NO")
|
||||||
@@ -179,22 +179,22 @@ endif()
|
|||||||
|
|
||||||
if(WITH_WINDOWS_SCCACHE AND CMAKE_VS_MSBUILD_COMMAND)
|
if(WITH_WINDOWS_SCCACHE AND CMAKE_VS_MSBUILD_COMMAND)
|
||||||
message(WARNING "Disabling sccache, sccache is not supported with msbuild")
|
message(WARNING "Disabling sccache, sccache is not supported with msbuild")
|
||||||
set(WITH_WINDOWS_SCCACHE OFF)
|
set(WITH_WINDOWS_SCCACHE Off)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Debug Symbol format
|
# Debug Symbol format
|
||||||
# sccache # MSVC_ASAN # format # why
|
# sccache # MSVC_ASAN # format # why
|
||||||
# ON # ON # Z7 # sccache will only play nice with Z7
|
# On # On # Z7 # sccache will only play nice with Z7
|
||||||
# ON # OFF # Z7 # sccache will only play nice with Z7
|
# On # Off # Z7 # sccache will only play nice with Z7
|
||||||
# OFF # ON # Zi # Asan will not play nice with Edit and Continue
|
# Off # On # Zi # Asan will not play nice with Edit and Continue
|
||||||
# OFF # OFF # ZI # Neither asan nor sscache is enabled Edit and Continue is available
|
# Off # Off # ZI # Neither asan nor sscache is enabled Edit and Continue is available
|
||||||
|
|
||||||
# Release Symbol format
|
# Release Symbol format
|
||||||
# sccache # MSVC_ASAN # format # why
|
# sccache # MSVC_ASAN # format # why
|
||||||
# ON # ON # Z7 # sccache will only play nice with Z7
|
# On # On # Z7 # sccache will only play nice with Z7
|
||||||
# ON # OFF # Z7 # sccache will only play nice with Z7
|
# On # Off # Z7 # sccache will only play nice with Z7
|
||||||
# OFF # ON # Zi # Asan will not play nice with Edit and Continue
|
# Off # On # Zi # Asan will not play nice with Edit and Continue
|
||||||
# OFF # OFF # Zi # Edit and Continue disables some optimizations
|
# Off # Off # Zi # Edit and Continue disables some optimizations
|
||||||
|
|
||||||
|
|
||||||
if(WITH_WINDOWS_SCCACHE)
|
if(WITH_WINDOWS_SCCACHE)
|
||||||
@@ -288,7 +288,7 @@ if(CMAKE_GENERATOR MATCHES "^Visual Studio.+" AND # Only supported in the VS IDE
|
|||||||
"EnableMicrosoftCodeAnalysis=false"
|
"EnableMicrosoftCodeAnalysis=false"
|
||||||
"EnableClangTidyCodeAnalysis=true"
|
"EnableClangTidyCodeAnalysis=true"
|
||||||
)
|
)
|
||||||
set(VS_CLANG_TIDY ON)
|
set(VS_CLANG_TIDY On)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Mark libdir as system headers with a lower warn level, to resolve some warnings
|
# Mark libdir as system headers with a lower warn level, to resolve some warnings
|
||||||
@@ -469,7 +469,7 @@ if(WITH_PYTHON)
|
|||||||
|
|
||||||
set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/include)
|
set(PYTHON_INCLUDE_DIR ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/include)
|
||||||
set(PYTHON_NUMPY_INCLUDE_DIRS ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/lib/site-packages/numpy/core/include)
|
set(PYTHON_NUMPY_INCLUDE_DIRS ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/lib/site-packages/numpy/core/include)
|
||||||
set(NUMPY_FOUND ON)
|
set(NUMPY_FOUND On)
|
||||||
unset(_PYTHON_VERSION_NO_DOTS)
|
unset(_PYTHON_VERSION_NO_DOTS)
|
||||||
# uncached vars
|
# uncached vars
|
||||||
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
|
set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
|
||||||
@@ -477,7 +477,7 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_BOOST)
|
if(WITH_BOOST)
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(boost_extra_libs wave)
|
set(boost_extra_libs wave)
|
||||||
endif()
|
endif()
|
||||||
if(WITH_INTERNATIONAL)
|
if(WITH_INTERNATIONAL)
|
||||||
@@ -520,7 +520,7 @@ if(WITH_BOOST)
|
|||||||
debug ${BOOST_LIBPATH}/libboost_thread-${BOOST_DEBUG_POSTFIX}
|
debug ${BOOST_LIBPATH}/libboost_thread-${BOOST_DEBUG_POSTFIX}
|
||||||
debug ${BOOST_LIBPATH}/libboost_chrono-${BOOST_DEBUG_POSTFIX}
|
debug ${BOOST_LIBPATH}/libboost_chrono-${BOOST_DEBUG_POSTFIX}
|
||||||
)
|
)
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
|
set(BOOST_LIBRARIES ${BOOST_LIBRARIES}
|
||||||
optimized ${BOOST_LIBPATH}/libboost_wave-${BOOST_POSTFIX}
|
optimized ${BOOST_LIBPATH}/libboost_wave-${BOOST_POSTFIX}
|
||||||
debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX})
|
debug ${BOOST_LIBPATH}/libboost_wave-${BOOST_DEBUG_POSTFIX})
|
||||||
@@ -708,7 +708,7 @@ if(WITH_CODEC_SNDFILE)
|
|||||||
set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib)
|
set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
if(WITH_CYCLES_OSL)
|
||||||
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
set(CYCLES_OSL ${LIBDIR}/osl CACHE PATH "Path to OpenShadingLanguage installation")
|
||||||
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)
|
set(OSL_SHADER_DIR ${CYCLES_OSL}/shaders)
|
||||||
# Shaders have moved around a bit between OSL versions, check multiple locations
|
# Shaders have moved around a bit between OSL versions, check multiple locations
|
||||||
@@ -741,7 +741,7 @@ if(WITH_CYCLES AND WITH_CYCLES_OSL)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES AND WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES_EMBREE)
|
||||||
windows_find_package(Embree)
|
windows_find_package(Embree)
|
||||||
if(NOT EMBREE_FOUND)
|
if(NOT EMBREE_FOUND)
|
||||||
set(EMBREE_INCLUDE_DIRS ${LIBDIR}/embree/include)
|
set(EMBREE_INCLUDE_DIRS ${LIBDIR}/embree/include)
|
||||||
@@ -853,18 +853,18 @@ if(WITH_GMP)
|
|||||||
set(GMP_INCLUDE_DIRS ${LIBDIR}/gmp/include)
|
set(GMP_INCLUDE_DIRS ${LIBDIR}/gmp/include)
|
||||||
set(GMP_LIBRARIES ${LIBDIR}/gmp/lib/libgmp-10.lib optimized ${LIBDIR}/gmp/lib/libgmpxx.lib debug ${LIBDIR}/gmp/lib/libgmpxx_d.lib)
|
set(GMP_LIBRARIES ${LIBDIR}/gmp/lib/libgmp-10.lib optimized ${LIBDIR}/gmp/lib/libgmpxx.lib debug ${LIBDIR}/gmp/lib/libgmpxx_d.lib)
|
||||||
set(GMP_ROOT_DIR ${LIBDIR}/gmp)
|
set(GMP_ROOT_DIR ${LIBDIR}/gmp)
|
||||||
set(GMP_FOUND ON)
|
set(GMP_FOUND On)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_POTRACE)
|
if(WITH_POTRACE)
|
||||||
set(POTRACE_INCLUDE_DIRS ${LIBDIR}/potrace/include)
|
set(POTRACE_INCLUDE_DIRS ${LIBDIR}/potrace/include)
|
||||||
set(POTRACE_LIBRARIES ${LIBDIR}/potrace/lib/potrace.lib)
|
set(POTRACE_LIBRARIES ${LIBDIR}/potrace/lib/potrace.lib)
|
||||||
set(POTRACE_FOUND ON)
|
set(POTRACE_FOUND On)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_HARU)
|
if(WITH_HARU)
|
||||||
if(EXISTS ${LIBDIR}/haru)
|
if(EXISTS ${LIBDIR}/haru)
|
||||||
set(HARU_FOUND ON)
|
set(HARU_FOUND On)
|
||||||
set(HARU_ROOT_DIR ${LIBDIR}/haru)
|
set(HARU_ROOT_DIR ${LIBDIR}/haru)
|
||||||
set(HARU_INCLUDE_DIRS ${HARU_ROOT_DIR}/include)
|
set(HARU_INCLUDE_DIRS ${HARU_ROOT_DIR}/include)
|
||||||
set(HARU_LIBRARIES ${HARU_ROOT_DIR}/lib/libhpdfs.lib)
|
set(HARU_LIBRARIES ${HARU_ROOT_DIR}/lib/libhpdfs.lib)
|
||||||
|
@@ -27,7 +27,7 @@ if(WITH_WINDOWS_BUNDLE_CRT)
|
|||||||
# Install the CRT to the blender.crt Sub folder.
|
# Install the CRT to the blender.crt Sub folder.
|
||||||
install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
|
install(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} DESTINATION ./blender.crt COMPONENT Libraries)
|
||||||
|
|
||||||
# Generating the manifest is a relatively expensive operation since
|
# Generating the manifest is a relativly expensive operation since
|
||||||
# it is collecting an sha1 hash for every file required. so only do
|
# it is collecting an sha1 hash for every file required. so only do
|
||||||
# this work when the libs have either changed or the manifest does
|
# this work when the libs have either changed or the manifest does
|
||||||
# not exist yet.
|
# not exist yet.
|
||||||
|
@@ -3,7 +3,7 @@ for %%X in (svn.exe) do (set SVN=%%~$PATH:X)
|
|||||||
for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
|
for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
|
||||||
for %%X in (ctest.exe) do (set CTEST=%%~$PATH:X)
|
for %%X in (ctest.exe) do (set CTEST=%%~$PATH:X)
|
||||||
for %%X in (git.exe) do (set GIT=%%~$PATH:X)
|
for %%X in (git.exe) do (set GIT=%%~$PATH:X)
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\37\bin\python.exe
|
||||||
if NOT "%verbose%" == "" (
|
if NOT "%verbose%" == "" (
|
||||||
echo svn : "%SVN%"
|
echo svn : "%SVN%"
|
||||||
echo cmake : "%CMAKE%"
|
echo cmake : "%CMAKE%"
|
||||||
|
@@ -10,7 +10,7 @@ exit /b 1
|
|||||||
echo found clang-format in %CF_PATH%
|
echo found clang-format in %CF_PATH%
|
||||||
|
|
||||||
if EXIST %PYTHON% (
|
if EXIST %PYTHON% (
|
||||||
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\39\bin\python.exe
|
set PYTHON=%BLENDER_DIR%\..\lib\win64_vc15\python\37\bin\python.exe
|
||||||
goto detect_python_done
|
goto detect_python_done
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -116,9 +116,6 @@ if NOT "%1" == "" (
|
|||||||
) else if "%1" == "doc_py" (
|
) else if "%1" == "doc_py" (
|
||||||
set DOC_PY=1
|
set DOC_PY=1
|
||||||
goto EOF
|
goto EOF
|
||||||
) else if "%1" == "svnfix" (
|
|
||||||
set SVN_FIX=1
|
|
||||||
goto EOF
|
|
||||||
) else (
|
) else (
|
||||||
echo Command "%1" unknown, aborting!
|
echo Command "%1" unknown, aborting!
|
||||||
goto ERR
|
goto ERR
|
||||||
|
@@ -1,26 +0,0 @@
|
|||||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
|
||||||
if "%BUILD_VS_YEAR%"=="2019" set BUILD_VS_LIBDIRPOST=vc15
|
|
||||||
if "%BUILD_VS_YEAR%"=="2022" set BUILD_VS_LIBDIRPOST=vc15
|
|
||||||
|
|
||||||
set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
|
||||||
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
|
||||||
|
|
||||||
echo Starting cleanup in %BUILD_VS_LIBDIR%.
|
|
||||||
cd %BUILD_VS_LIBDIR%
|
|
||||||
:RETRY
|
|
||||||
"%SVN%" cleanup
|
|
||||||
"%SVN%" update
|
|
||||||
if errorlevel 1 (
|
|
||||||
set /p LibRetry= "Error during update, retry? y/n"
|
|
||||||
if /I "!LibRetry!"=="Y" (
|
|
||||||
goto RETRY
|
|
||||||
)
|
|
||||||
echo.
|
|
||||||
echo Error: Download of external libraries failed.
|
|
||||||
echo This is needed for building, please manually run 'svn cleanup' and 'svn update' in
|
|
||||||
echo %BUILD_VS_LIBDIR% , until this is resolved you CANNOT make a successful blender build
|
|
||||||
echo.
|
|
||||||
exit /b 1
|
|
||||||
)
|
|
||||||
echo Cleanup complete
|
|
||||||
|
|
@@ -38,7 +38,7 @@ PROJECT_NAME = Blender
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = V3.1
|
PROJECT_NUMBER = V3.0
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
@@ -6,90 +6,91 @@
|
|||||||
* as part of the normal development process.
|
* as part of the normal development process.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO: other modules.
|
/** \defgroup MEM Guarded memory (de)allocation
|
||||||
* - `libmv`
|
* \ingroup intern
|
||||||
* - `cycles`
|
|
||||||
* - `opencolorio`
|
|
||||||
* - `opensubdiv`
|
|
||||||
* - `openvdb`
|
|
||||||
* - `quadriflow`
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_atomic Atomic Operations
|
/** \defgroup clog C-Logging (CLOG)
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_clog C-Logging (CLOG)
|
/** \defgroup ctr container
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_eigen Eigen
|
/** \defgroup iksolver iksolver
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_glew-mx GLEW with Multiple Rendering Context's
|
/** \defgroup itasc itasc
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_iksolver Inverse Kinematics (Solver)
|
/** \defgroup memutil memutil
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_itasc Inverse Kinematics (ITASC)
|
/** \defgroup mikktspace mikktspace
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_libc_compat libc Compatibility For Linux
|
/** \defgroup moto moto
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_locale Locale
|
/** \defgroup eigen eigen
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_mantaflow Manta-Flow Fluid Simulation
|
/** \defgroup smoke smoke
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup intern_mem Guarded Memory (de)allocation
|
/** \defgroup string string
|
||||||
* \ingroup intern */
|
* \ingroup intern
|
||||||
|
*/
|
||||||
/** \defgroup intern_memutil Memory Utilities (memutil)
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup intern_mikktspace MikktSpace
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup intern_numaapi NUMA (Non Uniform Memory Architecture)
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup intern_rigidbody Rigid-Body C-API
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup intern_sky_model Sky Model
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup intern_utf_conv UTF-8/16 Conversion (utfconv)
|
|
||||||
* \ingroup intern */
|
|
||||||
|
|
||||||
/** \defgroup audaspace Audaspace
|
/** \defgroup audaspace Audaspace
|
||||||
* \ingroup intern undoc
|
* \ingroup intern undoc
|
||||||
* \todo add to doxygen */
|
* \todo add to doxygen
|
||||||
|
*/
|
||||||
/** \defgroup audcoreaudio Audaspace CoreAudio
|
/** \defgroup audcoreaudio Audaspace CoreAudio
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audfx Audaspace FX
|
/** \defgroup audfx Audaspace FX
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audopenal Audaspace OpenAL
|
/** \defgroup audopenal Audaspace OpenAL
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audpulseaudio Audaspace PulseAudio
|
/** \defgroup audpulseaudio Audaspace PulseAudio
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audwasapi Audaspace WASAPI
|
/** \defgroup audwasapi Audaspace WASAPI
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audpython Audaspace Python
|
/** \defgroup audpython Audaspace Python
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audsdl Audaspace SDL
|
/** \defgroup audsdl Audaspace SDL
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audsrc Audaspace SRC
|
/** \defgroup audsrc Audaspace SRC
|
||||||
* \ingroup audaspace */
|
*
|
||||||
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audffmpeg Audaspace FFMpeg
|
/** \defgroup audffmpeg Audaspace FFMpeg
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audfftw Audaspace FFTW
|
/** \defgroup audfftw Audaspace FFTW
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audjack Audaspace Jack
|
/** \defgroup audjack Audaspace Jack
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
/** \defgroup audsndfile Audaspace sndfile
|
/** \defgroup audsndfile Audaspace sndfile
|
||||||
* \ingroup audaspace */
|
* \ingroup audaspace
|
||||||
|
*/
|
||||||
|
|
||||||
/** \defgroup GHOST GHOST API
|
/** \defgroup GHOST GHOST API
|
||||||
* \ingroup intern GUI
|
* \ingroup intern GUI
|
||||||
|
@@ -5,8 +5,7 @@
|
|||||||
/** \defgroup bmesh BMesh
|
/** \defgroup bmesh BMesh
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
*/
|
*/
|
||||||
/** \defgroup compositor Compositing
|
/** \defgroup compositor Compositing */
|
||||||
* \ingroup blender */
|
|
||||||
|
|
||||||
/** \defgroup python Python
|
/** \defgroup python Python
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
@@ -79,8 +78,7 @@
|
|||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup data DNA, RNA and .blend access
|
/** \defgroup data DNA, RNA and .blend access*/
|
||||||
* \ingroup blender */
|
|
||||||
|
|
||||||
/** \defgroup gpu GPU
|
/** \defgroup gpu GPU
|
||||||
* \ingroup blender
|
* \ingroup blender
|
||||||
@@ -103,12 +101,11 @@
|
|||||||
* merged in docs.
|
* merged in docs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/** \defgroup gui GUI */
|
||||||
* \defgroup gui GUI
|
|
||||||
* \ingroup blender */
|
|
||||||
|
|
||||||
/** \defgroup wm Window Manager
|
/** \defgroup wm Window Manager
|
||||||
* \ingroup gui */
|
* \ingroup blender gui
|
||||||
|
*/
|
||||||
|
|
||||||
/* ================================ */
|
/* ================================ */
|
||||||
|
|
||||||
@@ -282,8 +279,7 @@
|
|||||||
* \ingroup gui
|
* \ingroup gui
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \defgroup externformats External Formats
|
/** \defgroup externformats External Formats */
|
||||||
* \ingroup blender */
|
|
||||||
|
|
||||||
/** \defgroup collada COLLADA
|
/** \defgroup collada COLLADA
|
||||||
* \ingroup externformats
|
* \ingroup externformats
|
||||||
@@ -312,7 +308,4 @@
|
|||||||
/* ================================ */
|
/* ================================ */
|
||||||
|
|
||||||
/** \defgroup undoc Undocumented
|
/** \defgroup undoc Undocumented
|
||||||
*
|
* \brief Modules and libraries that are still undocumented, or lacking proper integration into the doxygen system, are marked in this group. */
|
||||||
* \brief Modules and libraries that are still undocumented,
|
|
||||||
* or lacking proper integration into the doxygen system, are marked in this group.
|
|
||||||
*/
|
|
||||||
|
@@ -61,7 +61,7 @@ def blender_extract_info(blender_bin: str) -> Dict[str, str]:
|
|||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
).stdout.decode(encoding="utf-8")
|
).stdout.decode(encoding="utf-8")
|
||||||
|
|
||||||
blender_version_output = subprocess.run(
|
blender_version_ouput = subprocess.run(
|
||||||
[blender_bin, "--version"],
|
[blender_bin, "--version"],
|
||||||
env=blender_env,
|
env=blender_env,
|
||||||
check=True,
|
check=True,
|
||||||
@@ -73,7 +73,7 @@ def blender_extract_info(blender_bin: str) -> Dict[str, str]:
|
|||||||
# check for each lines prefix to ensure these aren't included.
|
# check for each lines prefix to ensure these aren't included.
|
||||||
blender_version = ""
|
blender_version = ""
|
||||||
blender_date = ""
|
blender_date = ""
|
||||||
for l in blender_version_output.split("\n"):
|
for l in blender_version_ouput.split("\n"):
|
||||||
if l.startswith("Blender "):
|
if l.startswith("Blender "):
|
||||||
# Remove 'Blender' prefix.
|
# Remove 'Blender' prefix.
|
||||||
blender_version = l.split(" ", 1)[1].strip()
|
blender_version = l.split(" ", 1)[1].strip()
|
||||||
|
@@ -11,7 +11,7 @@ import queue
|
|||||||
|
|
||||||
execution_queue = queue.Queue()
|
execution_queue = queue.Queue()
|
||||||
|
|
||||||
# This function can safely be called in another thread.
|
# This function can savely be called in another thread.
|
||||||
# The function will be executed when the timer runs the next time.
|
# The function will be executed when the timer runs the next time.
|
||||||
def run_in_main_thread(function):
|
def run_in_main_thread(function):
|
||||||
execution_queue.put(function)
|
execution_queue.put(function)
|
||||||
|
@@ -42,13 +42,8 @@ class SimpleMouseOperator(bpy.types.Operator):
|
|||||||
self.y = event.mouse_y
|
self.y = event.mouse_y
|
||||||
return self.execute(context)
|
return self.execute(context)
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(SimpleMouseOperator.bl_idname, text="Simple Mouse Operator")
|
|
||||||
|
|
||||||
# Register and add to the view menu (required to also use F3 search "Simple Mouse Operator" for quick access)
|
|
||||||
bpy.utils.register_class(SimpleMouseOperator)
|
bpy.utils.register_class(SimpleMouseOperator)
|
||||||
bpy.types.VIEW3D_MT_view.append(menu_func)
|
|
||||||
|
|
||||||
# Test call to the newly defined operator.
|
# Test call to the newly defined operator.
|
||||||
# Here we call the operator and invoke it, meaning that the settings are taken
|
# Here we call the operator and invoke it, meaning that the settings are taken
|
||||||
|
@@ -43,7 +43,7 @@ def menu_func(self, context):
|
|||||||
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
|
self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
|
||||||
|
|
||||||
|
|
||||||
# Register and add to the file selector (required to also use F3 search "Text Export Operator" for quick access)
|
# Register and add to the file selector
|
||||||
bpy.utils.register_class(ExportSomeData)
|
bpy.utils.register_class(ExportSomeData)
|
||||||
bpy.types.TOPBAR_MT_file_export.append(menu_func)
|
bpy.types.TOPBAR_MT_file_export.append(menu_func)
|
||||||
|
|
||||||
|
@@ -27,14 +27,8 @@ class DialogOperator(bpy.types.Operator):
|
|||||||
wm = context.window_manager
|
wm = context.window_manager
|
||||||
return wm.invoke_props_dialog(self)
|
return wm.invoke_props_dialog(self)
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(DialogOperator.bl_idname, text="Dialog Operator")
|
|
||||||
|
|
||||||
|
|
||||||
# Register and add to the object menu (required to also use F3 search "Dialog Operator" for quick access)
|
|
||||||
bpy.utils.register_class(DialogOperator)
|
bpy.utils.register_class(DialogOperator)
|
||||||
bpy.types.VIEW3D_MT_object.append(menu_func)
|
|
||||||
|
|
||||||
# Test call.
|
# Test call.
|
||||||
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
|
bpy.ops.object.dialog_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -41,13 +41,8 @@ class CustomDrawOperator(bpy.types.Operator):
|
|||||||
|
|
||||||
col.prop(self, "my_string")
|
col.prop(self, "my_string")
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(CustomDrawOperator.bl_idname, text="Custom Draw Operator")
|
|
||||||
|
|
||||||
# Register and add to the object menu (required to also use F3 search "Custom Draw Operator" for quick access)
|
|
||||||
bpy.utils.register_class(CustomDrawOperator)
|
bpy.utils.register_class(CustomDrawOperator)
|
||||||
bpy.types.VIEW3D_MT_object.append(menu_func)
|
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.custom_draw('INVOKE_DEFAULT')
|
bpy.ops.object.custom_draw('INVOKE_DEFAULT')
|
||||||
|
@@ -55,13 +55,8 @@ class ModalOperator(bpy.types.Operator):
|
|||||||
context.window_manager.modal_handler_add(self)
|
context.window_manager.modal_handler_add(self)
|
||||||
return {'RUNNING_MODAL'}
|
return {'RUNNING_MODAL'}
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(ModalOperator.bl_idname, text="Modal Operator")
|
|
||||||
|
|
||||||
# Register and add to the object menu (required to also use F3 search "Modal Operator" for quick access)
|
|
||||||
bpy.utils.register_class(ModalOperator)
|
bpy.utils.register_class(ModalOperator)
|
||||||
bpy.types.VIEW3D_MT_object.append(menu_func)
|
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.modal_operator('INVOKE_DEFAULT')
|
bpy.ops.object.modal_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -31,13 +31,8 @@ class SearchEnumOperator(bpy.types.Operator):
|
|||||||
context.window_manager.invoke_search_popup(self)
|
context.window_manager.invoke_search_popup(self)
|
||||||
return {'RUNNING_MODAL'}
|
return {'RUNNING_MODAL'}
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(SearchEnumOperator.bl_idname, text="Search Enum Operator")
|
|
||||||
|
|
||||||
# Register and add to the object menu (required to also use F3 search "Search Enum Operator" for quick access)
|
|
||||||
bpy.utils.register_class(SearchEnumOperator)
|
bpy.utils.register_class(SearchEnumOperator)
|
||||||
bpy.types.VIEW3D_MT_object.append(menu_func)
|
|
||||||
|
|
||||||
# test call
|
# test call
|
||||||
bpy.ops.object.search_enum_operator('INVOKE_DEFAULT')
|
bpy.ops.object.search_enum_operator('INVOKE_DEFAULT')
|
||||||
|
@@ -22,13 +22,8 @@ class HelloWorldOperator(bpy.types.Operator):
|
|||||||
print("Hello World")
|
print("Hello World")
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
# Only needed if you want to add into a dynamic menu
|
|
||||||
def menu_func(self, context):
|
|
||||||
self.layout.operator(HelloWorldOperator.bl_idname, text="Hello World Operator")
|
|
||||||
|
|
||||||
# Register and add to the view menu (required to also use F3 search "Hello World Operator" for quick access)
|
|
||||||
bpy.utils.register_class(HelloWorldOperator)
|
bpy.utils.register_class(HelloWorldOperator)
|
||||||
bpy.types.VIEW3D_MT_view.append(menu_func)
|
|
||||||
|
|
||||||
# test call to the newly defined operator
|
# test call to the newly defined operator
|
||||||
bpy.ops.wm.hello_world()
|
bpy.ops.wm.hello_world()
|
||||||
|
@@ -32,7 +32,7 @@ def draw():
|
|||||||
context.region,
|
context.region,
|
||||||
view_matrix,
|
view_matrix,
|
||||||
projection_matrix,
|
projection_matrix,
|
||||||
do_color_management=True)
|
True)
|
||||||
|
|
||||||
gpu.state.depth_mask_set(False)
|
gpu.state.depth_mask_set(False)
|
||||||
draw_texture_2d(offscreen.texture_color, (10, 10), WIDTH, HEIGHT)
|
draw_texture_2d(offscreen.texture_color, (10, 10), WIDTH, HEIGHT)
|
||||||
|
@@ -106,6 +106,24 @@ including advanced features.
|
|||||||
floating-point values. These values are interpreted as a plane equation.
|
floating-point values. These values are interpreted as a plane equation.
|
||||||
|
|
||||||
|
|
||||||
|
.. function:: glColor (red, green, blue, alpha):
|
||||||
|
|
||||||
|
B{glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub, glColor3ui, glColor3us,
|
||||||
|
glColor4b, glColor4d, glColor4f, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us,
|
||||||
|
glColor3bv, glColor3dv, glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv,
|
||||||
|
glColor3usv, glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv,
|
||||||
|
glColor4uiv, glColor4usv}
|
||||||
|
|
||||||
|
Set a new color.
|
||||||
|
|
||||||
|
.. seealso:: `OpenGL Docs <https://khronos.org/registry/OpenGL-Refpages/gl4/html/glColor.xhtml>`__
|
||||||
|
|
||||||
|
:type red, green, blue, alpha: Depends on function prototype.
|
||||||
|
:arg red, green, blue: Specify new red, green, and blue values for the current color.
|
||||||
|
:arg alpha: Specifies a new alpha value for the current color. Included only in the
|
||||||
|
four-argument glColor4 commands. (With '4' colors only)
|
||||||
|
|
||||||
|
|
||||||
.. function:: glColorMask(red, green, blue, alpha):
|
.. function:: glColorMask(red, green, blue, alpha):
|
||||||
|
|
||||||
Enable and disable writing of frame buffer color components
|
Enable and disable writing of frame buffer color components
|
||||||
|
@@ -728,7 +728,7 @@ Abusing RNA property callbacks
|
|||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Python-defined RNA properties can have custom callbacks. Trying to perform complex operations
|
Python-defined RNA properties can have custom callbacks. Trying to perform complex operations
|
||||||
from there, like calling an operator, may work, but is not officially recommended nor supported.
|
from there, like calling an operator, may work, but is not officialy recommended nor supported.
|
||||||
|
|
||||||
Main reason is that those callback should be very fast, but additionally, it may for example
|
Main reason is that those callback should be very fast, but additionally, it may for example
|
||||||
create issues with undo/redo system (most operators store an history step, and editing an RNA
|
create issues with undo/redo system (most operators store an history step, and editing an RNA
|
||||||
|
@@ -1103,29 +1103,24 @@ context_type_map = {
|
|||||||
"selectable_objects": ("Object", True),
|
"selectable_objects": ("Object", True),
|
||||||
"selected_asset_files": ("FileSelectEntry", True),
|
"selected_asset_files": ("FileSelectEntry", True),
|
||||||
"selected_bones": ("EditBone", True),
|
"selected_bones": ("EditBone", True),
|
||||||
"selected_editable_actions": ("Action", True),
|
|
||||||
"selected_editable_bones": ("EditBone", True),
|
"selected_editable_bones": ("EditBone", True),
|
||||||
"selected_editable_fcurves": ("FCurve", True),
|
"selected_editable_fcurves": ("FCurve", True),
|
||||||
"selected_editable_keyframes": ("Keyframe", True),
|
"selected_editable_keyframes": ("Keyframe", True),
|
||||||
"selected_editable_objects": ("Object", True),
|
"selected_editable_objects": ("Object", True),
|
||||||
"selected_editable_sequences": ("Sequence", True),
|
"selected_editable_sequences": ("Sequence", True),
|
||||||
"selected_ids": ("ID", True),
|
|
||||||
"selected_files": ("FileSelectEntry", True),
|
"selected_files": ("FileSelectEntry", True),
|
||||||
"selected_ids": ("ID", True),
|
|
||||||
"selected_nla_strips": ("NlaStrip", True),
|
"selected_nla_strips": ("NlaStrip", True),
|
||||||
"selected_movieclip_tracks": ("MovieTrackingTrack", True),
|
|
||||||
"selected_nodes": ("Node", True),
|
"selected_nodes": ("Node", True),
|
||||||
"selected_objects": ("Object", True),
|
"selected_objects": ("Object", True),
|
||||||
"selected_pose_bones": ("PoseBone", True),
|
"selected_pose_bones": ("PoseBone", True),
|
||||||
"selected_pose_bones_from_active_object": ("PoseBone", True),
|
"selected_pose_bones_from_active_object": ("PoseBone", True),
|
||||||
"selected_sequences": ("Sequence", True),
|
"selected_sequences": ("Sequence", True),
|
||||||
"selected_visible_actions": ("Action", True),
|
|
||||||
"selected_visible_fcurves": ("FCurve", True),
|
"selected_visible_fcurves": ("FCurve", True),
|
||||||
"sequences": ("Sequence", True),
|
"sequences": ("Sequence", True),
|
||||||
"soft_body": ("SoftBodyModifier", False),
|
"soft_body": ("SoftBodyModifier", False),
|
||||||
"speaker": ("Speaker", False),
|
"speaker": ("Speaker", False),
|
||||||
"texture": ("Texture", False),
|
"texture": ("Texture", False),
|
||||||
"texture_slot": ("TextureSlot", False),
|
"texture_slot": ("MaterialTextureSlot", False),
|
||||||
"texture_user": ("ID", False),
|
"texture_user": ("ID", False),
|
||||||
"texture_user_property": ("Property", False),
|
"texture_user_property": ("Property", False),
|
||||||
"ui_list": ("UIList", False),
|
"ui_list": ("UIList", False),
|
||||||
@@ -1226,10 +1221,7 @@ def pycontext2sphinx(basepath):
|
|||||||
while char_array[i] is not None:
|
while char_array[i] is not None:
|
||||||
member = ctypes.string_at(char_array[i]).decode(encoding="ascii")
|
member = ctypes.string_at(char_array[i]).decode(encoding="ascii")
|
||||||
fw(".. data:: %s\n\n" % member)
|
fw(".. data:: %s\n\n" % member)
|
||||||
try:
|
|
||||||
member_type, is_seq = context_type_map[member]
|
member_type, is_seq = context_type_map[member]
|
||||||
except KeyError:
|
|
||||||
raise SystemExit("Error: context key %r not found in context_type_map; update %s" % (member, __file__)) from None
|
|
||||||
fw(" :type: %s :class:`bpy.types.%s`\n\n" % ("sequence of " if is_seq else "", member_type))
|
fw(" :type: %s :class:`bpy.types.%s`\n\n" % ("sequence of " if is_seq else "", member_type))
|
||||||
unique.add(member)
|
unique.add(member)
|
||||||
i += 1
|
i += 1
|
||||||
@@ -2256,7 +2248,7 @@ def main():
|
|||||||
# First monkey patch to load in fake members.
|
# First monkey patch to load in fake members.
|
||||||
setup_monkey_patch()
|
setup_monkey_patch()
|
||||||
|
|
||||||
# Perform changes to Blender itself.
|
# Perform changes to Blender it's self.
|
||||||
setup_data = setup_blender()
|
setup_data = setup_blender()
|
||||||
|
|
||||||
# eventually, create the dirs
|
# eventually, create the dirs
|
||||||
|
2
extern/audaspace/bindings/python/PySound.cpp
vendored
2
extern/audaspace/bindings/python/PySound.cpp
vendored
@@ -290,7 +290,7 @@ PyDoc_STRVAR(M_aud_Sound_buffer_doc,
|
|||||||
".. classmethod:: buffer(data, rate)\n\n"
|
".. classmethod:: buffer(data, rate)\n\n"
|
||||||
" Creates a sound from a data buffer.\n\n"
|
" Creates a sound from a data buffer.\n\n"
|
||||||
" :arg data: The data as two dimensional numpy array.\n"
|
" :arg data: The data as two dimensional numpy array.\n"
|
||||||
" :type data: :class:`numpy.ndarray`\n"
|
" :type data: numpy.ndarray\n"
|
||||||
" :arg rate: The sample rate.\n"
|
" :arg rate: The sample rate.\n"
|
||||||
" :type rate: double\n"
|
" :type rate: double\n"
|
||||||
" :return: The created :class:`Sound` object.\n"
|
" :return: The created :class:`Sound` object.\n"
|
||||||
|
12
extern/hipew/README
vendored
12
extern/hipew/README
vendored
@@ -1,12 +0,0 @@
|
|||||||
The HIP Extension Wrangler Library (HIPEW) is a cross-platform open-source
|
|
||||||
C/C++ library to dynamically load the HIP library.
|
|
||||||
|
|
||||||
HIP (Heterogeneous-Compute Interface for Portability) is an API for C++
|
|
||||||
programming on AMD GPUs.
|
|
||||||
|
|
||||||
It is maintained as part of the Blender project, but included in extern/
|
|
||||||
for consistency with CUEW and CLEW libraries.
|
|
||||||
|
|
||||||
LICENSE
|
|
||||||
|
|
||||||
HIPEW is released under the Apache 2.0 license.
|
|
5
extern/hipew/README.blender
vendored
5
extern/hipew/README.blender
vendored
@@ -1,5 +0,0 @@
|
|||||||
Project: Blender
|
|
||||||
URL: https://git.blender.org/blender.git
|
|
||||||
License: Apache 2.0
|
|
||||||
Upstream version: N/A
|
|
||||||
Local modifications: None
|
|
190
extern/hipew/include/hipew.h
vendored
190
extern/hipew/include/hipew.h
vendored
@@ -24,13 +24,9 @@ extern "C" {
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define HIP_IPC_HANDLE_SIZE 64
|
#define HIP_IPC_HANDLE_SIZE 64
|
||||||
#define hipHostMallocDefault 0x00
|
|
||||||
#define hipHostMallocPortable 0x01
|
#define hipHostMallocPortable 0x01
|
||||||
#define hipHostMallocMapped 0x02
|
#define hipHostMallocMapped 0x02
|
||||||
#define hipHostMallocWriteCombined 0x04
|
#define hipHostMallocWriteCombined 0x04
|
||||||
#define hipHostMallocNumaUser 0x20000000
|
|
||||||
#define hipHostMallocCoherent 0x40000000
|
|
||||||
#define hipHostMallocNonCoherent 0x80000000
|
|
||||||
#define hipHostRegisterPortable 0x01
|
#define hipHostRegisterPortable 0x01
|
||||||
#define hipHostRegisterMapped 0x02
|
#define hipHostRegisterMapped 0x02
|
||||||
#define hipHostRegisterIoMemory 0x04
|
#define hipHostRegisterIoMemory 0x04
|
||||||
@@ -425,105 +421,6 @@ typedef struct HIPdevprop_st {
|
|||||||
int textureAlign;
|
int textureAlign;
|
||||||
} HIPdevprop;
|
} HIPdevprop;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
// 32-bit Atomics
|
|
||||||
unsigned hasGlobalInt32Atomics : 1; ///< 32-bit integer atomics for global memory.
|
|
||||||
unsigned hasGlobalFloatAtomicExch : 1; ///< 32-bit float atomic exch for global memory.
|
|
||||||
unsigned hasSharedInt32Atomics : 1; ///< 32-bit integer atomics for shared memory.
|
|
||||||
unsigned hasSharedFloatAtomicExch : 1; ///< 32-bit float atomic exch for shared memory.
|
|
||||||
unsigned hasFloatAtomicAdd : 1; ///< 32-bit float atomic add in global and shared memory.
|
|
||||||
|
|
||||||
// 64-bit Atomics
|
|
||||||
unsigned hasGlobalInt64Atomics : 1; ///< 64-bit integer atomics for global memory.
|
|
||||||
unsigned hasSharedInt64Atomics : 1; ///< 64-bit integer atomics for shared memory.
|
|
||||||
|
|
||||||
// Doubles
|
|
||||||
unsigned hasDoubles : 1; ///< Double-precision floating point.
|
|
||||||
|
|
||||||
// Warp cross-lane operations
|
|
||||||
unsigned hasWarpVote : 1; ///< Warp vote instructions (__any, __all).
|
|
||||||
unsigned hasWarpBallot : 1; ///< Warp ballot instructions (__ballot).
|
|
||||||
unsigned hasWarpShuffle : 1; ///< Warp shuffle operations. (__shfl_*).
|
|
||||||
unsigned hasFunnelShift : 1; ///< Funnel two words into one with shift&mask caps.
|
|
||||||
|
|
||||||
// Sync
|
|
||||||
unsigned hasThreadFenceSystem : 1; ///< __threadfence_system.
|
|
||||||
unsigned hasSyncThreadsExt : 1; ///< __syncthreads_count, syncthreads_and, syncthreads_or.
|
|
||||||
|
|
||||||
// Misc
|
|
||||||
unsigned hasSurfaceFuncs : 1; ///< Surface functions.
|
|
||||||
unsigned has3dGrid : 1; ///< Grid and group dims are 3D (rather than 2D).
|
|
||||||
unsigned hasDynamicParallelism : 1; ///< Dynamic parallelism.
|
|
||||||
} hipDeviceArch_t;
|
|
||||||
|
|
||||||
typedef struct hipDeviceProp_t {
|
|
||||||
char name[256]; ///< Device name.
|
|
||||||
size_t totalGlobalMem; ///< Size of global memory region (in bytes).
|
|
||||||
size_t sharedMemPerBlock; ///< Size of shared memory region (in bytes).
|
|
||||||
int regsPerBlock; ///< Registers per block.
|
|
||||||
int warpSize; ///< Warp size.
|
|
||||||
int maxThreadsPerBlock; ///< Max work items per work group or workgroup max size.
|
|
||||||
int maxThreadsDim[3]; ///< Max number of threads in each dimension (XYZ) of a block.
|
|
||||||
int maxGridSize[3]; ///< Max grid dimensions (XYZ).
|
|
||||||
int clockRate; ///< Max clock frequency of the multiProcessors in khz.
|
|
||||||
int memoryClockRate; ///< Max global memory clock frequency in khz.
|
|
||||||
int memoryBusWidth; ///< Global memory bus width in bits.
|
|
||||||
size_t totalConstMem; ///< Size of shared memory region (in bytes).
|
|
||||||
int major; ///< Major compute capability. On HCC, this is an approximation and features may
|
|
||||||
///< differ from CUDA CC. See the arch feature flags for portable ways to query
|
|
||||||
///< feature caps.
|
|
||||||
int minor; ///< Minor compute capability. On HCC, this is an approximation and features may
|
|
||||||
///< differ from CUDA CC. See the arch feature flags for portable ways to query
|
|
||||||
///< feature caps.
|
|
||||||
int multiProcessorCount; ///< Number of multi-processors (compute units).
|
|
||||||
int l2CacheSize; ///< L2 cache size.
|
|
||||||
int maxThreadsPerMultiProcessor; ///< Maximum resident threads per multi-processor.
|
|
||||||
int computeMode; ///< Compute mode.
|
|
||||||
int clockInstructionRate; ///< Frequency in khz of the timer used by the device-side "clock*"
|
|
||||||
///< instructions. New for HIP.
|
|
||||||
hipDeviceArch_t arch; ///< Architectural feature flags. New for HIP.
|
|
||||||
int concurrentKernels; ///< Device can possibly execute multiple kernels concurrently.
|
|
||||||
int pciDomainID; ///< PCI Domain ID
|
|
||||||
int pciBusID; ///< PCI Bus ID.
|
|
||||||
int pciDeviceID; ///< PCI Device ID.
|
|
||||||
size_t maxSharedMemoryPerMultiProcessor; ///< Maximum Shared Memory Per Multiprocessor.
|
|
||||||
int isMultiGpuBoard; ///< 1 if device is on a multi-GPU board, 0 if not.
|
|
||||||
int canMapHostMemory; ///< Check whether HIP can map host memory
|
|
||||||
int gcnArch; ///< DEPRECATED: use gcnArchName instead
|
|
||||||
char gcnArchName[256]; ///< AMD GCN Arch Name.
|
|
||||||
int integrated; ///< APU vs dGPU
|
|
||||||
int cooperativeLaunch; ///< HIP device supports cooperative launch
|
|
||||||
int cooperativeMultiDeviceLaunch; ///< HIP device supports cooperative launch on multiple devices
|
|
||||||
int maxTexture1DLinear; ///< Maximum size for 1D textures bound to linear memory
|
|
||||||
int maxTexture1D; ///< Maximum number of elements in 1D images
|
|
||||||
int maxTexture2D[2]; ///< Maximum dimensions (width, height) of 2D images, in image elements
|
|
||||||
int maxTexture3D[3]; ///< Maximum dimensions (width, height, depth) of 3D images, in image elements
|
|
||||||
unsigned int* hdpMemFlushCntl; ///< Addres of HDP_MEM_COHERENCY_FLUSH_CNTL register
|
|
||||||
unsigned int* hdpRegFlushCntl; ///< Addres of HDP_REG_COHERENCY_FLUSH_CNTL register
|
|
||||||
size_t memPitch; ///<Maximum pitch in bytes allowed by memory copies
|
|
||||||
size_t textureAlignment; ///<Alignment requirement for textures
|
|
||||||
size_t texturePitchAlignment; ///<Pitch alignment requirement for texture references bound to pitched memory
|
|
||||||
int kernelExecTimeoutEnabled; ///<Run time limit for kernels executed on the device
|
|
||||||
int ECCEnabled; ///<Device has ECC support enabled
|
|
||||||
int tccDriver; ///< 1:If device is Tesla device using TCC driver, else 0
|
|
||||||
int cooperativeMultiDeviceUnmatchedFunc; ///< HIP device supports cooperative launch on multiple
|
|
||||||
///devices with unmatched functions
|
|
||||||
int cooperativeMultiDeviceUnmatchedGridDim; ///< HIP device supports cooperative launch on multiple
|
|
||||||
///devices with unmatched grid dimensions
|
|
||||||
int cooperativeMultiDeviceUnmatchedBlockDim; ///< HIP device supports cooperative launch on multiple
|
|
||||||
///devices with unmatched block dimensions
|
|
||||||
int cooperativeMultiDeviceUnmatchedSharedMem; ///< HIP device supports cooperative launch on multiple
|
|
||||||
///devices with unmatched shared memories
|
|
||||||
int isLargeBar; ///< 1: if it is a large PCI bar device, else 0
|
|
||||||
int asicRevision; ///< Revision of the GPU in this device
|
|
||||||
int managedMemory; ///< Device supports allocating managed memory on this system
|
|
||||||
int directManagedMemAccessFromHost; ///< Host can directly access managed memory on the device without migration
|
|
||||||
int concurrentManagedAccess; ///< Device can coherently access managed memory concurrently with the CPU
|
|
||||||
int pageableMemoryAccess; ///< Device supports coherently accessing pageable memory
|
|
||||||
///< without calling hipHostRegister on it
|
|
||||||
int pageableMemoryAccessUsesHostPageTables; ///< Device accesses pageable memory via the host's page tables
|
|
||||||
} hipDeviceProp_t;
|
|
||||||
|
|
||||||
typedef enum HIPpointer_attribute_enum {
|
typedef enum HIPpointer_attribute_enum {
|
||||||
HIP_POINTER_ATTRIBUTE_CONTEXT = 1,
|
HIP_POINTER_ATTRIBUTE_CONTEXT = 1,
|
||||||
HIP_POINTER_ATTRIBUTE_MEMORY_TYPE = 2,
|
HIP_POINTER_ATTRIBUTE_MEMORY_TYPE = 2,
|
||||||
@@ -804,29 +701,31 @@ typedef enum hipDeviceP2PAttr {
|
|||||||
} hipDeviceP2PAttr;
|
} hipDeviceP2PAttr;
|
||||||
|
|
||||||
typedef struct HIP_MEMCPY3D {
|
typedef struct HIP_MEMCPY3D {
|
||||||
unsigned int srcXInBytes;
|
size_t srcXInBytes;
|
||||||
unsigned int srcY;
|
size_t srcY;
|
||||||
unsigned int srcZ;
|
size_t srcZ;
|
||||||
unsigned int srcLOD;
|
size_t srcLOD;
|
||||||
hipMemoryType srcMemoryType;
|
hipMemoryType srcMemoryType;
|
||||||
const void* srcHost;
|
const void* srcHost;
|
||||||
hipDeviceptr_t srcDevice;
|
hipDeviceptr_t srcDevice;
|
||||||
hArray srcArray;
|
hArray * srcArray;
|
||||||
unsigned int srcPitch;
|
void* reserved0;
|
||||||
unsigned int srcHeight;
|
size_t srcPitch;
|
||||||
unsigned int dstXInBytes;
|
size_t srcHeight;
|
||||||
unsigned int dstY;
|
size_t dstXInBytes;
|
||||||
unsigned int dstZ;
|
size_t dstY;
|
||||||
unsigned int dstLOD;
|
size_t dstZ;
|
||||||
|
size_t dstLOD;
|
||||||
hipMemoryType dstMemoryType;
|
hipMemoryType dstMemoryType;
|
||||||
void* dstHost;
|
void* dstHost;
|
||||||
hipDeviceptr_t dstDevice;
|
hipDeviceptr_t dstDevice;
|
||||||
hArray dstArray;
|
hArray * dstArray;
|
||||||
unsigned int dstPitch;
|
void* reserved1;
|
||||||
unsigned int dstHeight;
|
size_t dstPitch;
|
||||||
unsigned int WidthInBytes;
|
size_t dstHeight;
|
||||||
unsigned int Height;
|
size_t WidthInBytes;
|
||||||
unsigned int Depth;
|
size_t Height;
|
||||||
|
size_t Depth;
|
||||||
} HIP_MEMCPY3D;
|
} HIP_MEMCPY3D;
|
||||||
|
|
||||||
typedef struct HIP_MEMCPY3D_PEER_st {
|
typedef struct HIP_MEMCPY3D_PEER_st {
|
||||||
@@ -877,7 +776,7 @@ typedef struct HIP_RESOURCE_DESC_st {
|
|||||||
hipResourceType resType;
|
hipResourceType resType;
|
||||||
union {
|
union {
|
||||||
struct {
|
struct {
|
||||||
hArray h_Array;
|
hArray * h_Array;
|
||||||
} array;
|
} array;
|
||||||
struct {
|
struct {
|
||||||
hipMipmappedArray_t hMipmappedArray;
|
hipMipmappedArray_t hMipmappedArray;
|
||||||
@@ -1048,34 +947,13 @@ typedef enum HIPGLmap_flags_enum {
|
|||||||
HIP_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02,
|
HIP_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02,
|
||||||
} HIPGLmap_flags;
|
} HIPGLmap_flags;
|
||||||
|
|
||||||
/**
|
|
||||||
* hipRTC related
|
|
||||||
*/
|
|
||||||
typedef struct _hiprtcProgram* hiprtcProgram;
|
|
||||||
|
|
||||||
typedef enum hiprtcResult {
|
|
||||||
HIPRTC_SUCCESS = 0,
|
|
||||||
HIPRTC_ERROR_OUT_OF_MEMORY = 1,
|
|
||||||
HIPRTC_ERROR_PROGRAM_CREATION_FAILURE = 2,
|
|
||||||
HIPRTC_ERROR_INVALID_INPUT = 3,
|
|
||||||
HIPRTC_ERROR_INVALID_PROGRAM = 4,
|
|
||||||
HIPRTC_ERROR_INVALID_OPTION = 5,
|
|
||||||
HIPRTC_ERROR_COMPILATION = 6,
|
|
||||||
HIPRTC_ERROR_BUILTIN_OPERATION_FAILURE = 7,
|
|
||||||
HIPRTC_ERROR_NO_NAME_EXPRESSIONS_AFTER_COMPILATION = 8,
|
|
||||||
HIPRTC_ERROR_NO_LOWERED_NAMES_BEFORE_COMPILATION = 9,
|
|
||||||
HIPRTC_ERROR_NAME_EXPRESSION_NOT_VALID = 10,
|
|
||||||
HIPRTC_ERROR_INTERNAL_ERROR = 11
|
|
||||||
} hiprtcResult;
|
|
||||||
|
|
||||||
/* Function types. */
|
/* Function types. */
|
||||||
typedef hipError_t HIPAPI thipGetErrorName(hipError_t error, const char** pStr);
|
typedef hipError_t HIPAPI thipGetErrorName(hipError_t error, const char** pStr);
|
||||||
typedef hipError_t HIPAPI thipInit(unsigned int Flags);
|
typedef hipError_t HIPAPI thipInit(unsigned int Flags);
|
||||||
typedef hipError_t HIPAPI thipDriverGetVersion(int* driverVersion);
|
typedef hipError_t HIPAPI thipDriverGetVersion(int* driverVersion);
|
||||||
typedef hipError_t HIPAPI thipGetDevice(int* device);
|
typedef hipError_t HIPAPI thipGetDevice(hipDevice_t* device, int ordinal);
|
||||||
typedef hipError_t HIPAPI thipGetDeviceCount(int* count);
|
typedef hipError_t HIPAPI thipGetDeviceCount(int* count);
|
||||||
typedef hipError_t HIPAPI thipGetDeviceProperties(hipDeviceProp_t* props, int deviceId);
|
|
||||||
typedef hipError_t HIPAPI thipDeviceGet(hipDevice_t* device, int ordinal);
|
|
||||||
typedef hipError_t HIPAPI thipDeviceGetName(char* name, int len, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceGetName(char* name, int len, hipDevice_t dev);
|
||||||
typedef hipError_t HIPAPI thipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attrib, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceGetAttribute(int* pi, hipDeviceAttribute_t attrib, hipDevice_t dev);
|
||||||
typedef hipError_t HIPAPI thipDeviceComputeCapability(int* major, int* minor, hipDevice_t dev);
|
typedef hipError_t HIPAPI thipDeviceComputeCapability(int* major, int* minor, hipDevice_t dev);
|
||||||
@@ -1111,7 +989,7 @@ typedef hipError_t HIPAPI thipMalloc(hipDeviceptr_t* dptr, size_t bytesize);
|
|||||||
typedef hipError_t HIPAPI thipMemAllocPitch(hipDeviceptr_t* dptr, size_t* pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes);
|
typedef hipError_t HIPAPI thipMemAllocPitch(hipDeviceptr_t* dptr, size_t* pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes);
|
||||||
typedef hipError_t HIPAPI thipFree(hipDeviceptr_t dptr);
|
typedef hipError_t HIPAPI thipFree(hipDeviceptr_t dptr);
|
||||||
typedef hipError_t HIPAPI thipMemGetAddressRange(hipDeviceptr_t* pbase, size_t* psize, hipDeviceptr_t dptr);
|
typedef hipError_t HIPAPI thipMemGetAddressRange(hipDeviceptr_t* pbase, size_t* psize, hipDeviceptr_t dptr);
|
||||||
typedef hipError_t HIPAPI thipHostMalloc(void** pp, size_t bytesize, unsigned int flags);
|
typedef hipError_t HIPAPI thipHostMalloc(void** pp, size_t bytesize);
|
||||||
typedef hipError_t HIPAPI thipHostFree(void* p);
|
typedef hipError_t HIPAPI thipHostFree(void* p);
|
||||||
typedef hipError_t HIPAPI thipMemHostAlloc(void** pp, size_t bytesize, unsigned int Flags);
|
typedef hipError_t HIPAPI thipMemHostAlloc(void** pp, size_t bytesize, unsigned int Flags);
|
||||||
typedef hipError_t HIPAPI thipHostGetDevicePointer(hipDeviceptr_t* pdptr, void* p, unsigned int Flags);
|
typedef hipError_t HIPAPI thipHostGetDevicePointer(hipDeviceptr_t* pdptr, void* p, unsigned int Flags);
|
||||||
@@ -1189,16 +1067,6 @@ typedef hipError_t HIPAPI thipGraphicsMapResources(unsigned int count, hipGraphi
|
|||||||
typedef hipError_t HIPAPI thipGraphicsUnmapResources(unsigned int count, hipGraphicsResource* resources, hipStream_t hStream);
|
typedef hipError_t HIPAPI thipGraphicsUnmapResources(unsigned int count, hipGraphicsResource* resources, hipStream_t hStream);
|
||||||
typedef hipError_t HIPAPI thipGraphicsGLRegisterBuffer(hipGraphicsResource* pCudaResource, GLuint buffer, unsigned int Flags);
|
typedef hipError_t HIPAPI thipGraphicsGLRegisterBuffer(hipGraphicsResource* pCudaResource, GLuint buffer, unsigned int Flags);
|
||||||
typedef hipError_t HIPAPI thipGLGetDevices(unsigned int* pHipDeviceCount, int* pHipDevices, unsigned int hipDeviceCount, hipGLDeviceList deviceList);
|
typedef hipError_t HIPAPI thipGLGetDevices(unsigned int* pHipDeviceCount, int* pHipDevices, unsigned int hipDeviceCount, hipGLDeviceList deviceList);
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetErrorString(hiprtcResult result);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcAddNameExpression(hiprtcProgram prog, const char* name_expression);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcCompileProgram(hiprtcProgram prog, int numOptions, const char** options);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcCreateProgram(hiprtcProgram* prog, const char* src, const char* name, int numHeaders, const char** headers, const char** includeNames);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcDestroyProgram(hiprtcProgram* prog);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetLoweredName(hiprtcProgram prog, const char* name_expression, const char** lowered_name);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetProgramLog(hiprtcProgram prog, char* log);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetProgramLogSize(hiprtcProgram prog, size_t* logSizeRet);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetCode(hiprtcProgram prog, char* code);
|
|
||||||
typedef hiprtcResult HIPAPI thiprtcGetCodeSize(hiprtcProgram prog, size_t* codeSizeRet);
|
|
||||||
|
|
||||||
|
|
||||||
/* Function declarations. */
|
/* Function declarations. */
|
||||||
@@ -1207,8 +1075,6 @@ extern thipInit *hipInit;
|
|||||||
extern thipDriverGetVersion *hipDriverGetVersion;
|
extern thipDriverGetVersion *hipDriverGetVersion;
|
||||||
extern thipGetDevice *hipGetDevice;
|
extern thipGetDevice *hipGetDevice;
|
||||||
extern thipGetDeviceCount *hipGetDeviceCount;
|
extern thipGetDeviceCount *hipGetDeviceCount;
|
||||||
extern thipGetDeviceProperties *hipGetDeviceProperties;
|
|
||||||
extern thipDeviceGet* hipDeviceGet;
|
|
||||||
extern thipDeviceGetName *hipDeviceGetName;
|
extern thipDeviceGetName *hipDeviceGetName;
|
||||||
extern thipDeviceGetAttribute *hipDeviceGetAttribute;
|
extern thipDeviceGetAttribute *hipDeviceGetAttribute;
|
||||||
extern thipDeviceComputeCapability *hipDeviceComputeCapability;
|
extern thipDeviceComputeCapability *hipDeviceComputeCapability;
|
||||||
@@ -1317,23 +1183,11 @@ extern thipGraphicsUnmapResources *hipGraphicsUnmapResources;
|
|||||||
extern thipGraphicsGLRegisterBuffer *hipGraphicsGLRegisterBuffer;
|
extern thipGraphicsGLRegisterBuffer *hipGraphicsGLRegisterBuffer;
|
||||||
extern thipGLGetDevices *hipGLGetDevices;
|
extern thipGLGetDevices *hipGLGetDevices;
|
||||||
|
|
||||||
extern thiprtcGetErrorString* hiprtcGetErrorString;
|
|
||||||
extern thiprtcAddNameExpression* hiprtcAddNameExpression;
|
|
||||||
extern thiprtcCompileProgram* hiprtcCompileProgram;
|
|
||||||
extern thiprtcCreateProgram* hiprtcCreateProgram;
|
|
||||||
extern thiprtcDestroyProgram* hiprtcDestroyProgram;
|
|
||||||
extern thiprtcGetLoweredName* hiprtcGetLoweredName;
|
|
||||||
extern thiprtcGetProgramLog* hiprtcGetProgramLog;
|
|
||||||
extern thiprtcGetProgramLogSize* hiprtcGetProgramLogSize;
|
|
||||||
extern thiprtcGetCode* hiprtcGetCode;
|
|
||||||
extern thiprtcGetCodeSize* hiprtcGetCodeSize;
|
|
||||||
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
HIPEW_SUCCESS = 0,
|
HIPEW_SUCCESS = 0,
|
||||||
HIPEW_ERROR_OPEN_FAILED = -1,
|
HIPEW_ERROR_OPEN_FAILED = -1,
|
||||||
HIPEW_ERROR_ATEXIT_FAILED = -2,
|
HIPEW_ERROR_ATEXIT_FAILED = -2,
|
||||||
HIPEW_ERROR_OLD_DRIVER = -3,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
63
extern/hipew/src/hipew.c
vendored
63
extern/hipew/src/hipew.c
vendored
@@ -70,8 +70,6 @@ thipInit *hipInit;
|
|||||||
thipDriverGetVersion *hipDriverGetVersion;
|
thipDriverGetVersion *hipDriverGetVersion;
|
||||||
thipGetDevice *hipGetDevice;
|
thipGetDevice *hipGetDevice;
|
||||||
thipGetDeviceCount *hipGetDeviceCount;
|
thipGetDeviceCount *hipGetDeviceCount;
|
||||||
thipGetDeviceProperties *hipGetDeviceProperties;
|
|
||||||
thipDeviceGet* hipDeviceGet;
|
|
||||||
thipDeviceGetName *hipDeviceGetName;
|
thipDeviceGetName *hipDeviceGetName;
|
||||||
thipDeviceGetAttribute *hipDeviceGetAttribute;
|
thipDeviceGetAttribute *hipDeviceGetAttribute;
|
||||||
thipDeviceComputeCapability *hipDeviceComputeCapability;
|
thipDeviceComputeCapability *hipDeviceComputeCapability;
|
||||||
@@ -180,17 +178,6 @@ thipGraphicsResourceGetMappedPointer *hipGraphicsResourceGetMappedPointer;
|
|||||||
thipGraphicsGLRegisterBuffer *hipGraphicsGLRegisterBuffer;
|
thipGraphicsGLRegisterBuffer *hipGraphicsGLRegisterBuffer;
|
||||||
thipGLGetDevices *hipGLGetDevices;
|
thipGLGetDevices *hipGLGetDevices;
|
||||||
|
|
||||||
thiprtcGetErrorString* hiprtcGetErrorString;
|
|
||||||
thiprtcAddNameExpression* hiprtcAddNameExpression;
|
|
||||||
thiprtcCompileProgram* hiprtcCompileProgram;
|
|
||||||
thiprtcCreateProgram* hiprtcCreateProgram;
|
|
||||||
thiprtcDestroyProgram* hiprtcDestroyProgram;
|
|
||||||
thiprtcGetLoweredName* hiprtcGetLoweredName;
|
|
||||||
thiprtcGetProgramLog* hiprtcGetProgramLog;
|
|
||||||
thiprtcGetProgramLogSize* hiprtcGetProgramLogSize;
|
|
||||||
thiprtcGetCode* hiprtcGetCode;
|
|
||||||
thiprtcGetCodeSize* hiprtcGetCodeSize;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static DynamicLibrary dynamic_library_open_find(const char **paths) {
|
static DynamicLibrary dynamic_library_open_find(const char **paths) {
|
||||||
@@ -214,36 +201,6 @@ static void hipewHipExit(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
static int hipewHasOldDriver(const char *hip_path) {
|
|
||||||
DWORD verHandle = 0;
|
|
||||||
DWORD verSize = GetFileVersionInfoSize(hip_path, &verHandle);
|
|
||||||
int old_driver = 0;
|
|
||||||
if (verSize != 0) {
|
|
||||||
LPSTR verData = (LPSTR)malloc(verSize);
|
|
||||||
if (GetFileVersionInfo(hip_path, verHandle, verSize, verData)) {
|
|
||||||
LPBYTE lpBuffer = NULL;
|
|
||||||
UINT size = 0;
|
|
||||||
if (VerQueryValue(verData, "\\", (VOID FAR * FAR *)&lpBuffer, &size)) {
|
|
||||||
if (size) {
|
|
||||||
VS_FIXEDFILEINFO *verInfo = (VS_FIXEDFILEINFO *)lpBuffer;
|
|
||||||
/* Magic value from
|
|
||||||
* https://docs.microsoft.com/en-us/windows/win32/api/verrsrc/ns-verrsrc-vs_fixedfileinfo */
|
|
||||||
if (verInfo->dwSignature == 0xfeef04bd) {
|
|
||||||
unsigned int fileVersionLS0 = (verInfo->dwFileVersionLS >> 16) & 0xffff;
|
|
||||||
unsigned int fileversionLS1 = (verInfo->dwFileVersionLS >> 0) & 0xffff;
|
|
||||||
/* Corresponds to versions older than AMD Radeon Pro 21.Q4. */
|
|
||||||
old_driver = ((fileVersionLS0 < 3354) || (fileVersionLS0 == 3354 && fileversionLS1 < 13));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(verData);
|
|
||||||
}
|
|
||||||
return old_driver;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int hipewHipInit(void) {
|
static int hipewHipInit(void) {
|
||||||
/* Library paths. */
|
/* Library paths. */
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -271,14 +228,6 @@ static int hipewHipInit(void) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
/* Test for driver version. */
|
|
||||||
if(hipewHasOldDriver(hip_paths[0])) {
|
|
||||||
result = HIPEW_ERROR_OLD_DRIVER;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Load library. */
|
/* Load library. */
|
||||||
hip_lib = dynamic_library_open_find(hip_paths);
|
hip_lib = dynamic_library_open_find(hip_paths);
|
||||||
|
|
||||||
@@ -293,8 +242,6 @@ static int hipewHipInit(void) {
|
|||||||
HIP_LIBRARY_FIND_CHECKED(hipDriverGetVersion);
|
HIP_LIBRARY_FIND_CHECKED(hipDriverGetVersion);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDevice);
|
HIP_LIBRARY_FIND_CHECKED(hipGetDevice);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceCount);
|
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceCount);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGetDeviceProperties);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceGet);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetName);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetName);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetAttribute);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceGetAttribute);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipDeviceComputeCapability);
|
HIP_LIBRARY_FIND_CHECKED(hipDeviceComputeCapability);
|
||||||
@@ -399,16 +346,6 @@ static int hipewHipInit(void) {
|
|||||||
HIP_LIBRARY_FIND_CHECKED(hipGraphicsGLRegisterBuffer);
|
HIP_LIBRARY_FIND_CHECKED(hipGraphicsGLRegisterBuffer);
|
||||||
HIP_LIBRARY_FIND_CHECKED(hipGLGetDevices);
|
HIP_LIBRARY_FIND_CHECKED(hipGLGetDevices);
|
||||||
#endif
|
#endif
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetErrorString);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcAddNameExpression);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcCompileProgram);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcCreateProgram);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcDestroyProgram);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetLoweredName);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetProgramLog);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetProgramLogSize);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetCode);
|
|
||||||
HIP_LIBRARY_FIND_CHECKED(hiprtcGetCodeSize);
|
|
||||||
result = HIPEW_SUCCESS;
|
result = HIPEW_SUCCESS;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
2
extern/nanosvg/README.blender
vendored
2
extern/nanosvg/README.blender
vendored
@@ -1,7 +1,7 @@
|
|||||||
Project: NanoSVG
|
Project: NanoSVG
|
||||||
URL: https://github.com/memononen/nanosvg
|
URL: https://github.com/memononen/nanosvg
|
||||||
License: zlib
|
License: zlib
|
||||||
Upstream version: 3cdd4a9d7886
|
Upstream version:
|
||||||
Local modifications: Added some functionality to manage grease pencil layers
|
Local modifications: Added some functionality to manage grease pencil layers
|
||||||
|
|
||||||
Added a fix to SVG import arc and float errors (https://developer.blender.org/rB11dc674c78b49fc4e0b7c134c375b6c8b8eacbcc)
|
Added a fix to SVG import arc and float errors (https://developer.blender.org/rB11dc674c78b49fc4e0b7c134c375b6c8b8eacbcc)
|
||||||
|
BIN
extern/tinygltf/patches/TinyGLTF.diff
vendored
BIN
extern/tinygltf/patches/TinyGLTF.diff
vendored
Binary file not shown.
@@ -45,7 +45,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup intern_atomic
|
* \ingroup Atomic
|
||||||
*
|
*
|
||||||
* \brief Provides wrapper around system-specific atomic primitives,
|
* \brief Provides wrapper around system-specific atomic primitives,
|
||||||
* and some extensions (faked-atomic operations over float numbers).
|
* and some extensions (faked-atomic operations over float numbers).
|
||||||
|
@@ -44,10 +44,6 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
|
||||||
* \ingroup intern_atomic
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_EXT_H__
|
#ifndef __ATOMIC_OPS_EXT_H__
|
||||||
#define __ATOMIC_OPS_EXT_H__
|
#define __ATOMIC_OPS_EXT_H__
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
* Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
|
* Copyright (C) 2007-2012 Mozilla Foundation. All rights reserved.
|
||||||
* Copyright (C) 2009-2013 Facebook, Inc. All rights reserved.
|
* Copyright (C) 2009-2013 Facebook, Inc. All rights reserved.
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
* 1. Redistributions of source code must retain the above copyright notice(s),
|
* 1. Redistributions of source code must retain the above copyright notice(s),
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright notice(s),
|
* 2. Redistributions in binary form must reproduce the above copyright notice(s),
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
* and/or other materials provided with the distribution.
|
* and/or other materials provided with the distribution.
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY EXPRESS
|
||||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
@@ -26,10 +26,6 @@
|
|||||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
|
||||||
* \ingroup intern_atomic
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_MSVC_H__
|
#ifndef __ATOMIC_OPS_MSVC_H__
|
||||||
#define __ATOMIC_OPS_MSVC_H__
|
#define __ATOMIC_OPS_MSVC_H__
|
||||||
|
|
||||||
|
@@ -44,10 +44,6 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
|
||||||
* \ingroup intern_atomic
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_UNIX_H__
|
#ifndef __ATOMIC_OPS_UNIX_H__
|
||||||
#define __ATOMIC_OPS_UNIX_H__
|
#define __ATOMIC_OPS_UNIX_H__
|
||||||
|
|
||||||
|
@@ -44,10 +44,6 @@
|
|||||||
* The Original Code is: adapted from jemalloc.
|
* The Original Code is: adapted from jemalloc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
|
||||||
* \ingroup intern_atomic
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ATOMIC_OPS_UTILS_H__
|
#ifndef __ATOMIC_OPS_UTILS_H__
|
||||||
#define __ATOMIC_OPS_UTILS_H__
|
#define __ATOMIC_OPS_UTILS_H__
|
||||||
|
|
||||||
|
@@ -14,8 +14,11 @@
|
|||||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef __CLG_LOG_H__
|
||||||
|
#define __CLG_LOG_H__
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup intern_clog
|
* \ingroup clog
|
||||||
*
|
*
|
||||||
* C Logging Library (clog)
|
* C Logging Library (clog)
|
||||||
* ========================
|
* ========================
|
||||||
@@ -65,9 +68,6 @@
|
|||||||
* - 4+: May be used for more details than 3, should be avoided but not prevented.
|
* - 4+: May be used for more details than 3, should be avoided but not prevented.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CLG_LOG_H__
|
|
||||||
#define __CLG_LOG_H__
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/** \file
|
/** \file
|
||||||
* \ingroup intern_clog
|
* \ingroup clog
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -388,7 +388,7 @@ static void clg_ctx_fatal_action(CLogContext *ctx)
|
|||||||
|
|
||||||
static void clg_ctx_backtrace(CLogContext *ctx)
|
static void clg_ctx_backtrace(CLogContext *ctx)
|
||||||
{
|
{
|
||||||
/* NOTE: we avoid writing to 'FILE', for back-trace we make an exception,
|
/* Note: we avoid writing to 'FILE', for back-trace we make an exception,
|
||||||
* if necessary we could have a version of the callback that writes to file
|
* if necessary we could have a version of the callback that writes to file
|
||||||
* descriptor all at once. */
|
* descriptor all at once. */
|
||||||
ctx->callbacks.backtrace_fn(ctx->output_file);
|
ctx->callbacks.backtrace_fn(ctx->output_file);
|
||||||
|
@@ -226,9 +226,6 @@ add_definitions(
|
|||||||
-DCCL_NAMESPACE_END=}
|
-DCCL_NAMESPACE_END=}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(WITH_CYCLES_DEBUG)
|
|
||||||
add_definitions(-DWITH_CYCLES_DEBUG)
|
|
||||||
endif()
|
|
||||||
if(WITH_CYCLES_STANDALONE_GUI)
|
if(WITH_CYCLES_STANDALONE_GUI)
|
||||||
add_definitions(-DWITH_CYCLES_STANDALONE_GUI)
|
add_definitions(-DWITH_CYCLES_STANDALONE_GUI)
|
||||||
endif()
|
endif()
|
||||||
@@ -298,6 +295,13 @@ if(WITH_OPENIMAGEDENOISE)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_CYCLES_STANDALONE)
|
||||||
|
set(WITH_CYCLES_DEVICE_CUDA TRUE)
|
||||||
|
set(WITH_CYCLES_DEVICE_HIP TRUE)
|
||||||
|
endif()
|
||||||
|
# TODO(sergey): Consider removing it, only causes confusion in interface.
|
||||||
|
set(WITH_CYCLES_DEVICE_MULTI TRUE)
|
||||||
|
|
||||||
# Logging capabilities using GLog library.
|
# Logging capabilities using GLog library.
|
||||||
if(WITH_CYCLES_LOGGING)
|
if(WITH_CYCLES_LOGGING)
|
||||||
add_definitions(-DWITH_CYCLES_LOGGING)
|
add_definitions(-DWITH_CYCLES_LOGGING)
|
||||||
@@ -337,7 +341,7 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Warnings
|
# Warnings
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_float_conversion "-Werror=float-conversion")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_float_conversion "-Werror=float-conversion")
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_double_promotion "-Werror=double-promotion")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_cxxflag_double_promotion "-Werror=double-promotion")
|
||||||
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_no_error_unused_macros "-Wno-error=unused-macros")
|
ADD_CHECK_CXX_COMPILER_FLAG(CMAKE_CXX_FLAGS _has_no_error_unused_macros "-Wno-error=unused-macros")
|
||||||
@@ -396,8 +400,7 @@ add_subdirectory(doc)
|
|||||||
add_subdirectory(graph)
|
add_subdirectory(graph)
|
||||||
add_subdirectory(integrator)
|
add_subdirectory(integrator)
|
||||||
add_subdirectory(kernel)
|
add_subdirectory(kernel)
|
||||||
add_subdirectory(scene)
|
add_subdirectory(render)
|
||||||
add_subdirectory(session)
|
|
||||||
add_subdirectory(subd)
|
add_subdirectory(subd)
|
||||||
add_subdirectory(util)
|
add_subdirectory(util)
|
||||||
|
|
||||||
|
@@ -25,8 +25,7 @@ set(INC_SYS
|
|||||||
set(LIBRARIES
|
set(LIBRARIES
|
||||||
cycles_device
|
cycles_device
|
||||||
cycles_kernel
|
cycles_kernel
|
||||||
cycles_scene
|
cycles_render
|
||||||
cycles_session
|
|
||||||
cycles_bvh
|
cycles_bvh
|
||||||
cycles_subd
|
cycles_subd
|
||||||
cycles_graph
|
cycles_graph
|
||||||
|
@@ -18,13 +18,13 @@
|
|||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
|
|
||||||
#include "util/args.h"
|
#include "util/util_args.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/stats.h"
|
#include "util/util_stats.h"
|
||||||
#include "util/string.h"
|
#include "util/util_string.h"
|
||||||
#include "util/task.h"
|
#include "util/util_task.h"
|
||||||
|
|
||||||
using namespace ccl;
|
using namespace ccl;
|
||||||
|
|
||||||
|
@@ -17,30 +17,30 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
#include "scene/camera.h"
|
#include "render/buffers.h"
|
||||||
#include "scene/integrator.h"
|
#include "render/camera.h"
|
||||||
#include "scene/scene.h"
|
#include "render/integrator.h"
|
||||||
#include "session/buffers.h"
|
#include "render/scene.h"
|
||||||
#include "session/session.h"
|
#include "render/session.h"
|
||||||
|
|
||||||
#include "util/args.h"
|
#include "util/util_args.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/function.h"
|
#include "util/util_function.h"
|
||||||
#include "util/image.h"
|
#include "util/util_image.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/progress.h"
|
#include "util/util_progress.h"
|
||||||
#include "util/string.h"
|
#include "util/util_string.h"
|
||||||
#include "util/time.h"
|
#include "util/util_time.h"
|
||||||
#include "util/transform.h"
|
#include "util/util_transform.h"
|
||||||
#include "util/unique_ptr.h"
|
#include "util/util_unique_ptr.h"
|
||||||
#include "util/version.h"
|
#include "util/util_version.h"
|
||||||
|
|
||||||
#include "app/cycles_xml.h"
|
#include "app/cycles_xml.h"
|
||||||
#include "app/oiio_output_driver.h"
|
#include "app/oiio_output_driver.h"
|
||||||
|
|
||||||
#ifdef WITH_CYCLES_STANDALONE_GUI
|
#ifdef WITH_CYCLES_STANDALONE_GUI
|
||||||
# include "util/view.h"
|
# include "util/util_view.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "app/cycles_xml.h"
|
#include "app/cycles_xml.h"
|
||||||
|
@@ -22,27 +22,27 @@
|
|||||||
|
|
||||||
#include "graph/node_xml.h"
|
#include "graph/node_xml.h"
|
||||||
|
|
||||||
#include "scene/background.h"
|
#include "render/background.h"
|
||||||
#include "scene/camera.h"
|
#include "render/camera.h"
|
||||||
#include "scene/film.h"
|
#include "render/film.h"
|
||||||
#include "scene/integrator.h"
|
#include "render/graph.h"
|
||||||
#include "scene/light.h"
|
#include "render/integrator.h"
|
||||||
#include "scene/mesh.h"
|
#include "render/light.h"
|
||||||
#include "scene/object.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/osl.h"
|
#include "render/nodes.h"
|
||||||
#include "scene/scene.h"
|
#include "render/object.h"
|
||||||
#include "scene/shader.h"
|
#include "render/osl.h"
|
||||||
#include "scene/shader_graph.h"
|
#include "render/scene.h"
|
||||||
#include "scene/shader_nodes.h"
|
#include "render/shader.h"
|
||||||
|
|
||||||
#include "subd/patch.h"
|
#include "subd/subd_patch.h"
|
||||||
#include "subd/split.h"
|
#include "subd/subd_split.h"
|
||||||
|
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/projection.h"
|
#include "util/util_projection.h"
|
||||||
#include "util/transform.h"
|
#include "util/util_transform.h"
|
||||||
#include "util/xml.h"
|
#include "util/util_xml.h"
|
||||||
|
|
||||||
#include "app/cycles_xml.h"
|
#include "app/cycles_xml.h"
|
||||||
|
|
||||||
|
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "session/output_driver.h"
|
#include "render/output_driver.h"
|
||||||
|
|
||||||
#include "util/function.h"
|
#include "util/util_function.h"
|
||||||
#include "util/image.h"
|
#include "util/util_image.h"
|
||||||
#include "util/string.h"
|
#include "util/util_string.h"
|
||||||
#include "util/unique_ptr.h"
|
#include "util/util_unique_ptr.h"
|
||||||
#include "util/vector.h"
|
#include "util/util_vector.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
@@ -29,40 +29,39 @@ set(INC_SYS
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(SRC
|
set(SRC
|
||||||
camera.cpp
|
blender_camera.cpp
|
||||||
device.cpp
|
blender_device.cpp
|
||||||
display_driver.cpp
|
blender_display_driver.cpp
|
||||||
image.cpp
|
blender_image.cpp
|
||||||
geometry.cpp
|
blender_geometry.cpp
|
||||||
light.cpp
|
blender_light.cpp
|
||||||
mesh.cpp
|
blender_mesh.cpp
|
||||||
object.cpp
|
blender_object.cpp
|
||||||
object_cull.cpp
|
blender_object_cull.cpp
|
||||||
output_driver.cpp
|
blender_output_driver.cpp
|
||||||
particles.cpp
|
blender_particles.cpp
|
||||||
pointcloud.cpp
|
blender_curves.cpp
|
||||||
curves.cpp
|
blender_logging.cpp
|
||||||
logging.cpp
|
blender_python.cpp
|
||||||
python.cpp
|
blender_session.cpp
|
||||||
session.cpp
|
blender_shader.cpp
|
||||||
shader.cpp
|
blender_sync.cpp
|
||||||
sync.cpp
|
blender_texture.cpp
|
||||||
texture.cpp
|
blender_viewport.cpp
|
||||||
viewport.cpp
|
blender_volume.cpp
|
||||||
volume.cpp
|
|
||||||
|
|
||||||
CCL_api.h
|
CCL_api.h
|
||||||
device.h
|
blender_device.h
|
||||||
display_driver.h
|
blender_display_driver.h
|
||||||
id_map.h
|
blender_id_map.h
|
||||||
image.h
|
blender_image.h
|
||||||
object_cull.h
|
blender_object_cull.h
|
||||||
output_driver.h
|
blender_output_driver.h
|
||||||
sync.h
|
blender_sync.h
|
||||||
session.h
|
blender_session.h
|
||||||
texture.h
|
blender_texture.h
|
||||||
util.h
|
blender_util.h
|
||||||
viewport.h
|
blender_viewport.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(LIB
|
set(LIB
|
||||||
@@ -70,8 +69,7 @@ set(LIB
|
|||||||
cycles_device
|
cycles_device
|
||||||
cycles_graph
|
cycles_graph
|
||||||
cycles_kernel
|
cycles_kernel
|
||||||
cycles_scene
|
cycles_render
|
||||||
cycles_session
|
|
||||||
cycles_subd
|
cycles_subd
|
||||||
cycles_util
|
cycles_util
|
||||||
|
|
||||||
@@ -88,7 +86,6 @@ endif()
|
|||||||
|
|
||||||
set(ADDON_FILES
|
set(ADDON_FILES
|
||||||
addon/__init__.py
|
addon/__init__.py
|
||||||
addon/camera.py
|
|
||||||
addon/engine.py
|
addon/engine.py
|
||||||
addon/operators.py
|
addon/operators.py
|
||||||
addon/osl.py
|
addon/osl.py
|
||||||
@@ -103,11 +100,6 @@ add_definitions(${GL_DEFINITIONS})
|
|||||||
if(WITH_CYCLES_DEVICE_HIP)
|
if(WITH_CYCLES_DEVICE_HIP)
|
||||||
add_definitions(-DWITH_HIP)
|
add_definitions(-DWITH_HIP)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_DEVICE_METAL)
|
|
||||||
add_definitions(-DWITH_METAL)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(WITH_MOD_FLUID)
|
if(WITH_MOD_FLUID)
|
||||||
add_definitions(-DWITH_FLUID)
|
add_definitions(-DWITH_FLUID)
|
||||||
endif()
|
endif()
|
||||||
@@ -145,6 +137,11 @@ endif()
|
|||||||
|
|
||||||
blender_add_lib(bf_intern_cycles "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
blender_add_lib(bf_intern_cycles "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|
||||||
|
|
||||||
|
# avoid link failure with clang 3.4 debug
|
||||||
|
if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT ${CMAKE_C_COMPILER_VERSION} VERSION_LESS '3.4')
|
||||||
|
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -gline-tables-only")
|
||||||
|
endif()
|
||||||
|
|
||||||
add_dependencies(bf_intern_cycles bf_rna)
|
add_dependencies(bf_intern_cycles bf_rna)
|
||||||
|
|
||||||
delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${ADDON_FILES}" ${CYCLES_INSTALL_PATH})
|
delayed_install(${CMAKE_CURRENT_SOURCE_DIR} "${ADDON_FILES}" ${CYCLES_INSTALL_PATH})
|
||||||
|
@@ -1,84 +0,0 @@
|
|||||||
#
|
|
||||||
# Copyright 2011-2021 Blender Foundation
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
#
|
|
||||||
|
|
||||||
# <pep8 compliant>
|
|
||||||
|
|
||||||
# Fit to match default projective camera with focal_length 50 and sensor_width 36.
|
|
||||||
default_fisheye_polynomial = [-1.1735143712967577e-05,
|
|
||||||
-0.019988736953434998,
|
|
||||||
-3.3525322965709175e-06,
|
|
||||||
3.099275275886036e-06,
|
|
||||||
-2.6064646454854524e-08]
|
|
||||||
|
|
||||||
# Utilities to generate lens polynomials to match built-in camera types, only here
|
|
||||||
# for reference at the moment, not used by the code.
|
|
||||||
def create_grid(sensor_height, sensor_width):
|
|
||||||
import numpy as np
|
|
||||||
if sensor_height is None:
|
|
||||||
sensor_height = sensor_width / (16 / 9) # Default aspect ration 16:9
|
|
||||||
uu, vv = np.meshgrid(np.linspace(0, 1, 100), np.linspace(0, 1, 100))
|
|
||||||
uu = (uu - 0.5) * sensor_width
|
|
||||||
vv = (vv - 0.5) * sensor_height
|
|
||||||
rr = np.sqrt(uu ** 2 + vv ** 2)
|
|
||||||
return rr
|
|
||||||
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_projective(focal_length=50, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
rr = create_grid(sensor_height, sensor_width)
|
|
||||||
polynomial = np.polyfit(rr.flat, (-np.arctan(rr / focal_length)).flat, 4)
|
|
||||||
return list(reversed(polynomial))
|
|
||||||
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_projective_fov(fov, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
f = sensor_width / 2 / np.tan(fov / 2)
|
|
||||||
return fisheye_lens_polynomial_from_projective(f, sensor_width, sensor_height)
|
|
||||||
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_equisolid(lens=10.5, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
rr = create_grid(sensor_height, sensor_width)
|
|
||||||
x = rr.reshape(-1)
|
|
||||||
x = np.stack([x**i for i in [1, 2, 3, 4]])
|
|
||||||
y = (-2 * np.arcsin(rr / (2 * lens))).reshape(-1)
|
|
||||||
polynomial = np.linalg.lstsq(x.T, y.T, rcond=None)[0]
|
|
||||||
return [0] + list(polynomial)
|
|
||||||
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_equidistant(fov=180, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
return [0, -np.radians(fov) / sensor_width, 0, 0, 0]
|
|
||||||
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_distorted_projective_polynomial(k1, k2, k3, focal_length=50, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
rr = create_grid(sensor_height, sensor_width)
|
|
||||||
r2 = (rr / focal_length) ** 2
|
|
||||||
r4 = r2 * r2
|
|
||||||
r6 = r4 * r2
|
|
||||||
r_coeff = 1 + k1 * r2 + k2 * r4 + k3 * r6
|
|
||||||
polynomial = np.polyfit(rr.flat, (-np.arctan(rr / focal_length * r_coeff)).flat, 4)
|
|
||||||
return list(reversed(polynomial))
|
|
||||||
|
|
||||||
def fisheye_lens_polynomial_from_distorted_projective_divisions(k1, k2, focal_length=50, sensor_width=36, sensor_height=None):
|
|
||||||
import numpy as np
|
|
||||||
rr = create_grid(sensor_height, sensor_width)
|
|
||||||
r2 = (rr / focal_length) ** 2
|
|
||||||
r4 = r2 * r2
|
|
||||||
r_coeff = 1 + k1 * r2 + k2 * r4
|
|
||||||
polynomial = np.polyfit(rr.flat, (-np.arctan(rr / focal_length / r_coeff)).flat, 4)
|
|
||||||
return list(reversed(polynomial))
|
|
@@ -28,7 +28,7 @@ def _configure_argument_parser():
|
|||||||
action='store_true')
|
action='store_true')
|
||||||
parser.add_argument("--cycles-device",
|
parser.add_argument("--cycles-device",
|
||||||
help="Set the device to use for Cycles, overriding user preferences and the scene setting."
|
help="Set the device to use for Cycles, overriding user preferences and the scene setting."
|
||||||
"Valid options are 'CPU', 'CUDA', 'OPTIX', 'HIP' or 'METAL'."
|
"Valid options are 'CPU', 'CUDA', 'OPTIX', or 'HIP'"
|
||||||
"Additionally, you can append '+CPU' to any GPU type for hybrid rendering.",
|
"Additionally, you can append '+CPU' to any GPU type for hybrid rendering.",
|
||||||
default=None)
|
default=None)
|
||||||
return parser
|
return parser
|
||||||
@@ -233,7 +233,6 @@ def list_render_passes(scene, srl):
|
|||||||
if crl.denoising_store_passes:
|
if crl.denoising_store_passes:
|
||||||
yield ("Denoising Normal", "XYZ", 'VECTOR')
|
yield ("Denoising Normal", "XYZ", 'VECTOR')
|
||||||
yield ("Denoising Albedo", "RGB", 'COLOR')
|
yield ("Denoising Albedo", "RGB", 'COLOR')
|
||||||
yield ("Denoising Depth", "Z", 'VALUE')
|
|
||||||
|
|
||||||
# Custom AOV passes.
|
# Custom AOV passes.
|
||||||
for aov in srl.aovs:
|
for aov in srl.aovs:
|
||||||
|
@@ -40,10 +40,10 @@ class AddPresetIntegrator(AddPresetBase, Operator):
|
|||||||
"cycles.transparent_max_bounces",
|
"cycles.transparent_max_bounces",
|
||||||
"cycles.caustics_reflective",
|
"cycles.caustics_reflective",
|
||||||
"cycles.caustics_refractive",
|
"cycles.caustics_refractive",
|
||||||
"cycles.blur_glossy",
|
"cycles.blur_glossy"
|
||||||
"cycles.use_fast_gi",
|
"cycles.use_fast_gi"
|
||||||
"cycles.ao_bounces",
|
"cycles.ao_bounces"
|
||||||
"cycles.ao_bounces_render",
|
"cycles.ao_bounces_render"
|
||||||
]
|
]
|
||||||
|
|
||||||
preset_subdir = "cycles/integrator"
|
preset_subdir = "cycles/integrator"
|
||||||
|
@@ -33,7 +33,6 @@ from math import pi
|
|||||||
# enums
|
# enums
|
||||||
|
|
||||||
from . import engine
|
from . import engine
|
||||||
from . import camera
|
|
||||||
|
|
||||||
enum_devices = (
|
enum_devices = (
|
||||||
('CPU', "CPU", "Use CPU for rendering"),
|
('CPU', "CPU", "Use CPU for rendering"),
|
||||||
@@ -73,8 +72,6 @@ enum_panorama_types = (
|
|||||||
('FISHEYE_EQUISOLID', "Fisheye Equisolid",
|
('FISHEYE_EQUISOLID', "Fisheye Equisolid",
|
||||||
"Similar to most fisheye modern lens, takes sensor dimensions into consideration"),
|
"Similar to most fisheye modern lens, takes sensor dimensions into consideration"),
|
||||||
('MIRRORBALL', "Mirror Ball", "Uses the mirror ball mapping"),
|
('MIRRORBALL', "Mirror Ball", "Uses the mirror ball mapping"),
|
||||||
('FISHEYE_LENS_POLYNOMIAL', "Fisheye Lens Polynomial",
|
|
||||||
"Defines the lens projection as polynomial to allow real world camera lenses to be mimicked."),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
enum_curve_shape = (
|
enum_curve_shape = (
|
||||||
@@ -89,8 +86,8 @@ enum_use_layer_samples = (
|
|||||||
)
|
)
|
||||||
|
|
||||||
enum_sampling_pattern = (
|
enum_sampling_pattern = (
|
||||||
('SOBOL', "Sobol", "Use Sobol random sampling pattern", 0),
|
('SOBOL', "Sobol", "Use Sobol random sampling pattern"),
|
||||||
('PROGRESSIVE_MULTI_JITTER', "Progressive Multi-Jitter", "Use Progressive Multi-Jitter random sampling pattern", 1),
|
('PROGRESSIVE_MUTI_JITTER', "Progressive Multi-Jitter", "Use Progressive Multi-Jitter random sampling pattern"),
|
||||||
)
|
)
|
||||||
|
|
||||||
enum_volume_sampling = (
|
enum_volume_sampling = (
|
||||||
@@ -114,8 +111,7 @@ enum_device_type = (
|
|||||||
('CPU', "CPU", "CPU", 0),
|
('CPU', "CPU", "CPU", 0),
|
||||||
('CUDA', "CUDA", "CUDA", 1),
|
('CUDA', "CUDA", "CUDA", 1),
|
||||||
('OPTIX', "OptiX", "OptiX", 3),
|
('OPTIX', "OptiX", "OptiX", 3),
|
||||||
('HIP', "HIP", "HIP", 4),
|
("HIP", "HIP", "HIP", 4)
|
||||||
('METAL', "Metal", "Metal", 5)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
enum_texture_limit = (
|
enum_texture_limit = (
|
||||||
@@ -129,11 +125,6 @@ enum_texture_limit = (
|
|||||||
('8192', "8192", "Limit texture size to 8192 pixels", 7),
|
('8192', "8192", "Limit texture size to 8192 pixels", 7),
|
||||||
)
|
)
|
||||||
|
|
||||||
enum_fast_gi_method = (
|
|
||||||
('REPLACE', "Replace", "Replace global illumination with ambient occlusion after a specified number of bounces"),
|
|
||||||
('ADD', "Add", "Add ambient occlusion to diffuse surfaces"),
|
|
||||||
)
|
|
||||||
|
|
||||||
# NOTE: Identifiers are expected to be an upper case version of identifiers from `Pass::get_type_enum()`
|
# NOTE: Identifiers are expected to be an upper case version of identifiers from `Pass::get_type_enum()`
|
||||||
enum_view3d_shading_render_pass = (
|
enum_view3d_shading_render_pass = (
|
||||||
('', "General", ""),
|
('', "General", ""),
|
||||||
@@ -222,12 +213,6 @@ enum_denoising_prefilter = (
|
|||||||
('ACCURATE', "Accurate", "Prefilter noisy guiding passes before denoising color. Improves quality when guiding passes are noisy using extra processing time", 3),
|
('ACCURATE', "Accurate", "Prefilter noisy guiding passes before denoising color. Improves quality when guiding passes are noisy using extra processing time", 3),
|
||||||
)
|
)
|
||||||
|
|
||||||
enum_direct_light_sampling_type = (
|
|
||||||
('MULTIPLE_IMPORTANCE_SAMPLING', "Multiple Importance Sampling", "Multiple importance sampling is used to combine direct light contributions from next-event estimation and forward path tracing", 0),
|
|
||||||
('FORWARD_PATH_TRACING', "Forward Path Tracing", "Direct light contributions are only sampled using forward path tracing", 1),
|
|
||||||
('NEXT_EVENT_ESTIMATION', "Next-Event Estimation", "Direct light contributions are only sampled using next-event estimation", 2),
|
|
||||||
)
|
|
||||||
|
|
||||||
def update_render_passes(self, context):
|
def update_render_passes(self, context):
|
||||||
scene = context.scene
|
scene = context.scene
|
||||||
view_layer = context.view_layer
|
view_layer = context.view_layer
|
||||||
@@ -335,13 +320,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
default=1024,
|
default=1024,
|
||||||
)
|
)
|
||||||
|
|
||||||
sample_offset: IntProperty(
|
|
||||||
name="Sample Offset",
|
|
||||||
description="Number of samples to skip when starting render",
|
|
||||||
min=0, max=(1 << 24),
|
|
||||||
default=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
time_limit: FloatProperty(
|
time_limit: FloatProperty(
|
||||||
name="Time Limit",
|
name="Time Limit",
|
||||||
description="Limit the render time (excluding synchronization time)."
|
description="Limit the render time (excluding synchronization time)."
|
||||||
@@ -354,27 +332,9 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
sampling_pattern: EnumProperty(
|
sampling_pattern: EnumProperty(
|
||||||
name="Sampling Pattern",
|
name="Sampling Pattern",
|
||||||
description="Random sampling pattern used by the integrator. When adaptive sampling is enabled, Progressive Multi-Jitter is always used instead of Sobol",
|
description="Random sampling pattern used by the integrator",
|
||||||
items=enum_sampling_pattern,
|
items=enum_sampling_pattern,
|
||||||
default='PROGRESSIVE_MULTI_JITTER',
|
default='PROGRESSIVE_MUTI_JITTER',
|
||||||
)
|
|
||||||
|
|
||||||
scrambling_distance: FloatProperty(
|
|
||||||
name="Scrambling Distance",
|
|
||||||
default=1.0,
|
|
||||||
min=0.0, max=1.0,
|
|
||||||
description="Reduce randomization between pixels to improve GPU rendering performance, at the cost of possible rendering artifacts if set too low. Only works when not using adaptive sampling",
|
|
||||||
)
|
|
||||||
preview_scrambling_distance: BoolProperty(
|
|
||||||
name="Scrambling Distance viewport",
|
|
||||||
default=False,
|
|
||||||
description="Uses the Scrambling Distance value for the viewport. Faster but may flicker",
|
|
||||||
)
|
|
||||||
|
|
||||||
auto_scrambling_distance: BoolProperty(
|
|
||||||
name="Automatic Scrambling Distance",
|
|
||||||
default=False,
|
|
||||||
description="Automatically reduce the randomization between pixels to improve GPU rendering performance, at the cost of possible rendering artifacts. Only works when not using adaptive sampling",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
use_layer_samples: EnumProperty(
|
use_layer_samples: EnumProperty(
|
||||||
@@ -432,13 +392,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
default=0,
|
default=0,
|
||||||
)
|
)
|
||||||
|
|
||||||
direct_light_sampling_type: EnumProperty(
|
|
||||||
name="Direct Light Sampling",
|
|
||||||
description="The type of strategy used for sampling direct light contributions",
|
|
||||||
items=enum_direct_light_sampling_type,
|
|
||||||
default='MULTIPLE_IMPORTANCE_SAMPLING',
|
|
||||||
)
|
|
||||||
|
|
||||||
min_light_bounces: IntProperty(
|
min_light_bounces: IntProperty(
|
||||||
name="Min Light Bounces",
|
name="Min Light Bounces",
|
||||||
description="Minimum number of light bounces. Setting this higher reduces noise in the first bounces, "
|
description="Minimum number of light bounces. Setting this higher reduces noise in the first bounces, "
|
||||||
@@ -771,14 +724,6 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
description="Approximate diffuse indirect light with background tinted ambient occlusion. This provides fast alternative to full global illumination, for interactive viewport rendering or final renders with reduced quality",
|
description="Approximate diffuse indirect light with background tinted ambient occlusion. This provides fast alternative to full global illumination, for interactive viewport rendering or final renders with reduced quality",
|
||||||
default=False,
|
default=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
fast_gi_method: EnumProperty(
|
|
||||||
name="Fast GI Method",
|
|
||||||
default='REPLACE',
|
|
||||||
description="Fast GI approximation method",
|
|
||||||
items=enum_fast_gi_method
|
|
||||||
)
|
|
||||||
|
|
||||||
ao_bounces: IntProperty(
|
ao_bounces: IntProperty(
|
||||||
name="AO Bounces",
|
name="AO Bounces",
|
||||||
default=1,
|
default=1,
|
||||||
@@ -794,8 +739,8 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
)
|
)
|
||||||
|
|
||||||
use_auto_tile: BoolProperty(
|
use_auto_tile: BoolProperty(
|
||||||
name="Use Tiling",
|
name="Auto Tiles",
|
||||||
description="Render high resolution images in tiles to reduce memory usage, using the specified tile size. Tiles are cached to disk while rendering to save memory",
|
description="Automatically render high resolution images in tiles to reduce memory usage, using the specified tile size. Tiles are cached to disk while rendering to save memory",
|
||||||
default=True,
|
default=True,
|
||||||
)
|
)
|
||||||
tile_size: IntProperty(
|
tile_size: IntProperty(
|
||||||
@@ -894,32 +839,6 @@ class CyclesCameraSettings(bpy.types.PropertyGroup):
|
|||||||
default=pi,
|
default=pi,
|
||||||
)
|
)
|
||||||
|
|
||||||
fisheye_polynomial_k0: FloatProperty(
|
|
||||||
name="Fisheye Polynomial K0",
|
|
||||||
description="Coefficient K0 of the lens polinomial",
|
|
||||||
default=camera.default_fisheye_polynomial[0], precision=6, step=0.1, subtype='ANGLE',
|
|
||||||
)
|
|
||||||
fisheye_polynomial_k1: FloatProperty(
|
|
||||||
name="Fisheye Polynomial K1",
|
|
||||||
description="Coefficient K1 of the lens polinomial",
|
|
||||||
default=camera.default_fisheye_polynomial[1], precision=6, step=0.1, subtype='ANGLE',
|
|
||||||
)
|
|
||||||
fisheye_polynomial_k2: FloatProperty(
|
|
||||||
name="Fisheye Polynomial K2",
|
|
||||||
description="Coefficient K2 of the lens polinomial",
|
|
||||||
default=camera.default_fisheye_polynomial[2], precision=6, step=0.1, subtype='ANGLE',
|
|
||||||
)
|
|
||||||
fisheye_polynomial_k3: FloatProperty(
|
|
||||||
name="Fisheye Polynomial K3",
|
|
||||||
description="Coefficient K3 of the lens polinomial",
|
|
||||||
default=camera.default_fisheye_polynomial[3], precision=6, step=0.1, subtype='ANGLE',
|
|
||||||
)
|
|
||||||
fisheye_polynomial_k4: FloatProperty(
|
|
||||||
name="Fisheye Polynomial K4",
|
|
||||||
description="Coefficient K4 of the lens polinomial",
|
|
||||||
default=camera.default_fisheye_polynomial[4], precision=6, step=0.1, subtype='ANGLE',
|
|
||||||
)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def register(cls):
|
def register(cls):
|
||||||
bpy.types.Camera.cycles = PointerProperty(
|
bpy.types.Camera.cycles = PointerProperty(
|
||||||
@@ -1342,7 +1261,8 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
|
|
||||||
def get_device_types(self, context):
|
def get_device_types(self, context):
|
||||||
import _cycles
|
import _cycles
|
||||||
has_cuda, has_optix, has_hip, has_metal = _cycles.get_device_types()
|
has_cuda, has_optix, has_hip = _cycles.get_device_types()
|
||||||
|
|
||||||
list = [('NONE', "None", "Don't use compute device", 0)]
|
list = [('NONE', "None", "Don't use compute device", 0)]
|
||||||
if has_cuda:
|
if has_cuda:
|
||||||
list.append(('CUDA', "CUDA", "Use CUDA for GPU acceleration", 1))
|
list.append(('CUDA', "CUDA", "Use CUDA for GPU acceleration", 1))
|
||||||
@@ -1350,8 +1270,6 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
list.append(('OPTIX', "OptiX", "Use OptiX for GPU acceleration", 3))
|
list.append(('OPTIX', "OptiX", "Use OptiX for GPU acceleration", 3))
|
||||||
if has_hip:
|
if has_hip:
|
||||||
list.append(('HIP', "HIP", "Use HIP for GPU acceleration", 4))
|
list.append(('HIP', "HIP", "Use HIP for GPU acceleration", 4))
|
||||||
if has_metal:
|
|
||||||
list.append(('METAL', "Metal", "Use Metal for GPU acceleration", 5))
|
|
||||||
|
|
||||||
return list
|
return list
|
||||||
|
|
||||||
@@ -1377,7 +1295,7 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
|
|
||||||
def update_device_entries(self, device_list):
|
def update_device_entries(self, device_list):
|
||||||
for device in device_list:
|
for device in device_list:
|
||||||
if not device[1] in {'CUDA', 'OPTIX', 'CPU', 'HIP', 'METAL'}:
|
if not device[1] in {'CUDA', 'OPTIX', 'CPU', 'HIP'}:
|
||||||
continue
|
continue
|
||||||
# Try to find existing Device entry
|
# Try to find existing Device entry
|
||||||
entry = self.find_existing_device_entry(device)
|
entry = self.find_existing_device_entry(device)
|
||||||
@@ -1411,7 +1329,7 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
elif entry.type == 'CPU':
|
elif entry.type == 'CPU':
|
||||||
cpu_devices.append(entry)
|
cpu_devices.append(entry)
|
||||||
# Extend all GPU devices with CPU.
|
# Extend all GPU devices with CPU.
|
||||||
if len(devices) and compute_device_type != 'CPU':
|
if compute_device_type != 'CPU' and compute_device_type != 'HIP':
|
||||||
devices.extend(cpu_devices)
|
devices.extend(cpu_devices)
|
||||||
return devices
|
return devices
|
||||||
|
|
||||||
@@ -1421,7 +1339,7 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
import _cycles
|
import _cycles
|
||||||
# Ensure `self.devices` is not re-allocated when the second call to
|
# Ensure `self.devices` is not re-allocated when the second call to
|
||||||
# get_devices_for_type is made, freeing items from the first list.
|
# get_devices_for_type is made, freeing items from the first list.
|
||||||
for device_type in ('CUDA', 'OPTIX', 'HIP', 'METAL'):
|
for device_type in ('CUDA', 'OPTIX', 'HIP'):
|
||||||
self.update_device_entries(_cycles.available_devices(device_type))
|
self.update_device_entries(_cycles.available_devices(device_type))
|
||||||
|
|
||||||
# Deprecated: use refresh_devices instead.
|
# Deprecated: use refresh_devices instead.
|
||||||
@@ -1429,18 +1347,12 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
self.refresh_devices()
|
self.refresh_devices()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_compute_device_type(self):
|
|
||||||
if self.compute_device_type == '':
|
|
||||||
return 'NONE'
|
|
||||||
return self.compute_device_type
|
|
||||||
|
|
||||||
def get_num_gpu_devices(self):
|
def get_num_gpu_devices(self):
|
||||||
import _cycles
|
import _cycles
|
||||||
compute_device_type = self.get_compute_device_type()
|
device_list = _cycles.available_devices(self.compute_device_type)
|
||||||
device_list = _cycles.available_devices(compute_device_type)
|
|
||||||
num = 0
|
num = 0
|
||||||
for device in device_list:
|
for device in device_list:
|
||||||
if device[1] != compute_device_type:
|
if device[1] != self.compute_device_type:
|
||||||
continue
|
continue
|
||||||
for dev in self.devices:
|
for dev in self.devices:
|
||||||
if dev.use and dev.id == device[2]:
|
if dev.use and dev.id == device[2]:
|
||||||
@@ -1461,20 +1373,8 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
|
|
||||||
if not found_device:
|
if not found_device:
|
||||||
col = box.column(align=True)
|
col = box.column(align=True)
|
||||||
col.label(text="No compatible GPUs found for Cycles", icon='INFO')
|
col.label(text="No compatible GPUs found for path tracing", icon='INFO')
|
||||||
|
col.label(text="Cycles will render on the CPU", icon='BLANK1')
|
||||||
if device_type == 'CUDA':
|
|
||||||
col.label(text="Requires NVIDIA GPU with compute capability 3.0", icon='BLANK1')
|
|
||||||
elif device_type == 'OPTIX':
|
|
||||||
col.label(text="Requires NVIDIA GPU with compute capability 5.0", icon='BLANK1')
|
|
||||||
col.label(text="and NVIDIA driver version 470 or newer", icon='BLANK1')
|
|
||||||
elif device_type == 'HIP':
|
|
||||||
import sys
|
|
||||||
col.label(text="Requires discrete AMD GPU with RDNA architecture", icon='BLANK1')
|
|
||||||
if sys.platform[:3] == "win":
|
|
||||||
col.label(text="and AMD Radeon Pro 21.Q4 driver or newer", icon='BLANK1')
|
|
||||||
elif device_type == 'METAL':
|
|
||||||
col.label(text="Requires Apple Silicon and macOS 12.0 or newer", icon='BLANK1')
|
|
||||||
return
|
return
|
||||||
|
|
||||||
for device in devices:
|
for device in devices:
|
||||||
@@ -1484,16 +1384,15 @@ class CyclesPreferences(bpy.types.AddonPreferences):
|
|||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, "compute_device_type", expand=True)
|
row.prop(self, "compute_device_type", expand=True)
|
||||||
|
|
||||||
compute_device_type = self.get_compute_device_type()
|
if self.compute_device_type == 'NONE':
|
||||||
if compute_device_type == 'NONE':
|
|
||||||
return
|
return
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
devices = self.get_devices_for_type(compute_device_type)
|
devices = self.get_devices_for_type(self.compute_device_type)
|
||||||
self._draw_devices(row, compute_device_type, devices)
|
self._draw_devices(row, self.compute_device_type, devices)
|
||||||
|
|
||||||
import _cycles
|
import _cycles
|
||||||
has_peer_memory = 0
|
has_peer_memory = 0
|
||||||
for device in _cycles.available_devices(compute_device_type):
|
for device in _cycles.available_devices(self.compute_device_type):
|
||||||
if device[3] and self.find_existing_device_entry(device).use:
|
if device[3] and self.find_existing_device_entry(device).use:
|
||||||
has_peer_memory += 1
|
has_peer_memory += 1
|
||||||
if has_peer_memory > 1:
|
if has_peer_memory > 1:
|
||||||
|
@@ -26,31 +26,27 @@ from bpy.types import Panel
|
|||||||
from bl_ui.properties_grease_pencil_common import GreasePencilSimplifyPanel
|
from bl_ui.properties_grease_pencil_common import GreasePencilSimplifyPanel
|
||||||
from bl_ui.properties_view_layer import ViewLayerCryptomattePanel, ViewLayerAOVPanel
|
from bl_ui.properties_view_layer import ViewLayerCryptomattePanel, ViewLayerAOVPanel
|
||||||
|
|
||||||
class CyclesPresetPanel(PresetPanel, Panel):
|
|
||||||
COMPAT_ENGINES = {'CYCLES'}
|
|
||||||
preset_operator = "script.execute_preset"
|
|
||||||
|
|
||||||
@staticmethod
|
class CYCLES_PT_sampling_presets(PresetPanel, Panel):
|
||||||
def post_cb(context):
|
|
||||||
# Modify an arbitrary built-in scene property to force a depsgraph
|
|
||||||
# update, because add-on properties don't. (see T62325)
|
|
||||||
render = context.scene.render
|
|
||||||
render.filter_size = render.filter_size
|
|
||||||
|
|
||||||
class CYCLES_PT_sampling_presets(CyclesPresetPanel):
|
|
||||||
bl_label = "Sampling Presets"
|
bl_label = "Sampling Presets"
|
||||||
preset_subdir = "cycles/sampling"
|
preset_subdir = "cycles/sampling"
|
||||||
|
preset_operator = "script.execute_preset"
|
||||||
preset_add_operator = "render.cycles_sampling_preset_add"
|
preset_add_operator = "render.cycles_sampling_preset_add"
|
||||||
|
COMPAT_ENGINES = {'CYCLES'}
|
||||||
|
|
||||||
class CYCLES_PT_viewport_sampling_presets(CyclesPresetPanel):
|
class CYCLES_PT_viewport_sampling_presets(PresetPanel, Panel):
|
||||||
bl_label = "Viewport Sampling Presets"
|
bl_label = "Viewport Sampling Presets"
|
||||||
preset_subdir = "cycles/viewport_sampling"
|
preset_subdir = "cycles/viewport_sampling"
|
||||||
|
preset_operator = "script.execute_preset"
|
||||||
preset_add_operator = "render.cycles_viewport_sampling_preset_add"
|
preset_add_operator = "render.cycles_viewport_sampling_preset_add"
|
||||||
|
COMPAT_ENGINES = {'CYCLES'}
|
||||||
|
|
||||||
class CYCLES_PT_integrator_presets(CyclesPresetPanel):
|
class CYCLES_PT_integrator_presets(PresetPanel, Panel):
|
||||||
bl_label = "Integrator Presets"
|
bl_label = "Integrator Presets"
|
||||||
preset_subdir = "cycles/integrator"
|
preset_subdir = "cycles/integrator"
|
||||||
|
preset_operator = "script.execute_preset"
|
||||||
preset_add_operator = "render.cycles_integrator_preset_add"
|
preset_add_operator = "render.cycles_integrator_preset_add"
|
||||||
|
COMPAT_ENGINES = {'CYCLES'}
|
||||||
|
|
||||||
|
|
||||||
class CyclesButtonsPanel:
|
class CyclesButtonsPanel:
|
||||||
@@ -97,11 +93,6 @@ def use_cpu(context):
|
|||||||
return (get_device_type(context) == 'NONE' or cscene.device == 'CPU')
|
return (get_device_type(context) == 'NONE' or cscene.device == 'CPU')
|
||||||
|
|
||||||
|
|
||||||
def use_metal(context):
|
|
||||||
cscene = context.scene.cycles
|
|
||||||
|
|
||||||
return (get_device_type(context) == 'METAL' and cscene.device == 'GPU')
|
|
||||||
|
|
||||||
def use_cuda(context):
|
def use_cuda(context):
|
||||||
cscene = context.scene.cycles
|
cscene = context.scene.cycles
|
||||||
|
|
||||||
@@ -292,22 +283,9 @@ class CYCLES_RENDER_PT_sampling_advanced(CyclesButtonsPanel, Panel):
|
|||||||
row.prop(cscene, "use_animated_seed", text="", icon='TIME')
|
row.prop(cscene, "use_animated_seed", text="", icon='TIME')
|
||||||
|
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.active = not (cscene.use_adaptive_sampling and cscene.use_preview_adaptive_sampling)
|
col.active = not(cscene.use_adaptive_sampling)
|
||||||
col.prop(cscene, "sampling_pattern", text="Pattern")
|
col.prop(cscene, "sampling_pattern", text="Pattern")
|
||||||
|
|
||||||
col = layout.column(align=True)
|
|
||||||
col.prop(cscene, "sample_offset")
|
|
||||||
|
|
||||||
layout.separator()
|
|
||||||
|
|
||||||
heading = layout.column(align=True, heading="Scrambling Distance")
|
|
||||||
heading.active = not (cscene.use_adaptive_sampling and cscene.use_preview_adaptive_sampling)
|
|
||||||
heading.prop(cscene, "auto_scrambling_distance", text="Automatic")
|
|
||||||
sub = heading.row()
|
|
||||||
sub.active = not cscene.use_preview_adaptive_sampling
|
|
||||||
sub.prop(cscene, "preview_scrambling_distance", text="Viewport")
|
|
||||||
heading.prop(cscene, "scrambling_distance", text="Multiplier")
|
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
|
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
@@ -483,7 +461,8 @@ class CYCLES_RENDER_PT_light_paths_fast_gi(CyclesButtonsPanel, Panel):
|
|||||||
layout.active = cscene.use_fast_gi
|
layout.active = cscene.use_fast_gi
|
||||||
|
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.prop(cscene, "fast_gi_method", text="Method")
|
col.prop(cscene, "ao_bounces", text="Viewport Bounces")
|
||||||
|
col.prop(cscene, "ao_bounces_render", text="Render Bounces")
|
||||||
|
|
||||||
if world:
|
if world:
|
||||||
light = world.light_settings
|
light = world.light_settings
|
||||||
@@ -491,11 +470,6 @@ class CYCLES_RENDER_PT_light_paths_fast_gi(CyclesButtonsPanel, Panel):
|
|||||||
col.prop(light, "ao_factor", text="AO Factor")
|
col.prop(light, "ao_factor", text="AO Factor")
|
||||||
col.prop(light, "distance", text="AO Distance")
|
col.prop(light, "distance", text="AO Distance")
|
||||||
|
|
||||||
if cscene.fast_gi_method == 'REPLACE':
|
|
||||||
col = layout.column(align=True)
|
|
||||||
col.prop(cscene, "ao_bounces", text="Viewport Bounces")
|
|
||||||
col.prop(cscene, "ao_bounces_render", text="Render Bounces")
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_motion_blur(CyclesButtonsPanel, Panel):
|
class CYCLES_RENDER_PT_motion_blur(CyclesButtonsPanel, Panel):
|
||||||
bl_label = "Motion Blur"
|
bl_label = "Motion Blur"
|
||||||
@@ -1007,8 +981,8 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
||||||
|
|
||||||
elif mat:
|
elif mat:
|
||||||
layout.template_ID(space, "pin_id")
|
split.template_ID(space, "pin_id")
|
||||||
layout.separator()
|
split.separator()
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_motion_blur(CyclesButtonsPanel, Panel):
|
class CYCLES_OBJECT_PT_motion_blur(CyclesButtonsPanel, Panel):
|
||||||
@@ -1020,7 +994,7 @@ class CYCLES_OBJECT_PT_motion_blur(CyclesButtonsPanel, Panel):
|
|||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
ob = context.object
|
ob = context.object
|
||||||
if CyclesButtonsPanel.poll(context) and ob:
|
if CyclesButtonsPanel.poll(context) and ob:
|
||||||
if ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META', 'CAMERA', 'HAIR', 'POINTCLOUD'}:
|
if ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META', 'CAMERA'}:
|
||||||
return True
|
return True
|
||||||
if ob.instance_type == 'COLLECTION' and ob.instance_collection:
|
if ob.instance_type == 'COLLECTION' and ob.instance_collection:
|
||||||
return True
|
return True
|
||||||
@@ -1059,7 +1033,7 @@ class CYCLES_OBJECT_PT_motion_blur(CyclesButtonsPanel, Panel):
|
|||||||
|
|
||||||
|
|
||||||
def has_geometry_visibility(ob):
|
def has_geometry_visibility(ob):
|
||||||
return ob and ((ob.type in {'MESH', 'CURVE', 'SURFACE', 'FONT', 'META', 'LIGHT', 'VOLUME', 'POINTCLOUD', 'HAIR'}) or
|
return ob and ((ob.type in {'MESH', 'CURVE', 'SURFACE', 'FONT', 'META', 'LIGHT'}) or
|
||||||
(ob.instance_type == 'COLLECTION' and ob.instance_collection))
|
(ob.instance_type == 'COLLECTION' and ob.instance_collection))
|
||||||
|
|
||||||
|
|
||||||
@@ -1824,38 +1798,37 @@ class CYCLES_RENDER_PT_debug(CyclesDebugButtonsPanel, Panel):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.use_property_split = True
|
|
||||||
layout.use_property_decorate = False # No animation.
|
|
||||||
|
|
||||||
scene = context.scene
|
scene = context.scene
|
||||||
cscene = scene.cycles
|
cscene = scene.cycles
|
||||||
|
|
||||||
col = layout.column(heading="CPU")
|
col = layout.column()
|
||||||
|
|
||||||
|
col.label(text="CPU Flags:")
|
||||||
row = col.row(align=True)
|
row = col.row(align=True)
|
||||||
row.prop(cscene, "debug_use_cpu_sse2", toggle=True)
|
row.prop(cscene, "debug_use_cpu_sse2", toggle=True)
|
||||||
row.prop(cscene, "debug_use_cpu_sse3", toggle=True)
|
row.prop(cscene, "debug_use_cpu_sse3", toggle=True)
|
||||||
row.prop(cscene, "debug_use_cpu_sse41", toggle=True)
|
row.prop(cscene, "debug_use_cpu_sse41", toggle=True)
|
||||||
row.prop(cscene, "debug_use_cpu_avx", toggle=True)
|
row.prop(cscene, "debug_use_cpu_avx", toggle=True)
|
||||||
row.prop(cscene, "debug_use_cpu_avx2", toggle=True)
|
row.prop(cscene, "debug_use_cpu_avx2", toggle=True)
|
||||||
col.prop(cscene, "debug_bvh_layout", text="BVH")
|
col.prop(cscene, "debug_bvh_layout")
|
||||||
|
|
||||||
col.separator()
|
col.separator()
|
||||||
|
|
||||||
col = layout.column(heading="CUDA")
|
col = layout.column()
|
||||||
|
col.label(text="CUDA Flags:")
|
||||||
col.prop(cscene, "debug_use_cuda_adaptive_compile")
|
col.prop(cscene, "debug_use_cuda_adaptive_compile")
|
||||||
col = layout.column(heading="OptiX")
|
|
||||||
col.prop(cscene, "debug_use_optix_debug", text="Module Debug")
|
|
||||||
|
|
||||||
col.separator()
|
col.separator()
|
||||||
|
|
||||||
col.prop(cscene, "debug_bvh_type", text="Viewport BVH")
|
col = layout.column()
|
||||||
|
col.label(text="OptiX Flags:")
|
||||||
|
col.prop(cscene, "debug_use_optix_debug")
|
||||||
|
|
||||||
col.separator()
|
col.separator()
|
||||||
|
|
||||||
import _cycles
|
col = layout.column()
|
||||||
if _cycles.with_debug:
|
col.prop(cscene, "debug_bvh_type")
|
||||||
col.prop(cscene, "direct_light_sampling_type")
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_simplify(CyclesButtonsPanel, Panel):
|
class CYCLES_RENDER_PT_simplify(CyclesButtonsPanel, Panel):
|
||||||
|
@@ -86,7 +86,7 @@ def do_versions(self):
|
|||||||
# Device might not currently be available so this can fail
|
# Device might not currently be available so this can fail
|
||||||
try:
|
try:
|
||||||
if system.legacy_compute_device_type == 1:
|
if system.legacy_compute_device_type == 1:
|
||||||
prop.compute_device_type = 'NONE' # Was OpenCL
|
prop.compute_device_type = 'OPENCL'
|
||||||
elif system.legacy_compute_device_type == 2:
|
elif system.legacy_compute_device_type == 2:
|
||||||
prop.compute_device_type = 'CUDA'
|
prop.compute_device_type = 'CUDA'
|
||||||
else:
|
else:
|
||||||
@@ -97,12 +97,6 @@ def do_versions(self):
|
|||||||
# Init device list for UI
|
# Init device list for UI
|
||||||
prop.get_devices(prop.compute_device_type)
|
prop.get_devices(prop.compute_device_type)
|
||||||
|
|
||||||
if bpy.context.preferences.version <= (3, 0, 40):
|
|
||||||
# Disable OpenCL device
|
|
||||||
prop = bpy.context.preferences.addons[__package__].preferences
|
|
||||||
if prop.is_property_set("compute_device_type") and prop['compute_device_type'] == 4:
|
|
||||||
prop.compute_device_type = 'NONE'
|
|
||||||
|
|
||||||
# We don't modify startup file because it assumes to
|
# We don't modify startup file because it assumes to
|
||||||
# have all the default values only.
|
# have all the default values only.
|
||||||
if not bpy.data.is_saved:
|
if not bpy.data.is_saved:
|
||||||
@@ -241,9 +235,8 @@ def do_versions(self):
|
|||||||
cscene.use_denoising = False
|
cscene.use_denoising = False
|
||||||
if not cscene.is_property_set("use_preview_denoising"):
|
if not cscene.is_property_set("use_preview_denoising"):
|
||||||
cscene.use_preview_denoising = False
|
cscene.use_preview_denoising = False
|
||||||
if not cscene.is_property_set("sampling_pattern") or \
|
if not cscene.is_property_set("sampling_pattern"):
|
||||||
cscene.get('sampling_pattern') >= 2:
|
cscene.sampling_pattern = 'PROGRESSIVE_MUTI_JITTER'
|
||||||
cscene.sampling_pattern = 'PROGRESSIVE_MULTI_JITTER'
|
|
||||||
|
|
||||||
# Removal of square samples.
|
# Removal of square samples.
|
||||||
cscene = scene.cycles
|
cscene = scene.cycles
|
||||||
|
@@ -14,13 +14,13 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/camera.h"
|
#include "render/camera.h"
|
||||||
#include "scene/scene.h"
|
#include "render/scene.h"
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -69,12 +69,6 @@ struct BlenderCamera {
|
|||||||
float pole_merge_angle_from;
|
float pole_merge_angle_from;
|
||||||
float pole_merge_angle_to;
|
float pole_merge_angle_to;
|
||||||
|
|
||||||
float fisheye_polynomial_k0;
|
|
||||||
float fisheye_polynomial_k1;
|
|
||||||
float fisheye_polynomial_k2;
|
|
||||||
float fisheye_polynomial_k3;
|
|
||||||
float fisheye_polynomial_k4;
|
|
||||||
|
|
||||||
enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
|
enum { AUTO, HORIZONTAL, VERTICAL } sensor_fit;
|
||||||
float sensor_width;
|
float sensor_width;
|
||||||
float sensor_height;
|
float sensor_height;
|
||||||
@@ -86,9 +80,8 @@ struct BlenderCamera {
|
|||||||
int render_height;
|
int render_height;
|
||||||
|
|
||||||
BoundBox2D border;
|
BoundBox2D border;
|
||||||
BoundBox2D viewport_camera_border;
|
|
||||||
BoundBox2D pano_viewplane;
|
BoundBox2D pano_viewplane;
|
||||||
float pano_aspectratio;
|
BoundBox2D viewport_camera_border;
|
||||||
|
|
||||||
float passepartout_alpha;
|
float passepartout_alpha;
|
||||||
|
|
||||||
@@ -130,11 +123,10 @@ static void blender_camera_init(BlenderCamera *bcam, BL::RenderSettings &b_rende
|
|||||||
bcam->motion_position = Camera::MOTION_POSITION_CENTER;
|
bcam->motion_position = Camera::MOTION_POSITION_CENTER;
|
||||||
bcam->border.right = 1.0f;
|
bcam->border.right = 1.0f;
|
||||||
bcam->border.top = 1.0f;
|
bcam->border.top = 1.0f;
|
||||||
bcam->viewport_camera_border.right = 1.0f;
|
|
||||||
bcam->viewport_camera_border.top = 1.0f;
|
|
||||||
bcam->pano_viewplane.right = 1.0f;
|
bcam->pano_viewplane.right = 1.0f;
|
||||||
bcam->pano_viewplane.top = 1.0f;
|
bcam->pano_viewplane.top = 1.0f;
|
||||||
bcam->pano_aspectratio = 0.0f;
|
bcam->viewport_camera_border.right = 1.0f;
|
||||||
|
bcam->viewport_camera_border.top = 1.0f;
|
||||||
bcam->passepartout_alpha = 0.5f;
|
bcam->passepartout_alpha = 0.5f;
|
||||||
bcam->offscreen_dicing_scale = 1.0f;
|
bcam->offscreen_dicing_scale = 1.0f;
|
||||||
bcam->matrix = transform_identity();
|
bcam->matrix = transform_identity();
|
||||||
@@ -206,12 +198,6 @@ static void blender_camera_from_object(BlenderCamera *bcam,
|
|||||||
bcam->longitude_min = RNA_float_get(&ccamera, "longitude_min");
|
bcam->longitude_min = RNA_float_get(&ccamera, "longitude_min");
|
||||||
bcam->longitude_max = RNA_float_get(&ccamera, "longitude_max");
|
bcam->longitude_max = RNA_float_get(&ccamera, "longitude_max");
|
||||||
|
|
||||||
bcam->fisheye_polynomial_k0 = RNA_float_get(&ccamera, "fisheye_polynomial_k0");
|
|
||||||
bcam->fisheye_polynomial_k1 = RNA_float_get(&ccamera, "fisheye_polynomial_k1");
|
|
||||||
bcam->fisheye_polynomial_k2 = RNA_float_get(&ccamera, "fisheye_polynomial_k2");
|
|
||||||
bcam->fisheye_polynomial_k3 = RNA_float_get(&ccamera, "fisheye_polynomial_k3");
|
|
||||||
bcam->fisheye_polynomial_k4 = RNA_float_get(&ccamera, "fisheye_polynomial_k4");
|
|
||||||
|
|
||||||
bcam->interocular_distance = b_camera.stereo().interocular_distance();
|
bcam->interocular_distance = b_camera.stereo().interocular_distance();
|
||||||
if (b_camera.stereo().convergence_mode() == BL::CameraStereoData::convergence_mode_PARALLEL) {
|
if (b_camera.stereo().convergence_mode() == BL::CameraStereoData::convergence_mode_PARALLEL) {
|
||||||
bcam->convergence_distance = FLT_MAX;
|
bcam->convergence_distance = FLT_MAX;
|
||||||
@@ -372,21 +358,9 @@ static void blender_camera_viewplane(BlenderCamera *bcam,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bcam->type == CAMERA_PANORAMA) {
|
if (bcam->type == CAMERA_PANORAMA) {
|
||||||
/* Set viewplane for panoramic camera. */
|
/* set viewplane */
|
||||||
if (viewplane != NULL) {
|
if (viewplane != NULL) {
|
||||||
*viewplane = bcam->pano_viewplane;
|
*viewplane = bcam->pano_viewplane;
|
||||||
|
|
||||||
/* Modify viewplane for camera shift. */
|
|
||||||
const float shift_factor = (bcam->pano_aspectratio == 0.0f) ?
|
|
||||||
1.0f :
|
|
||||||
*aspectratio / bcam->pano_aspectratio;
|
|
||||||
const float dx = bcam->shift.x * shift_factor;
|
|
||||||
const float dy = bcam->shift.y * shift_factor;
|
|
||||||
|
|
||||||
viewplane->left += dx;
|
|
||||||
viewplane->right += dx;
|
|
||||||
viewplane->bottom += dy;
|
|
||||||
viewplane->top += dy;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -401,8 +375,8 @@ static void blender_camera_viewplane(BlenderCamera *bcam,
|
|||||||
*viewplane = (*viewplane) * bcam->zoom;
|
*viewplane = (*viewplane) * bcam->zoom;
|
||||||
|
|
||||||
/* modify viewplane with camera shift and 3d camera view offset */
|
/* modify viewplane with camera shift and 3d camera view offset */
|
||||||
const float dx = 2.0f * (*aspectratio * bcam->shift.x + bcam->offset.x * xaspect * 2.0f);
|
float dx = 2.0f * (*aspectratio * bcam->shift.x + bcam->offset.x * xaspect * 2.0f);
|
||||||
const float dy = 2.0f * (*aspectratio * bcam->shift.y + bcam->offset.y * yaspect * 2.0f);
|
float dy = 2.0f * (*aspectratio * bcam->shift.y + bcam->offset.y * yaspect * 2.0f);
|
||||||
|
|
||||||
viewplane->left += dx;
|
viewplane->left += dx;
|
||||||
viewplane->right += dx;
|
viewplane->right += dx;
|
||||||
@@ -434,8 +408,7 @@ static void blender_camera_sync(Camera *cam,
|
|||||||
cam->set_full_height(height);
|
cam->set_full_height(height);
|
||||||
|
|
||||||
/* panorama sensor */
|
/* panorama sensor */
|
||||||
if (bcam->type == CAMERA_PANORAMA && (bcam->panorama_type == PANORAMA_FISHEYE_EQUISOLID ||
|
if (bcam->type == CAMERA_PANORAMA && bcam->panorama_type == PANORAMA_FISHEYE_EQUISOLID) {
|
||||||
bcam->panorama_type == PANORAMA_FISHEYE_LENS_POLYNOMIAL)) {
|
|
||||||
float fit_xratio = (float)bcam->render_width * bcam->pixelaspect.x;
|
float fit_xratio = (float)bcam->render_width * bcam->pixelaspect.x;
|
||||||
float fit_yratio = (float)bcam->render_height * bcam->pixelaspect.y;
|
float fit_yratio = (float)bcam->render_height * bcam->pixelaspect.y;
|
||||||
bool horizontal_fit;
|
bool horizontal_fit;
|
||||||
@@ -478,12 +451,6 @@ static void blender_camera_sync(Camera *cam,
|
|||||||
cam->set_latitude_min(bcam->latitude_min);
|
cam->set_latitude_min(bcam->latitude_min);
|
||||||
cam->set_latitude_max(bcam->latitude_max);
|
cam->set_latitude_max(bcam->latitude_max);
|
||||||
|
|
||||||
cam->set_fisheye_polynomial_k0(bcam->fisheye_polynomial_k0);
|
|
||||||
cam->set_fisheye_polynomial_k1(bcam->fisheye_polynomial_k1);
|
|
||||||
cam->set_fisheye_polynomial_k2(bcam->fisheye_polynomial_k2);
|
|
||||||
cam->set_fisheye_polynomial_k3(bcam->fisheye_polynomial_k3);
|
|
||||||
cam->set_fisheye_polynomial_k4(bcam->fisheye_polynomial_k4);
|
|
||||||
|
|
||||||
cam->set_longitude_min(bcam->longitude_min);
|
cam->set_longitude_min(bcam->longitude_min);
|
||||||
cam->set_longitude_max(bcam->longitude_max);
|
cam->set_longitude_max(bcam->longitude_max);
|
||||||
|
|
||||||
@@ -658,7 +625,7 @@ void BlenderSync::sync_camera_motion(
|
|||||||
/* TODO(sergey): De-duplicate calculation with camera sync. */
|
/* TODO(sergey): De-duplicate calculation with camera sync. */
|
||||||
float fov = 2.0f * atanf((0.5f * sensor_size) / bcam.lens / aspectratio);
|
float fov = 2.0f * atanf((0.5f * sensor_size) / bcam.lens / aspectratio);
|
||||||
if (fov != cam->get_fov()) {
|
if (fov != cam->get_fov()) {
|
||||||
VLOG(3) << "Camera " << b_ob.name() << " FOV change detected.";
|
VLOG(1) << "Camera " << b_ob.name() << " FOV change detected.";
|
||||||
if (motion_time == 0.0f) {
|
if (motion_time == 0.0f) {
|
||||||
cam->set_fov(fov);
|
cam->set_fov(fov);
|
||||||
}
|
}
|
||||||
@@ -685,8 +652,7 @@ static void blender_camera_view_subset(BL::RenderEngine &b_engine,
|
|||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
BoundBox2D *view_box,
|
BoundBox2D *view_box,
|
||||||
BoundBox2D *cam_box,
|
BoundBox2D *cam_box);
|
||||||
float *view_aspect);
|
|
||||||
|
|
||||||
static void blender_camera_from_view(BlenderCamera *bcam,
|
static void blender_camera_from_view(BlenderCamera *bcam,
|
||||||
BL::RenderEngine &b_engine,
|
BL::RenderEngine &b_engine,
|
||||||
@@ -716,7 +682,6 @@ static void blender_camera_from_view(BlenderCamera *bcam,
|
|||||||
if (!skip_panorama && bcam->type == CAMERA_PANORAMA) {
|
if (!skip_panorama && bcam->type == CAMERA_PANORAMA) {
|
||||||
/* in panorama camera view, we map viewplane to camera border */
|
/* in panorama camera view, we map viewplane to camera border */
|
||||||
BoundBox2D view_box, cam_box;
|
BoundBox2D view_box, cam_box;
|
||||||
float view_aspect;
|
|
||||||
|
|
||||||
BL::RenderSettings b_render_settings(b_scene.render());
|
BL::RenderSettings b_render_settings(b_scene.render());
|
||||||
blender_camera_view_subset(b_engine,
|
blender_camera_view_subset(b_engine,
|
||||||
@@ -728,11 +693,9 @@ static void blender_camera_from_view(BlenderCamera *bcam,
|
|||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
&view_box,
|
&view_box,
|
||||||
&cam_box,
|
&cam_box);
|
||||||
&view_aspect);
|
|
||||||
|
|
||||||
bcam->pano_viewplane = view_box.make_relative_to(cam_box);
|
bcam->pano_viewplane = view_box.make_relative_to(cam_box);
|
||||||
bcam->pano_aspectratio = view_aspect;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* magic zoom formula */
|
/* magic zoom formula */
|
||||||
@@ -780,18 +743,17 @@ static void blender_camera_view_subset(BL::RenderEngine &b_engine,
|
|||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
BoundBox2D *view_box,
|
BoundBox2D *view_box,
|
||||||
BoundBox2D *cam_box,
|
BoundBox2D *cam_box)
|
||||||
float *view_aspect)
|
|
||||||
{
|
{
|
||||||
BoundBox2D cam, view;
|
BoundBox2D cam, view;
|
||||||
float cam_aspect, sensor_size;
|
float view_aspect, cam_aspect, sensor_size;
|
||||||
|
|
||||||
/* Get viewport viewplane. */
|
/* Get viewport viewplane. */
|
||||||
BlenderCamera view_bcam;
|
BlenderCamera view_bcam;
|
||||||
blender_camera_init(&view_bcam, b_render);
|
blender_camera_init(&view_bcam, b_render);
|
||||||
blender_camera_from_view(&view_bcam, b_engine, b_scene, b_v3d, b_rv3d, width, height, true);
|
blender_camera_from_view(&view_bcam, b_engine, b_scene, b_v3d, b_rv3d, width, height, true);
|
||||||
|
|
||||||
blender_camera_viewplane(&view_bcam, width, height, &view, view_aspect, &sensor_size);
|
blender_camera_viewplane(&view_bcam, width, height, &view, &view_aspect, &sensor_size);
|
||||||
|
|
||||||
/* Get camera viewplane. */
|
/* Get camera viewplane. */
|
||||||
BlenderCamera cam_bcam;
|
BlenderCamera cam_bcam;
|
||||||
@@ -806,7 +768,7 @@ static void blender_camera_view_subset(BL::RenderEngine &b_engine,
|
|||||||
&cam_bcam, cam_bcam.full_width, cam_bcam.full_height, &cam, &cam_aspect, &sensor_size);
|
&cam_bcam, cam_bcam.full_width, cam_bcam.full_height, &cam, &cam_aspect, &sensor_size);
|
||||||
|
|
||||||
/* Return */
|
/* Return */
|
||||||
*view_box = view * (1.0f / *view_aspect);
|
*view_box = view * (1.0f / view_aspect);
|
||||||
*cam_box = cam * (1.0f / cam_aspect);
|
*cam_box = cam * (1.0f / cam_aspect);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -823,18 +785,8 @@ static void blender_camera_border_subset(BL::RenderEngine &b_engine,
|
|||||||
{
|
{
|
||||||
/* Determine camera viewport subset. */
|
/* Determine camera viewport subset. */
|
||||||
BoundBox2D view_box, cam_box;
|
BoundBox2D view_box, cam_box;
|
||||||
float view_aspect;
|
blender_camera_view_subset(
|
||||||
blender_camera_view_subset(b_engine,
|
b_engine, b_render, b_scene, b_ob, b_v3d, b_rv3d, width, height, &view_box, &cam_box);
|
||||||
b_render,
|
|
||||||
b_scene,
|
|
||||||
b_ob,
|
|
||||||
b_v3d,
|
|
||||||
b_rv3d,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
&view_box,
|
|
||||||
&cam_box,
|
|
||||||
&view_aspect);
|
|
||||||
|
|
||||||
/* Determine viewport subset matching given border. */
|
/* Determine viewport subset matching given border. */
|
||||||
cam_box = cam_box.make_relative_to(view_box);
|
cam_box = cam_box.make_relative_to(view_box);
|
@@ -14,20 +14,19 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "render/attribute.h"
|
||||||
#include "blender/util.h"
|
#include "render/camera.h"
|
||||||
|
#include "render/curves.h"
|
||||||
|
#include "render/hair.h"
|
||||||
|
#include "render/object.h"
|
||||||
|
#include "render/scene.h"
|
||||||
|
|
||||||
#include "scene/attribute.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "scene/camera.h"
|
#include "blender/blender_util.h"
|
||||||
#include "scene/curves.h"
|
|
||||||
#include "scene/hair.h"
|
|
||||||
#include "scene/object.h"
|
|
||||||
#include "scene/scene.h"
|
|
||||||
|
|
||||||
#include "util/color.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/hash.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/log.h"
|
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -199,7 +198,7 @@ static bool ObtainCacheParticleUV(Hair *hair,
|
|||||||
b_mesh->uv_layers.begin(l);
|
b_mesh->uv_layers.begin(l);
|
||||||
|
|
||||||
float2 uv = zero_float2();
|
float2 uv = zero_float2();
|
||||||
if (!b_mesh->uv_layers.empty())
|
if (b_mesh->uv_layers.length())
|
||||||
b_psys.uv_on_emitter(psmd, *b_pa, pa_no, uv_num, &uv.x);
|
b_psys.uv_on_emitter(psmd, *b_pa, pa_no, uv_num, &uv.x);
|
||||||
CData->curve_uv.push_back_slow(uv);
|
CData->curve_uv.push_back_slow(uv);
|
||||||
|
|
||||||
@@ -261,7 +260,7 @@ static bool ObtainCacheParticleVcol(Hair *hair,
|
|||||||
b_mesh->vertex_colors.begin(l);
|
b_mesh->vertex_colors.begin(l);
|
||||||
|
|
||||||
float4 vcol = make_float4(0.0f, 0.0f, 0.0f, 1.0f);
|
float4 vcol = make_float4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
if (!b_mesh->vertex_colors.empty())
|
if (b_mesh->vertex_colors.length())
|
||||||
b_psys.mcol_on_emitter(psmd, *b_pa, pa_no, vcol_num, &vcol.x);
|
b_psys.mcol_on_emitter(psmd, *b_pa, pa_no, vcol_num, &vcol.x);
|
||||||
CData->curve_vcol.push_back_slow(vcol);
|
CData->curve_vcol.push_back_slow(vcol);
|
||||||
|
|
||||||
@@ -304,6 +303,10 @@ static void ExportCurveSegments(Scene *scene, Hair *hair, ParticleCurveData *CDa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (num_curves > 0) {
|
||||||
|
VLOG(1) << "Exporting curve segments for mesh " << hair->name;
|
||||||
|
}
|
||||||
|
|
||||||
hair->reserve_curves(hair->num_curves() + num_curves, hair->get_curve_keys().size() + num_keys);
|
hair->reserve_curves(hair->num_curves() + num_curves, hair->get_curve_keys().size() + num_keys);
|
||||||
|
|
||||||
num_keys = 0;
|
num_keys = 0;
|
||||||
@@ -352,7 +355,7 @@ static void ExportCurveSegments(Scene *scene, Hair *hair, ParticleCurveData *CDa
|
|||||||
|
|
||||||
/* check allocation */
|
/* check allocation */
|
||||||
if ((hair->get_curve_keys().size() != num_keys) || (hair->num_curves() != num_curves)) {
|
if ((hair->get_curve_keys().size() != num_keys) || (hair->num_curves() != num_curves)) {
|
||||||
VLOG(1) << "Hair memory allocation failed, clearing data.";
|
VLOG(1) << "Allocation failed, clearing data";
|
||||||
hair->clear(true);
|
hair->clear(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -408,11 +411,16 @@ static void export_hair_motion_validate_attribute(Hair *hair,
|
|||||||
if (num_motion_keys != num_keys || !have_motion) {
|
if (num_motion_keys != num_keys || !have_motion) {
|
||||||
/* No motion or hair "topology" changed, remove attributes again. */
|
/* No motion or hair "topology" changed, remove attributes again. */
|
||||||
if (num_motion_keys != num_keys) {
|
if (num_motion_keys != num_keys) {
|
||||||
VLOG(1) << "Hair topology changed, removing motion attribute.";
|
VLOG(1) << "Hair topology changed, removing attribute.";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
VLOG(1) << "No motion, removing attribute.";
|
||||||
}
|
}
|
||||||
hair->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
hair->attributes.remove(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
}
|
}
|
||||||
else if (motion_step > 0) {
|
else if (motion_step > 0) {
|
||||||
|
VLOG(1) << "Filling in new motion vertex position for motion_step " << motion_step;
|
||||||
|
|
||||||
/* Motion, fill up previous steps that we might have skipped because
|
/* Motion, fill up previous steps that we might have skipped because
|
||||||
* they had no motion, but we need them anyway now. */
|
* they had no motion, but we need them anyway now. */
|
||||||
for (int step = 0; step < motion_step; step++) {
|
for (int step = 0; step < motion_step; step++) {
|
||||||
@@ -428,12 +436,16 @@ static void export_hair_motion_validate_attribute(Hair *hair,
|
|||||||
|
|
||||||
static void ExportCurveSegmentsMotion(Hair *hair, ParticleCurveData *CData, int motion_step)
|
static void ExportCurveSegmentsMotion(Hair *hair, ParticleCurveData *CData, int motion_step)
|
||||||
{
|
{
|
||||||
|
VLOG(1) << "Exporting curve motion segments for hair " << hair->name << ", motion step "
|
||||||
|
<< motion_step;
|
||||||
|
|
||||||
/* find attribute */
|
/* find attribute */
|
||||||
Attribute *attr_mP = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
Attribute *attr_mP = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
bool new_attribute = false;
|
bool new_attribute = false;
|
||||||
|
|
||||||
/* add new attribute if it doesn't exist already */
|
/* add new attribute if it doesn't exist already */
|
||||||
if (!attr_mP) {
|
if (!attr_mP) {
|
||||||
|
VLOG(1) << "Creating new motion vertex position attribute";
|
||||||
attr_mP = hair->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
attr_mP = hair->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
new_attribute = true;
|
new_attribute = true;
|
||||||
}
|
}
|
||||||
@@ -669,6 +681,10 @@ static void export_hair_curves(Scene *scene, Hair *hair, BL::Hair b_hair)
|
|||||||
const int num_keys = b_hair.points.length();
|
const int num_keys = b_hair.points.length();
|
||||||
const int num_curves = b_hair.curves.length();
|
const int num_curves = b_hair.curves.length();
|
||||||
|
|
||||||
|
if (num_curves > 0) {
|
||||||
|
VLOG(1) << "Exporting curve segments for hair " << hair->name;
|
||||||
|
}
|
||||||
|
|
||||||
hair->reserve_curves(num_curves, num_keys);
|
hair->reserve_curves(num_curves, num_keys);
|
||||||
|
|
||||||
/* Export curves and points. */
|
/* Export curves and points. */
|
||||||
@@ -726,11 +742,15 @@ static void export_hair_curves(Scene *scene, Hair *hair, BL::Hair b_hair)
|
|||||||
|
|
||||||
static void export_hair_curves_motion(Hair *hair, BL::Hair b_hair, int motion_step)
|
static void export_hair_curves_motion(Hair *hair, BL::Hair b_hair, int motion_step)
|
||||||
{
|
{
|
||||||
|
VLOG(1) << "Exporting curve motion segments for hair " << hair->name << ", motion step "
|
||||||
|
<< motion_step;
|
||||||
|
|
||||||
/* Find or add attribute. */
|
/* Find or add attribute. */
|
||||||
Attribute *attr_mP = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
Attribute *attr_mP = hair->attributes.find(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
bool new_attribute = false;
|
bool new_attribute = false;
|
||||||
|
|
||||||
if (!attr_mP) {
|
if (!attr_mP) {
|
||||||
|
VLOG(1) << "Creating new motion vertex position attribute";
|
||||||
attr_mP = hair->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
attr_mP = hair->attributes.add(ATTR_STD_MOTION_VERTEX_POSITION);
|
||||||
new_attribute = true;
|
new_attribute = true;
|
||||||
}
|
}
|
||||||
@@ -819,14 +839,11 @@ void BlenderSync::sync_hair(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, H
|
|||||||
new_hair.set_used_shaders(used_shaders);
|
new_hair.set_used_shaders(used_shaders);
|
||||||
|
|
||||||
if (view_layer.use_hair) {
|
if (view_layer.use_hair) {
|
||||||
#ifdef WITH_HAIR_NODES
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
||||||
/* Hair object. */
|
/* Hair object. */
|
||||||
sync_hair(&new_hair, b_ob_info, false);
|
sync_hair(&new_hair, b_ob_info, false);
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
#endif
|
|
||||||
{
|
|
||||||
/* Particle hair. */
|
/* Particle hair. */
|
||||||
bool need_undeformed = new_hair.need_attribute(scene, ATTR_STD_GENERATED);
|
bool need_undeformed = new_hair.need_attribute(scene, ATTR_STD_GENERATED);
|
||||||
BL::Mesh b_mesh = object_to_mesh(
|
BL::Mesh b_mesh = object_to_mesh(
|
||||||
@@ -873,15 +890,12 @@ void BlenderSync::sync_hair_motion(BL::Depsgraph b_depsgraph,
|
|||||||
|
|
||||||
/* Export deformed coordinates. */
|
/* Export deformed coordinates. */
|
||||||
if (ccl::BKE_object_is_deform_modified(b_ob_info, b_scene, preview)) {
|
if (ccl::BKE_object_is_deform_modified(b_ob_info, b_scene, preview)) {
|
||||||
#ifdef WITH_HAIR_NODES
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair)) {
|
||||||
/* Hair object. */
|
/* Hair object. */
|
||||||
sync_hair(hair, b_ob_info, true, motion_step);
|
sync_hair(hair, b_ob_info, true, motion_step);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
#endif
|
|
||||||
{
|
|
||||||
/* Particle hair. */
|
/* Particle hair. */
|
||||||
BL::Mesh b_mesh = object_to_mesh(
|
BL::Mesh b_mesh = object_to_mesh(
|
||||||
b_data, b_ob_info, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
b_data, b_ob_info, b_depsgraph, false, Mesh::SUBDIVISION_NONE);
|
@@ -14,11 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/device.h"
|
#include "blender/blender_device.h"
|
||||||
#include "blender/session.h"
|
#include "blender/blender_session.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -27,7 +27,6 @@ enum ComputeDevice {
|
|||||||
COMPUTE_DEVICE_CUDA = 1,
|
COMPUTE_DEVICE_CUDA = 1,
|
||||||
COMPUTE_DEVICE_OPTIX = 3,
|
COMPUTE_DEVICE_OPTIX = 3,
|
||||||
COMPUTE_DEVICE_HIP = 4,
|
COMPUTE_DEVICE_HIP = 4,
|
||||||
COMPUTE_DEVICE_METAL = 5,
|
|
||||||
|
|
||||||
COMPUTE_DEVICE_NUM
|
COMPUTE_DEVICE_NUM
|
||||||
};
|
};
|
||||||
@@ -86,9 +85,6 @@ DeviceInfo blender_device_info(BL::Preferences &b_preferences, BL::Scene &b_scen
|
|||||||
else if (compute_device == COMPUTE_DEVICE_HIP) {
|
else if (compute_device == COMPUTE_DEVICE_HIP) {
|
||||||
mask |= DEVICE_MASK_HIP;
|
mask |= DEVICE_MASK_HIP;
|
||||||
}
|
}
|
||||||
else if (compute_device == COMPUTE_DEVICE_METAL) {
|
|
||||||
mask |= DEVICE_MASK_METAL;
|
|
||||||
}
|
|
||||||
vector<DeviceInfo> devices = Device::available_devices(mask);
|
vector<DeviceInfo> devices = Device::available_devices(mask);
|
||||||
|
|
||||||
/* Match device preferences and available devices. */
|
/* Match device preferences and available devices. */
|
@@ -14,11 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/display_driver.h"
|
#include "blender/blender_display_driver.h"
|
||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/opengl.h"
|
#include "util/util_opengl.h"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
struct RenderEngine;
|
struct RenderEngine;
|
||||||
@@ -334,7 +334,7 @@ bool BlenderDisplayDriver::update_begin(const Params ¶ms,
|
|||||||
|
|
||||||
/* Update PBO dimensions if needed.
|
/* Update PBO dimensions if needed.
|
||||||
*
|
*
|
||||||
* NOTE: Allocate the PBO for the size which will fit the final render resolution (as in,
|
* NOTE: Allocate the PBO for the the size which will fit the final render resolution (as in,
|
||||||
* at a resolution divider 1. This was we don't need to recreate graphics interoperability
|
* at a resolution divider 1. This was we don't need to recreate graphics interoperability
|
||||||
* objects which are costly and which are tied to the specific underlying buffer size.
|
* objects which are costly and which are tied to the specific underlying buffer size.
|
||||||
* The downside of this approach is that when graphics interoperability is not used we are
|
* The downside of this approach is that when graphics interoperability is not used we are
|
||||||
@@ -357,8 +357,6 @@ bool BlenderDisplayDriver::update_begin(const Params ¶ms,
|
|||||||
* centralized place. */
|
* centralized place. */
|
||||||
texture_.need_update = true;
|
texture_.need_update = true;
|
||||||
|
|
||||||
texture_.params = params;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -719,23 +717,8 @@ void BlenderDisplayDriver::texture_update_if_needed()
|
|||||||
texture_.need_update = false;
|
texture_.need_update = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderDisplayDriver::vertex_buffer_update(const Params & /*params*/)
|
void BlenderDisplayDriver::vertex_buffer_update(const Params ¶ms)
|
||||||
{
|
{
|
||||||
/* Draw at the parameters for which the texture has been updated for. This allows to always draw
|
|
||||||
* texture during bordered-rendered camera view without flickering. The validness of the display
|
|
||||||
* parameters for a texture is guaranteed by the initial "clear" state which makes drawing to
|
|
||||||
* have an early output.
|
|
||||||
*
|
|
||||||
* Such approach can cause some extra "jelly" effect during panning, but it is not more jelly
|
|
||||||
* than overlay of selected objects. Also, it's possible to redraw texture at an intersection of
|
|
||||||
* the texture draw parameters and the latest updated draw parameters (although, complexity of
|
|
||||||
* doing it might not worth it. */
|
|
||||||
const int x = texture_.params.full_offset.x;
|
|
||||||
const int y = texture_.params.full_offset.y;
|
|
||||||
|
|
||||||
const int width = texture_.params.size.x;
|
|
||||||
const int height = texture_.params.size.y;
|
|
||||||
|
|
||||||
/* Invalidate old contents - avoids stalling if the buffer is still waiting in queue to be
|
/* Invalidate old contents - avoids stalling if the buffer is still waiting in queue to be
|
||||||
* rendered. */
|
* rendered. */
|
||||||
glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(float), NULL, GL_STREAM_DRAW);
|
||||||
@@ -747,23 +730,23 @@ void BlenderDisplayDriver::vertex_buffer_update(const Params & /*params*/)
|
|||||||
|
|
||||||
vpointer[0] = 0.0f;
|
vpointer[0] = 0.0f;
|
||||||
vpointer[1] = 0.0f;
|
vpointer[1] = 0.0f;
|
||||||
vpointer[2] = x;
|
vpointer[2] = params.full_offset.x;
|
||||||
vpointer[3] = y;
|
vpointer[3] = params.full_offset.y;
|
||||||
|
|
||||||
vpointer[4] = 1.0f;
|
vpointer[4] = 1.0f;
|
||||||
vpointer[5] = 0.0f;
|
vpointer[5] = 0.0f;
|
||||||
vpointer[6] = x + width;
|
vpointer[6] = (float)params.size.x + params.full_offset.x;
|
||||||
vpointer[7] = y;
|
vpointer[7] = params.full_offset.y;
|
||||||
|
|
||||||
vpointer[8] = 1.0f;
|
vpointer[8] = 1.0f;
|
||||||
vpointer[9] = 1.0f;
|
vpointer[9] = 1.0f;
|
||||||
vpointer[10] = x + width;
|
vpointer[10] = (float)params.size.x + params.full_offset.x;
|
||||||
vpointer[11] = y + height;
|
vpointer[11] = (float)params.size.y + params.full_offset.y;
|
||||||
|
|
||||||
vpointer[12] = 0.0f;
|
vpointer[12] = 0.0f;
|
||||||
vpointer[13] = 1.0f;
|
vpointer[13] = 1.0f;
|
||||||
vpointer[14] = x;
|
vpointer[14] = params.full_offset.x;
|
||||||
vpointer[15] = y + height;
|
vpointer[15] = (float)params.size.y + params.full_offset.y;
|
||||||
|
|
||||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||||
}
|
}
|
@@ -22,10 +22,10 @@
|
|||||||
|
|
||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
|
|
||||||
#include "session/display_driver.h"
|
#include "render/display_driver.h"
|
||||||
|
|
||||||
#include "util/thread.h"
|
#include "util/util_thread.h"
|
||||||
#include "util/unique_ptr.h"
|
#include "util/util_unique_ptr.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -188,9 +188,6 @@ class BlenderDisplayDriver : public DisplayDriver {
|
|||||||
/* Dimensions of the underlying PBO. */
|
/* Dimensions of the underlying PBO. */
|
||||||
int buffer_width = 0;
|
int buffer_width = 0;
|
||||||
int buffer_height = 0;
|
int buffer_height = 0;
|
||||||
|
|
||||||
/* Display parameters the texture has been updated for. */
|
|
||||||
Params params;
|
|
||||||
} texture_;
|
} texture_;
|
||||||
|
|
||||||
unique_ptr<BlenderDisplayShader> display_shader_;
|
unique_ptr<BlenderDisplayShader> display_shader_;
|
@@ -15,35 +15,26 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/curves.h"
|
#include "render/curves.h"
|
||||||
#include "scene/hair.h"
|
#include "render/hair.h"
|
||||||
#include "scene/mesh.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/object.h"
|
#include "render/object.h"
|
||||||
#include "scene/pointcloud.h"
|
#include "render/volume.h"
|
||||||
#include "scene/volume.h"
|
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/task.h"
|
#include "util/util_task.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
static Geometry::Type determine_geom_type(BObjectInfo &b_ob_info, bool use_particle_hair)
|
static Geometry::Type determine_geom_type(BObjectInfo &b_ob_info, bool use_particle_hair)
|
||||||
{
|
{
|
||||||
#ifdef WITH_HAIR_NODES
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
||||||
#else
|
|
||||||
if (use_particle_hair) {
|
|
||||||
#endif
|
|
||||||
return Geometry::HAIR;
|
return Geometry::HAIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_PointCloud)) {
|
|
||||||
return Geometry::POINTCLOUD;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_Volume) ||
|
if (b_ob_info.object_data.is_a(&RNA_Volume) ||
|
||||||
(b_ob_info.object_data == b_ob_info.real_object.data() &&
|
(b_ob_info.object_data == b_ob_info.real_object.data() &&
|
||||||
object_fluid_gas_domain_find(b_ob_info.real_object))) {
|
object_fluid_gas_domain_find(b_ob_info.real_object))) {
|
||||||
@@ -116,9 +107,6 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
else if (geom_type == Geometry::VOLUME) {
|
else if (geom_type == Geometry::VOLUME) {
|
||||||
geom = scene->create_node<Volume>();
|
geom = scene->create_node<Volume>();
|
||||||
}
|
}
|
||||||
else if (geom_type == Geometry::POINTCLOUD) {
|
|
||||||
geom = scene->create_node<PointCloud>();
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
geom = scene->create_node<Mesh>();
|
geom = scene->create_node<Mesh>();
|
||||||
}
|
}
|
||||||
@@ -178,10 +166,6 @@ Geometry *BlenderSync::sync_geometry(BL::Depsgraph &b_depsgraph,
|
|||||||
Volume *volume = static_cast<Volume *>(geom);
|
Volume *volume = static_cast<Volume *>(geom);
|
||||||
sync_volume(b_ob_info, volume);
|
sync_volume(b_ob_info, volume);
|
||||||
}
|
}
|
||||||
else if (geom_type == Geometry::POINTCLOUD) {
|
|
||||||
PointCloud *pointcloud = static_cast<PointCloud *>(geom);
|
|
||||||
sync_pointcloud(pointcloud, b_ob_info);
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||||
sync_mesh(b_depsgraph, b_ob_info, mesh);
|
sync_mesh(b_depsgraph, b_ob_info, mesh);
|
||||||
@@ -231,11 +215,7 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
|||||||
if (progress.get_cancel())
|
if (progress.get_cancel())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef WITH_HAIR_NODES
|
|
||||||
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
if (b_ob_info.object_data.is_a(&RNA_Hair) || use_particle_hair) {
|
||||||
#else
|
|
||||||
if (use_particle_hair) {
|
|
||||||
#endif
|
|
||||||
Hair *hair = static_cast<Hair *>(geom);
|
Hair *hair = static_cast<Hair *>(geom);
|
||||||
sync_hair_motion(b_depsgraph, b_ob_info, hair, motion_step);
|
sync_hair_motion(b_depsgraph, b_ob_info, hair, motion_step);
|
||||||
}
|
}
|
||||||
@@ -243,10 +223,6 @@ void BlenderSync::sync_geometry_motion(BL::Depsgraph &b_depsgraph,
|
|||||||
object_fluid_gas_domain_find(b_ob_info.real_object)) {
|
object_fluid_gas_domain_find(b_ob_info.real_object)) {
|
||||||
/* No volume motion blur support yet. */
|
/* No volume motion blur support yet. */
|
||||||
}
|
}
|
||||||
else if (b_ob_info.object_data.is_a(&RNA_PointCloud)) {
|
|
||||||
PointCloud *pointcloud = static_cast<PointCloud *>(geom);
|
|
||||||
sync_pointcloud_motion(pointcloud, b_ob_info, motion_step);
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||||
sync_mesh_motion(b_depsgraph, b_ob_info, mesh, motion_step);
|
sync_mesh_motion(b_depsgraph, b_ob_info, mesh, motion_step);
|
@@ -19,12 +19,12 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "scene/geometry.h"
|
#include "render/geometry.h"
|
||||||
#include "scene/scene.h"
|
#include "render/scene.h"
|
||||||
|
|
||||||
#include "util/map.h"
|
#include "util/util_map.h"
|
||||||
#include "util/set.h"
|
#include "util/util_set.h"
|
||||||
#include "util/vector.h"
|
#include "util/util_vector.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -16,22 +16,16 @@
|
|||||||
|
|
||||||
#include "MEM_guardedalloc.h"
|
#include "MEM_guardedalloc.h"
|
||||||
|
|
||||||
#include "blender/image.h"
|
#include "blender/blender_image.h"
|
||||||
#include "blender/session.h"
|
#include "blender/blender_session.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
/* Packed Images */
|
/* Packed Images */
|
||||||
|
|
||||||
BlenderImageLoader::BlenderImageLoader(BL::Image b_image,
|
BlenderImageLoader::BlenderImageLoader(BL::Image b_image, int frame)
|
||||||
const int frame,
|
: b_image(b_image), frame(frame), free_cache(!b_image.has_data())
|
||||||
const bool is_preview_render)
|
|
||||||
: b_image(b_image),
|
|
||||||
frame(frame),
|
|
||||||
/* Don't free cache for preview render to avoid race condition from T93560, to be fixed
|
|
||||||
properly later as we are close to release. */
|
|
||||||
free_cache(!is_preview_render && !b_image.has_data())
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@@ -19,13 +19,13 @@
|
|||||||
|
|
||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
|
|
||||||
#include "scene/image.h"
|
#include "render/image.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
class BlenderImageLoader : public ImageLoader {
|
class BlenderImageLoader : public ImageLoader {
|
||||||
public:
|
public:
|
||||||
BlenderImageLoader(BL::Image b_image, const int frame, const bool is_preview_render);
|
BlenderImageLoader(BL::Image b_image, int frame);
|
||||||
|
|
||||||
bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override;
|
bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override;
|
||||||
bool load_pixels(const ImageMetaData &metadata,
|
bool load_pixels(const ImageMetaData &metadata,
|
@@ -16,12 +16,12 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/light.h"
|
#include "render/light.h"
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/hash.h"
|
#include "util/util_hash.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/CCL_api.h"
|
#include "blender/CCL_api.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
|
|
||||||
void CCL_init_logging(const char *argv0)
|
void CCL_init_logging(const char *argv0)
|
||||||
{
|
{
|
@@ -14,26 +14,25 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/session.h"
|
#include "render/camera.h"
|
||||||
#include "blender/sync.h"
|
#include "render/colorspace.h"
|
||||||
#include "blender/util.h"
|
#include "render/mesh.h"
|
||||||
|
#include "render/object.h"
|
||||||
|
#include "render/scene.h"
|
||||||
|
|
||||||
#include "scene/camera.h"
|
#include "blender/blender_session.h"
|
||||||
#include "scene/colorspace.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "scene/mesh.h"
|
#include "blender/blender_util.h"
|
||||||
#include "scene/object.h"
|
|
||||||
#include "scene/scene.h"
|
|
||||||
|
|
||||||
#include "subd/patch.h"
|
#include "subd/subd_patch.h"
|
||||||
#include "subd/split.h"
|
#include "subd/subd_split.h"
|
||||||
|
|
||||||
#include "util/algorithm.h"
|
#include "util/util_algorithm.h"
|
||||||
#include "util/color.h"
|
#include "util/util_disjoint_set.h"
|
||||||
#include "util/disjoint_set.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/hash.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/log.h"
|
#include "util/util_math.h"
|
||||||
#include "util/math.h"
|
|
||||||
|
|
||||||
#include "mikktspace.h"
|
#include "mikktspace.h"
|
||||||
|
|
||||||
@@ -555,7 +554,7 @@ static void attr_create_vertex_color(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh,
|
|||||||
/* Create uv map attributes. */
|
/* Create uv map attributes. */
|
||||||
static void attr_create_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh)
|
static void attr_create_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh)
|
||||||
{
|
{
|
||||||
if (!b_mesh.uv_layers.empty()) {
|
if (b_mesh.uv_layers.length() != 0) {
|
||||||
for (BL::MeshUVLoopLayer &l : b_mesh.uv_layers) {
|
for (BL::MeshUVLoopLayer &l : b_mesh.uv_layers) {
|
||||||
const bool active_render = l.active_render();
|
const bool active_render = l.active_render();
|
||||||
AttributeStandard uv_std = (active_render) ? ATTR_STD_UV : ATTR_STD_NONE;
|
AttributeStandard uv_std = (active_render) ? ATTR_STD_UV : ATTR_STD_NONE;
|
||||||
@@ -619,7 +618,7 @@ static void attr_create_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh)
|
|||||||
|
|
||||||
static void attr_create_subd_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, bool subdivide_uvs)
|
static void attr_create_subd_uv_map(Scene *scene, Mesh *mesh, BL::Mesh &b_mesh, bool subdivide_uvs)
|
||||||
{
|
{
|
||||||
if (!b_mesh.uv_layers.empty()) {
|
if (b_mesh.uv_layers.length() != 0) {
|
||||||
BL::Mesh::uv_layers_iterator l;
|
BL::Mesh::uv_layers_iterator l;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
@@ -951,7 +950,7 @@ static void create_mesh(Scene *scene,
|
|||||||
N = attr_N->data_float3();
|
N = attr_N->data_float3();
|
||||||
|
|
||||||
/* create generated coordinates from undeformed coordinates */
|
/* create generated coordinates from undeformed coordinates */
|
||||||
const bool need_default_tangent = (subdivision == false) && (b_mesh.uv_layers.empty()) &&
|
const bool need_default_tangent = (subdivision == false) && (b_mesh.uv_layers.length() == 0) &&
|
||||||
(mesh->need_attribute(scene, ATTR_STD_UV_TANGENT));
|
(mesh->need_attribute(scene, ATTR_STD_UV_TANGENT));
|
||||||
if (mesh->need_attribute(scene, ATTR_STD_GENERATED) || need_default_tangent) {
|
if (mesh->need_attribute(scene, ATTR_STD_GENERATED) || need_default_tangent) {
|
||||||
Attribute *attr = attributes.add(ATTR_STD_GENERATED);
|
Attribute *attr = attributes.add(ATTR_STD_GENERATED);
|
||||||
@@ -1086,6 +1085,40 @@ static void create_subd_mesh(Scene *scene,
|
|||||||
|
|
||||||
/* Sync */
|
/* Sync */
|
||||||
|
|
||||||
|
/* Check whether some of "built-in" motion-related attributes are needed to be exported (includes
|
||||||
|
* things like velocity from cache modifier, fluid simulation).
|
||||||
|
*
|
||||||
|
* NOTE: This code is run prior to object motion blur initialization. so can not access properties
|
||||||
|
* set by `sync_object_motion_init()`. */
|
||||||
|
static bool mesh_need_motion_attribute(BObjectInfo &b_ob_info, Scene *scene)
|
||||||
|
{
|
||||||
|
const Scene::MotionType need_motion = scene->need_motion();
|
||||||
|
if (need_motion == Scene::MOTION_NONE) {
|
||||||
|
/* Simple case: neither motion pass nor motion blur is needed, no need in the motion related
|
||||||
|
* attributes. */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_motion == Scene::MOTION_BLUR) {
|
||||||
|
/* A bit tricky and implicit case:
|
||||||
|
* - Motion blur is enabled in the scene, which implies specific number of time steps for
|
||||||
|
* objects.
|
||||||
|
* - If the object has motion blur disabled on it, it will have 0 time steps.
|
||||||
|
* - Motion attribute expects non-zero time steps.
|
||||||
|
*
|
||||||
|
* Avoid adding motion attributes if the motion blur will enforce 0 motion steps. */
|
||||||
|
PointerRNA cobject = RNA_pointer_get(&b_ob_info.real_object.ptr, "cycles");
|
||||||
|
const bool use_motion = get_boolean(cobject, "use_motion_blur");
|
||||||
|
if (!use_motion) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Motion pass which implies 3 motion steps, or motion blur which is not disabled on object
|
||||||
|
* level. */
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, Mesh *mesh)
|
void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, Mesh *mesh)
|
||||||
{
|
{
|
||||||
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
/* make a copy of the shaders as the caller in the main thread still need them for syncing the
|
||||||
@@ -1110,7 +1143,7 @@ void BlenderSync::sync_mesh(BL::Depsgraph b_depsgraph, BObjectInfo &b_ob_info, M
|
|||||||
|
|
||||||
if (b_mesh) {
|
if (b_mesh) {
|
||||||
/* Motion blur attribute is relative to seconds, we need it relative to frames. */
|
/* Motion blur attribute is relative to seconds, we need it relative to frames. */
|
||||||
const bool need_motion = object_need_motion_attribute(b_ob_info, scene);
|
const bool need_motion = mesh_need_motion_attribute(b_ob_info, scene);
|
||||||
const float motion_scale = (need_motion) ?
|
const float motion_scale = (need_motion) ?
|
||||||
scene->motion_shutter_time() /
|
scene->motion_shutter_time() /
|
||||||
(b_scene.render().fps() / b_scene.render().fps_base()) :
|
(b_scene.render().fps() / b_scene.render().fps_base()) :
|
@@ -14,26 +14,26 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/object_cull.h"
|
#include "render/alembic.h"
|
||||||
#include "blender/sync.h"
|
#include "render/camera.h"
|
||||||
#include "blender/util.h"
|
#include "render/graph.h"
|
||||||
|
#include "render/integrator.h"
|
||||||
|
#include "render/light.h"
|
||||||
|
#include "render/mesh.h"
|
||||||
|
#include "render/nodes.h"
|
||||||
|
#include "render/object.h"
|
||||||
|
#include "render/particles.h"
|
||||||
|
#include "render/scene.h"
|
||||||
|
#include "render/shader.h"
|
||||||
|
|
||||||
#include "scene/alembic.h"
|
#include "blender/blender_object_cull.h"
|
||||||
#include "scene/camera.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "scene/integrator.h"
|
#include "blender/blender_util.h"
|
||||||
#include "scene/light.h"
|
|
||||||
#include "scene/mesh.h"
|
|
||||||
#include "scene/object.h"
|
|
||||||
#include "scene/particles.h"
|
|
||||||
#include "scene/scene.h"
|
|
||||||
#include "scene/shader.h"
|
|
||||||
#include "scene/shader_graph.h"
|
|
||||||
#include "scene/shader_nodes.h"
|
|
||||||
|
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/hash.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/task.h"
|
#include "util/util_task.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -62,47 +62,31 @@ bool BlenderSync::BKE_object_is_modified(BL::Object &b_ob)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlenderSync::object_is_geometry(BObjectInfo &b_ob_info)
|
bool BlenderSync::object_is_geometry(BL::Object &b_ob)
|
||||||
{
|
{
|
||||||
BL::ID b_ob_data = b_ob_info.object_data;
|
BL::ID b_ob_data = b_ob.data();
|
||||||
|
|
||||||
if (!b_ob_data) {
|
if (!b_ob_data) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
BL::Object::type_enum type = b_ob_info.iter_object.type();
|
BL::Object::type_enum type = b_ob.type();
|
||||||
|
|
||||||
if (type == BL::Object::type_VOLUME || type == BL::Object::type_HAIR ||
|
if (type == BL::Object::type_VOLUME || type == BL::Object::type_HAIR) {
|
||||||
type == BL::Object::type_POINTCLOUD) {
|
|
||||||
/* Will be exported attached to mesh. */
|
/* Will be exported attached to mesh. */
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (type == BL::Object::type_CURVE) {
|
||||||
|
/* Skip exporting curves without faces, overhead can be
|
||||||
|
* significant if there are many for path animation. */
|
||||||
|
BL::Curve b_curve(b_ob_data);
|
||||||
|
|
||||||
/* Other object types that are not meshes but evaluate to meshes are presented to render engines
|
return (b_curve.bevel_object() || b_curve.extrude() != 0.0f || b_curve.bevel_depth() != 0.0f ||
|
||||||
* as separate instance objects. Metaballs and surface objects have not been affected by that
|
b_curve.dimensions() == BL::Curve::dimensions_2D || b_ob.modifiers.length());
|
||||||
* change yet. */
|
|
||||||
if (type == BL::Object::type_SURFACE || type == BL::Object::type_META) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
return b_ob_data.is_a(&RNA_Mesh);
|
return (b_ob_data.is_a(&RNA_Mesh) || b_ob_data.is_a(&RNA_Curve) ||
|
||||||
}
|
b_ob_data.is_a(&RNA_MetaBall));
|
||||||
|
|
||||||
bool BlenderSync::object_can_have_geometry(BL::Object &b_ob)
|
|
||||||
{
|
|
||||||
BL::Object::type_enum type = b_ob.type();
|
|
||||||
switch (type) {
|
|
||||||
case BL::Object::type_MESH:
|
|
||||||
case BL::Object::type_CURVE:
|
|
||||||
case BL::Object::type_SURFACE:
|
|
||||||
case BL::Object::type_META:
|
|
||||||
case BL::Object::type_FONT:
|
|
||||||
case BL::Object::type_HAIR:
|
|
||||||
case BL::Object::type_POINTCLOUD:
|
|
||||||
case BL::Object::type_VOLUME:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,22 +104,23 @@ void BlenderSync::sync_object_motion_init(BL::Object &b_parent, BL::Object &b_ob
|
|||||||
array<Transform> motion;
|
array<Transform> motion;
|
||||||
object->set_motion(motion);
|
object->set_motion(motion);
|
||||||
|
|
||||||
Geometry *geom = object->get_geometry();
|
Scene::MotionType need_motion = scene->need_motion();
|
||||||
if (!geom) {
|
if (need_motion == Scene::MOTION_NONE || !object->get_geometry()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Geometry *geom = object->get_geometry();
|
||||||
|
|
||||||
int motion_steps = 0;
|
int motion_steps = 0;
|
||||||
bool use_motion_blur = false;
|
bool use_motion_blur = false;
|
||||||
|
|
||||||
Scene::MotionType need_motion = scene->need_motion();
|
|
||||||
if (need_motion == Scene::MOTION_BLUR) {
|
if (need_motion == Scene::MOTION_BLUR) {
|
||||||
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
||||||
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
||||||
use_motion_blur = true;
|
use_motion_blur = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (need_motion != Scene::MOTION_NONE) {
|
else {
|
||||||
motion_steps = 3;
|
motion_steps = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,11 +162,6 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
if (is_instance) {
|
if (is_instance) {
|
||||||
persistent_id_array = b_instance.persistent_id();
|
persistent_id_array = b_instance.persistent_id();
|
||||||
persistent_id = persistent_id_array.data;
|
persistent_id = persistent_id_array.data;
|
||||||
if (!b_ob_info.is_real_object_data()) {
|
|
||||||
/* Remember which object data the geometry is coming from, so that we can sync it when the
|
|
||||||
* object has changed. */
|
|
||||||
instance_geometries_by_object[b_ob_info.real_object.ptr.data].insert(b_ob_info.object_data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* light is handled separately */
|
/* light is handled separately */
|
||||||
@@ -207,8 +187,8 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* only interested in object that we can create geometry from */
|
/* only interested in object that we can create meshes from */
|
||||||
if (!object_is_geometry(b_ob_info)) {
|
if (!object_is_geometry(b_ob)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,7 +275,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
|
|
||||||
object->set_visibility(visibility);
|
object->set_visibility(visibility);
|
||||||
|
|
||||||
object->set_is_shadow_catcher(b_ob.is_shadow_catcher() || b_parent.is_shadow_catcher());
|
object->set_is_shadow_catcher(b_ob.is_shadow_catcher());
|
||||||
|
|
||||||
float shadow_terminator_shading_offset = get_float(cobject, "shadow_terminator_offset");
|
float shadow_terminator_shading_offset = get_float(cobject, "shadow_terminator_offset");
|
||||||
object->set_shadow_terminator_shading_offset(shadow_terminator_shading_offset);
|
object->set_shadow_terminator_shading_offset(shadow_terminator_shading_offset);
|
||||||
@@ -581,7 +561,6 @@ void BlenderSync::sync_objects(BL::Depsgraph &b_depsgraph,
|
|||||||
else {
|
else {
|
||||||
geometry_motion_synced.clear();
|
geometry_motion_synced.clear();
|
||||||
}
|
}
|
||||||
instance_geometries_by_object.clear();
|
|
||||||
|
|
||||||
/* initialize culling */
|
/* initialize culling */
|
||||||
BlenderObjectCulling culling(scene, b_scene);
|
BlenderObjectCulling culling(scene, b_scene);
|
@@ -16,10 +16,10 @@
|
|||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
#include "scene/camera.h"
|
#include "render/camera.h"
|
||||||
|
|
||||||
#include "blender/object_cull.h"
|
#include "blender/blender_object_cull.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -17,8 +17,8 @@
|
|||||||
#ifndef __BLENDER_OBJECT_CULL_H__
|
#ifndef __BLENDER_OBJECT_CULL_H__
|
||||||
#define __BLENDER_OBJECT_CULL_H__
|
#define __BLENDER_OBJECT_CULL_H__
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "util/types.h"
|
#include "util/util_types.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/output_driver.h"
|
#include "blender/blender_output_driver.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ bool BlenderOutputDriver::read_render_tile(const Tile &tile)
|
|||||||
|
|
||||||
bool BlenderOutputDriver::update_render_tile(const Tile &tile)
|
bool BlenderOutputDriver::update_render_tile(const Tile &tile)
|
||||||
{
|
{
|
||||||
/* Use final write for preview renders, otherwise render result wouldn't be updated
|
/* Use final write for preview renders, otherwise render result wouldn't be be updated
|
||||||
* quickly on Blender side. For all other cases we use the display driver. */
|
* quickly on Blender side. For all other cases we use the display driver. */
|
||||||
if (b_engine_.is_preview()) {
|
if (b_engine_.is_preview()) {
|
||||||
write_render_tile(tile);
|
write_render_tile(tile);
|
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
|
|
||||||
#include "session/output_driver.h"
|
#include "render/output_driver.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -14,14 +14,14 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/particles.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/mesh.h"
|
#include "render/object.h"
|
||||||
#include "scene/object.h"
|
#include "render/particles.h"
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -18,28 +18,28 @@
|
|||||||
|
|
||||||
#include "blender/CCL_api.h"
|
#include "blender/CCL_api.h"
|
||||||
|
|
||||||
#include "blender/device.h"
|
#include "blender/blender_device.h"
|
||||||
#include "blender/session.h"
|
#include "blender/blender_session.h"
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "session/denoising.h"
|
#include "render/denoising.h"
|
||||||
#include "session/merge.h"
|
#include "render/merge.h"
|
||||||
|
|
||||||
#include "util/debug.h"
|
#include "util/util_debug.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/md5.h"
|
#include "util/util_md5.h"
|
||||||
#include "util/opengl.h"
|
#include "util/util_opengl.h"
|
||||||
#include "util/openimagedenoise.h"
|
#include "util/util_openimagedenoise.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/string.h"
|
#include "util/util_string.h"
|
||||||
#include "util/task.h"
|
#include "util/util_task.h"
|
||||||
#include "util/tbb.h"
|
#include "util/util_tbb.h"
|
||||||
#include "util/types.h"
|
#include "util/util_types.h"
|
||||||
|
|
||||||
#ifdef WITH_OSL
|
#ifdef WITH_OSL
|
||||||
# include "scene/osl.h"
|
# include "render/osl.h"
|
||||||
|
|
||||||
# include <OSL/oslconfig.h>
|
# include <OSL/oslconfig.h>
|
||||||
# include <OSL/oslquery.h>
|
# include <OSL/oslquery.h>
|
||||||
@@ -157,6 +157,8 @@ static PyObject *init_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
DebugFlags().running_inside_blender = true;
|
DebugFlags().running_inside_blender = true;
|
||||||
|
|
||||||
|
VLOG(2) << "Debug flags initialized to:\n" << DebugFlags();
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -735,20 +737,27 @@ static bool image_parse_filepaths(PyObject *pyfilepaths, vector<string> &filepat
|
|||||||
|
|
||||||
static PyObject *denoise_func(PyObject * /*self*/, PyObject *args, PyObject *keywords)
|
static PyObject *denoise_func(PyObject * /*self*/, PyObject *args, PyObject *keywords)
|
||||||
{
|
{
|
||||||
|
#if 1
|
||||||
|
(void)args;
|
||||||
|
(void)keywords;
|
||||||
|
#else
|
||||||
static const char *keyword_list[] = {
|
static const char *keyword_list[] = {
|
||||||
"preferences", "scene", "view_layer", "input", "output", NULL};
|
"preferences", "scene", "view_layer", "input", "output", "tile_size", "samples", NULL};
|
||||||
PyObject *pypreferences, *pyscene, *pyviewlayer;
|
PyObject *pypreferences, *pyscene, *pyviewlayer;
|
||||||
PyObject *pyinput, *pyoutput = NULL;
|
PyObject *pyinput, *pyoutput = NULL;
|
||||||
|
int tile_size = 0, samples = 0;
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args,
|
if (!PyArg_ParseTupleAndKeywords(args,
|
||||||
keywords,
|
keywords,
|
||||||
"OOOO|O",
|
"OOOO|Oii",
|
||||||
(char **)keyword_list,
|
(char **)keyword_list,
|
||||||
&pypreferences,
|
&pypreferences,
|
||||||
&pyscene,
|
&pyscene,
|
||||||
&pyviewlayer,
|
&pyviewlayer,
|
||||||
&pyinput,
|
&pyinput,
|
||||||
&pyoutput)) {
|
&pyoutput,
|
||||||
|
&tile_size,
|
||||||
|
&samples)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -770,10 +779,14 @@ static PyObject *denoise_func(PyObject * /*self*/, PyObject *args, PyObject *key
|
|||||||
&RNA_ViewLayer,
|
&RNA_ViewLayer,
|
||||||
PyLong_AsVoidPtr(pyviewlayer),
|
PyLong_AsVoidPtr(pyviewlayer),
|
||||||
&viewlayerptr);
|
&viewlayerptr);
|
||||||
BL::ViewLayer b_view_layer(viewlayerptr);
|
PointerRNA cviewlayer = RNA_pointer_get(&viewlayerptr, "cycles");
|
||||||
|
|
||||||
DenoiseParams params = BlenderSync::get_denoise_params(b_scene, b_view_layer, true);
|
DenoiseParams params;
|
||||||
params.use = true;
|
params.radius = get_int(cviewlayer, "denoising_radius");
|
||||||
|
params.strength = get_float(cviewlayer, "denoising_strength");
|
||||||
|
params.feature_strength = get_float(cviewlayer, "denoising_feature_strength");
|
||||||
|
params.relative_pca = get_boolean(cviewlayer, "denoising_relative_pca");
|
||||||
|
params.neighbor_frames = get_int(cviewlayer, "denoising_neighbor_frames");
|
||||||
|
|
||||||
/* Parse file paths list. */
|
/* Parse file paths list. */
|
||||||
vector<string> input, output;
|
vector<string> input, output;
|
||||||
@@ -801,15 +814,24 @@ static PyObject *denoise_func(PyObject * /*self*/, PyObject *args, PyObject *key
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Create denoiser. */
|
/* Create denoiser. */
|
||||||
DenoiserPipeline denoiser(device, params);
|
DenoiserPipeline denoiser(device);
|
||||||
|
denoiser.params = params;
|
||||||
denoiser.input = input;
|
denoiser.input = input;
|
||||||
denoiser.output = output;
|
denoiser.output = output;
|
||||||
|
|
||||||
|
if (tile_size > 0) {
|
||||||
|
denoiser.tile_size = make_int2(tile_size, tile_size);
|
||||||
|
}
|
||||||
|
if (samples > 0) {
|
||||||
|
denoiser.samples_override = samples;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run denoiser. */
|
/* Run denoiser. */
|
||||||
if (!denoiser.run()) {
|
if (!denoiser.run()) {
|
||||||
PyErr_SetString(PyExc_ValueError, denoiser.error.c_str());
|
PyErr_SetString(PyExc_ValueError, denoiser.error.c_str());
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
@@ -863,6 +885,8 @@ static PyObject *debug_flags_update_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
debug_flags_sync_from_scene(b_scene);
|
debug_flags_sync_from_scene(b_scene);
|
||||||
|
|
||||||
|
VLOG(2) << "Debug flags set to:\n" << DebugFlags();
|
||||||
|
|
||||||
debug_flags_set = true;
|
debug_flags_set = true;
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
@@ -872,6 +896,7 @@ static PyObject *debug_flags_reset_func(PyObject * /*self*/, PyObject * /*args*/
|
|||||||
{
|
{
|
||||||
debug_flags_reset();
|
debug_flags_reset();
|
||||||
if (debug_flags_set) {
|
if (debug_flags_set) {
|
||||||
|
VLOG(2) << "Debug flags reset to:\n" << DebugFlags();
|
||||||
debug_flags_set = false;
|
debug_flags_set = false;
|
||||||
}
|
}
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
@@ -886,18 +911,16 @@ static PyObject *enable_print_stats_func(PyObject * /*self*/, PyObject * /*args*
|
|||||||
static PyObject *get_device_types_func(PyObject * /*self*/, PyObject * /*args*/)
|
static PyObject *get_device_types_func(PyObject * /*self*/, PyObject * /*args*/)
|
||||||
{
|
{
|
||||||
vector<DeviceType> device_types = Device::available_types();
|
vector<DeviceType> device_types = Device::available_types();
|
||||||
bool has_cuda = false, has_optix = false, has_hip = false, has_metal = false;
|
bool has_cuda = false, has_optix = false, has_hip = false;
|
||||||
foreach (DeviceType device_type, device_types) {
|
foreach (DeviceType device_type, device_types) {
|
||||||
has_cuda |= (device_type == DEVICE_CUDA);
|
has_cuda |= (device_type == DEVICE_CUDA);
|
||||||
has_optix |= (device_type == DEVICE_OPTIX);
|
has_optix |= (device_type == DEVICE_OPTIX);
|
||||||
has_hip |= (device_type == DEVICE_HIP);
|
has_hip |= (device_type == DEVICE_HIP);
|
||||||
has_metal |= (device_type == DEVICE_METAL);
|
|
||||||
}
|
}
|
||||||
PyObject *list = PyTuple_New(4);
|
PyObject *list = PyTuple_New(3);
|
||||||
PyTuple_SET_ITEM(list, 0, PyBool_FromLong(has_cuda));
|
PyTuple_SET_ITEM(list, 0, PyBool_FromLong(has_cuda));
|
||||||
PyTuple_SET_ITEM(list, 1, PyBool_FromLong(has_optix));
|
PyTuple_SET_ITEM(list, 1, PyBool_FromLong(has_optix));
|
||||||
PyTuple_SET_ITEM(list, 2, PyBool_FromLong(has_hip));
|
PyTuple_SET_ITEM(list, 2, PyBool_FromLong(has_hip));
|
||||||
PyTuple_SET_ITEM(list, 3, PyBool_FromLong(has_metal));
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -926,9 +949,6 @@ static PyObject *set_device_override_func(PyObject * /*self*/, PyObject *arg)
|
|||||||
else if (override == "HIP") {
|
else if (override == "HIP") {
|
||||||
BlenderSession::device_override = DEVICE_MASK_HIP;
|
BlenderSession::device_override = DEVICE_MASK_HIP;
|
||||||
}
|
}
|
||||||
else if (override == "METAL") {
|
|
||||||
BlenderSession::device_override = DEVICE_MASK_METAL;
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
printf("\nError: %s is not a valid Cycles device.\n", override.c_str());
|
printf("\nError: %s is not a valid Cycles device.\n", override.c_str());
|
||||||
Py_RETURN_FALSE;
|
Py_RETURN_FALSE;
|
||||||
@@ -1039,13 +1059,5 @@ void *CCL_python_module_init()
|
|||||||
Py_INCREF(Py_False);
|
Py_INCREF(Py_False);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_CYCLES_DEBUG
|
|
||||||
PyModule_AddObject(mod, "with_debug", Py_True);
|
|
||||||
Py_INCREF(Py_True);
|
|
||||||
#else /* WITH_CYCLES_DEBUG */
|
|
||||||
PyModule_AddObject(mod, "with_debug", Py_False);
|
|
||||||
Py_INCREF(Py_False);
|
|
||||||
#endif /* WITH_CYCLES_DEBUG */
|
|
||||||
|
|
||||||
return (void *)mod;
|
return (void *)mod;
|
||||||
}
|
}
|
@@ -17,36 +17,36 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
#include "scene/background.h"
|
#include "render/background.h"
|
||||||
#include "scene/camera.h"
|
#include "render/buffers.h"
|
||||||
#include "scene/colorspace.h"
|
#include "render/camera.h"
|
||||||
#include "scene/film.h"
|
#include "render/colorspace.h"
|
||||||
#include "scene/integrator.h"
|
#include "render/film.h"
|
||||||
#include "scene/light.h"
|
#include "render/integrator.h"
|
||||||
#include "scene/mesh.h"
|
#include "render/light.h"
|
||||||
#include "scene/object.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/scene.h"
|
#include "render/object.h"
|
||||||
#include "scene/shader.h"
|
#include "render/scene.h"
|
||||||
#include "scene/stats.h"
|
#include "render/session.h"
|
||||||
#include "session/buffers.h"
|
#include "render/shader.h"
|
||||||
#include "session/session.h"
|
#include "render/stats.h"
|
||||||
|
|
||||||
#include "util/algorithm.h"
|
#include "util/util_algorithm.h"
|
||||||
#include "util/color.h"
|
#include "util/util_color.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/function.h"
|
#include "util/util_function.h"
|
||||||
#include "util/hash.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/murmurhash.h"
|
#include "util/util_murmurhash.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/progress.h"
|
#include "util/util_progress.h"
|
||||||
#include "util/time.h"
|
#include "util/util_time.h"
|
||||||
|
|
||||||
#include "blender/display_driver.h"
|
#include "blender/blender_display_driver.h"
|
||||||
#include "blender/output_driver.h"
|
#include "blender/blender_output_driver.h"
|
||||||
#include "blender/session.h"
|
#include "blender/blender_session.h"
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -129,7 +129,7 @@ void BlenderSession::create_session()
|
|||||||
/* reset status/progress */
|
/* reset status/progress */
|
||||||
last_status = "";
|
last_status = "";
|
||||||
last_error = "";
|
last_error = "";
|
||||||
last_progress = -1.0;
|
last_progress = -1.0f;
|
||||||
start_resize_time = 0.0;
|
start_resize_time = 0.0;
|
||||||
|
|
||||||
/* create session */
|
/* create session */
|
||||||
@@ -158,6 +158,15 @@ void BlenderSession::create_session()
|
|||||||
b_v3d, b_rv3d, scene->camera, width, height);
|
b_v3d, b_rv3d, scene->camera, width, height);
|
||||||
session->reset(session_params, buffer_params);
|
session->reset(session_params, buffer_params);
|
||||||
|
|
||||||
|
/* Create GPU display.
|
||||||
|
* TODO(sergey): Investigate whether DisplayDriver can be used for the preview as well. */
|
||||||
|
if (!b_engine.is_preview() && !headless) {
|
||||||
|
unique_ptr<BlenderDisplayDriver> display_driver = make_unique<BlenderDisplayDriver>(b_engine,
|
||||||
|
b_scene);
|
||||||
|
display_driver_ = display_driver.get();
|
||||||
|
session->set_display_driver(move(display_driver));
|
||||||
|
}
|
||||||
|
|
||||||
/* Viewport and preview (as in, material preview) does not do tiled rendering, so can inform
|
/* Viewport and preview (as in, material preview) does not do tiled rendering, so can inform
|
||||||
* engine that no tracking of the tiles state is needed.
|
* engine that no tracking of the tiles state is needed.
|
||||||
* The offline rendering will make a decision when tile is being written. The penalty of asking
|
* The offline rendering will make a decision when tile is being written. The penalty of asking
|
||||||
@@ -270,8 +279,6 @@ void BlenderSession::free_session()
|
|||||||
|
|
||||||
delete session;
|
delete session;
|
||||||
session = nullptr;
|
session = nullptr;
|
||||||
|
|
||||||
display_driver_ = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSession::full_buffer_written(string_view filename)
|
void BlenderSession::full_buffer_written(string_view filename)
|
||||||
@@ -348,7 +355,6 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Create driver to write out render results. */
|
/* Create driver to write out render results. */
|
||||||
ensure_display_driver_if_needed();
|
|
||||||
session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine));
|
session->set_output_driver(make_unique<BlenderOutputDriver>(b_engine));
|
||||||
|
|
||||||
session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); };
|
session->full_buffer_written_cb = [&](string_view filename) { full_buffer_written(filename); };
|
||||||
@@ -396,13 +402,6 @@ void BlenderSession::render(BL::Depsgraph &b_depsgraph_)
|
|||||||
/* set the current view */
|
/* set the current view */
|
||||||
b_engine.active_view_set(b_rview_name.c_str());
|
b_engine.active_view_set(b_rview_name.c_str());
|
||||||
|
|
||||||
/* Force update in this case, since the camera transform on each frame changes
|
|
||||||
* in different views. This could be optimized by somehow storing the animated
|
|
||||||
* camera transforms separate from the fixed stereo transform. */
|
|
||||||
if ((scene->need_motion() != Scene::MOTION_NONE) && view_index > 0) {
|
|
||||||
sync->tag_update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update scene */
|
/* update scene */
|
||||||
BL::Object b_camera_override(b_engine.camera_override());
|
BL::Object b_camera_override(b_engine.camera_override());
|
||||||
sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str());
|
sync->sync_camera(b_render, b_camera_override, width, height, b_rview_name.c_str());
|
||||||
@@ -622,24 +621,6 @@ void BlenderSession::bake(BL::Depsgraph &b_depsgraph_,
|
|||||||
sync->sync_camera(b_render, b_camera_override, width, height, "");
|
sync->sync_camera(b_render, b_camera_override, width, height, "");
|
||||||
sync->sync_data(
|
sync->sync_data(
|
||||||
b_render, b_depsgraph, b_v3d, b_camera_override, width, height, &python_thread_state);
|
b_render, b_depsgraph, b_v3d, b_camera_override, width, height, &python_thread_state);
|
||||||
|
|
||||||
/* Filtering settings for combined pass. */
|
|
||||||
if (pass->get_type() == PASS_COMBINED) {
|
|
||||||
Integrator *integrator = scene->integrator;
|
|
||||||
integrator->set_use_direct_light((bake_filter & BL::BakeSettings::pass_filter_DIRECT) != 0);
|
|
||||||
integrator->set_use_indirect_light((bake_filter & BL::BakeSettings::pass_filter_INDIRECT) !=
|
|
||||||
0);
|
|
||||||
integrator->set_use_diffuse((bake_filter & BL::BakeSettings::pass_filter_DIFFUSE) != 0);
|
|
||||||
integrator->set_use_glossy((bake_filter & BL::BakeSettings::pass_filter_GLOSSY) != 0);
|
|
||||||
integrator->set_use_transmission(
|
|
||||||
(bake_filter & BL::BakeSettings::pass_filter_TRANSMISSION) != 0);
|
|
||||||
integrator->set_use_emission((bake_filter & BL::BakeSettings::pass_filter_EMIT) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Always use transparent background for baking. */
|
|
||||||
scene->background->set_transparent(true);
|
|
||||||
|
|
||||||
/* Load built-in images from Blender. */
|
|
||||||
builtin_images_load();
|
builtin_images_load();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -695,8 +676,6 @@ void BlenderSession::synchronize(BL::Depsgraph &b_depsgraph_)
|
|||||||
create_session();
|
create_session();
|
||||||
}
|
}
|
||||||
|
|
||||||
ensure_display_driver_if_needed();
|
|
||||||
|
|
||||||
/* increase samples and render time, but never decrease */
|
/* increase samples and render time, but never decrease */
|
||||||
session->set_samples(session_params.samples);
|
session->set_samples(session_params.samples);
|
||||||
session->set_time_limit(session_params.time_limit);
|
session->set_time_limit(session_params.time_limit);
|
||||||
@@ -784,10 +763,8 @@ void BlenderSession::draw(BL::SpaceImageEditor &space_image)
|
|||||||
draw_state_.last_pass_index = pass_index;
|
draw_state_.last_pass_index = pass_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display_driver_) {
|
|
||||||
BL::Array<float, 2> zoom = space_image.zoom();
|
BL::Array<float, 2> zoom = space_image.zoom();
|
||||||
display_driver_->set_zoom(zoom[0], zoom[1]);
|
display_driver_->set_zoom(zoom[0], zoom[1]);
|
||||||
}
|
|
||||||
|
|
||||||
session->draw();
|
session->draw();
|
||||||
}
|
}
|
||||||
@@ -866,7 +843,7 @@ void BlenderSession::get_status(string &status, string &substatus)
|
|||||||
session->progress.get_status(status, substatus);
|
session->progress.get_status(status, substatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSession::get_progress(double &progress, double &total_time, double &render_time)
|
void BlenderSession::get_progress(float &progress, double &total_time, double &render_time)
|
||||||
{
|
{
|
||||||
session->progress.get_time(total_time, render_time);
|
session->progress.get_time(total_time, render_time);
|
||||||
progress = session->progress.get_progress();
|
progress = session->progress.get_progress();
|
||||||
@@ -874,10 +851,10 @@ void BlenderSession::get_progress(double &progress, double &total_time, double &
|
|||||||
|
|
||||||
void BlenderSession::update_bake_progress()
|
void BlenderSession::update_bake_progress()
|
||||||
{
|
{
|
||||||
double progress = session->progress.get_progress();
|
float progress = session->progress.get_progress();
|
||||||
|
|
||||||
if (progress != last_progress) {
|
if (progress != last_progress) {
|
||||||
b_engine.update_progress((float)progress);
|
b_engine.update_progress(progress);
|
||||||
last_progress = progress;
|
last_progress = progress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -886,7 +863,7 @@ void BlenderSession::update_status_progress()
|
|||||||
{
|
{
|
||||||
string timestatus, status, substatus;
|
string timestatus, status, substatus;
|
||||||
string scene_status = "";
|
string scene_status = "";
|
||||||
double progress;
|
float progress;
|
||||||
double total_time, remaining_time = 0, render_time;
|
double total_time, remaining_time = 0, render_time;
|
||||||
float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f;
|
float mem_used = (float)session->stats.mem_used / 1024.0f / 1024.0f;
|
||||||
float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f;
|
float mem_peak = (float)session->stats.mem_peak / 1024.0f / 1024.0f;
|
||||||
@@ -930,7 +907,7 @@ void BlenderSession::update_status_progress()
|
|||||||
last_status_time = current_time;
|
last_status_time = current_time;
|
||||||
}
|
}
|
||||||
if (progress != last_progress) {
|
if (progress != last_progress) {
|
||||||
b_engine.update_progress((float)progress);
|
b_engine.update_progress(progress);
|
||||||
last_progress = progress;
|
last_progress = progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1002,27 +979,4 @@ void BlenderSession::free_blender_memory_if_possible()
|
|||||||
b_engine.free_blender_memory();
|
b_engine.free_blender_memory();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSession::ensure_display_driver_if_needed()
|
|
||||||
{
|
|
||||||
if (display_driver_) {
|
|
||||||
/* Driver is already created. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (headless) {
|
|
||||||
/* No display needed for headless. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (b_engine.is_preview()) {
|
|
||||||
/* TODO(sergey): Investigate whether DisplayDriver can be used for the preview as well. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
unique_ptr<BlenderDisplayDriver> display_driver = make_unique<BlenderDisplayDriver>(b_engine,
|
|
||||||
b_scene);
|
|
||||||
display_driver_ = display_driver.get();
|
|
||||||
session->set_display_driver(move(display_driver));
|
|
||||||
}
|
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
@@ -17,17 +17,15 @@
|
|||||||
#ifndef __BLENDER_SESSION_H__
|
#ifndef __BLENDER_SESSION_H__
|
||||||
#define __BLENDER_SESSION_H__
|
#define __BLENDER_SESSION_H__
|
||||||
|
|
||||||
#include "MEM_guardedalloc.h"
|
|
||||||
|
|
||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
|
|
||||||
#include "scene/bake.h"
|
#include "render/bake.h"
|
||||||
#include "scene/scene.h"
|
#include "render/scene.h"
|
||||||
#include "session/session.h"
|
#include "render/session.h"
|
||||||
|
|
||||||
#include "util/vector.h"
|
#include "util/util_vector.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -82,7 +80,7 @@ class BlenderSession {
|
|||||||
void tag_redraw();
|
void tag_redraw();
|
||||||
void tag_update();
|
void tag_update();
|
||||||
void get_status(string &status, string &substatus);
|
void get_status(string &status, string &substatus);
|
||||||
void get_progress(double &progress, double &total_time, double &render_time);
|
void get_progress(float &progress, double &total_time, double &render_time);
|
||||||
void test_cancel();
|
void test_cancel();
|
||||||
void update_status_progress();
|
void update_status_progress();
|
||||||
void update_bake_progress();
|
void update_bake_progress();
|
||||||
@@ -108,7 +106,7 @@ class BlenderSession {
|
|||||||
|
|
||||||
string last_status;
|
string last_status;
|
||||||
string last_error;
|
string last_error;
|
||||||
double last_progress;
|
float last_progress;
|
||||||
double last_status_time;
|
double last_status_time;
|
||||||
|
|
||||||
int width, height;
|
int width, height;
|
||||||
@@ -148,8 +146,6 @@ class BlenderSession {
|
|||||||
*/
|
*/
|
||||||
void free_blender_memory_if_possible();
|
void free_blender_memory_if_possible();
|
||||||
|
|
||||||
void ensure_display_driver_if_needed();
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
thread_mutex mutex;
|
thread_mutex mutex;
|
||||||
int last_pass_index = -1;
|
int last_pass_index = -1;
|
@@ -14,26 +14,26 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/shader.h"
|
#include "render/background.h"
|
||||||
#include "scene/background.h"
|
#include "render/colorspace.h"
|
||||||
#include "scene/colorspace.h"
|
#include "render/graph.h"
|
||||||
#include "scene/integrator.h"
|
#include "render/integrator.h"
|
||||||
#include "scene/light.h"
|
#include "render/light.h"
|
||||||
#include "scene/osl.h"
|
#include "render/nodes.h"
|
||||||
#include "scene/scene.h"
|
#include "render/osl.h"
|
||||||
#include "scene/shader_graph.h"
|
#include "render/scene.h"
|
||||||
#include "scene/shader_nodes.h"
|
#include "render/shader.h"
|
||||||
|
|
||||||
#include "blender/image.h"
|
#include "blender/blender_image.h"
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/texture.h"
|
#include "blender/blender_texture.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/debug.h"
|
#include "util/util_debug.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/set.h"
|
#include "util/util_set.h"
|
||||||
#include "util/string.h"
|
#include "util/util_string.h"
|
||||||
#include "util/task.h"
|
#include "util/util_task.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -378,20 +378,11 @@ static ShaderNode *add_node(Scene *scene,
|
|||||||
}
|
}
|
||||||
else if (b_node.is_a(&RNA_ShaderNodeMapRange)) {
|
else if (b_node.is_a(&RNA_ShaderNodeMapRange)) {
|
||||||
BL::ShaderNodeMapRange b_map_range_node(b_node);
|
BL::ShaderNodeMapRange b_map_range_node(b_node);
|
||||||
if (b_map_range_node.data_type() == BL::ShaderNodeMapRange::data_type_FLOAT_VECTOR) {
|
|
||||||
VectorMapRangeNode *vector_map_range_node = graph->create_node<VectorMapRangeNode>();
|
|
||||||
vector_map_range_node->set_use_clamp(b_map_range_node.clamp());
|
|
||||||
vector_map_range_node->set_range_type(
|
|
||||||
(NodeMapRangeType)b_map_range_node.interpolation_type());
|
|
||||||
node = vector_map_range_node;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
MapRangeNode *map_range_node = graph->create_node<MapRangeNode>();
|
MapRangeNode *map_range_node = graph->create_node<MapRangeNode>();
|
||||||
map_range_node->set_clamp(b_map_range_node.clamp());
|
map_range_node->set_clamp(b_map_range_node.clamp());
|
||||||
map_range_node->set_range_type((NodeMapRangeType)b_map_range_node.interpolation_type());
|
map_range_node->set_range_type((NodeMapRangeType)b_map_range_node.interpolation_type());
|
||||||
node = map_range_node;
|
node = map_range_node;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else if (b_node.is_a(&RNA_ShaderNodeClamp)) {
|
else if (b_node.is_a(&RNA_ShaderNodeClamp)) {
|
||||||
BL::ShaderNodeClamp b_clamp_node(b_node);
|
BL::ShaderNodeClamp b_clamp_node(b_node);
|
||||||
ClampNode *clamp_node = graph->create_node<ClampNode>();
|
ClampNode *clamp_node = graph->create_node<ClampNode>();
|
||||||
@@ -498,9 +489,6 @@ static ShaderNode *add_node(Scene *scene,
|
|||||||
SubsurfaceScatteringNode *subsurface = graph->create_node<SubsurfaceScatteringNode>();
|
SubsurfaceScatteringNode *subsurface = graph->create_node<SubsurfaceScatteringNode>();
|
||||||
|
|
||||||
switch (b_subsurface_node.falloff()) {
|
switch (b_subsurface_node.falloff()) {
|
||||||
case BL::ShaderNodeSubsurfaceScattering::falloff_BURLEY:
|
|
||||||
subsurface->set_method(CLOSURE_BSSRDF_BURLEY_ID);
|
|
||||||
break;
|
|
||||||
case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK_FIXED_RADIUS:
|
case BL::ShaderNodeSubsurfaceScattering::falloff_RANDOM_WALK_FIXED_RADIUS:
|
||||||
subsurface->set_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
subsurface->set_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||||
break;
|
break;
|
||||||
@@ -617,9 +605,6 @@ static ShaderNode *add_node(Scene *scene,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch (b_principled_node.subsurface_method()) {
|
switch (b_principled_node.subsurface_method()) {
|
||||||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_BURLEY:
|
|
||||||
principled->set_subsurface_method(CLOSURE_BSSRDF_BURLEY_ID);
|
|
||||||
break;
|
|
||||||
case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK_FIXED_RADIUS:
|
case BL::ShaderNodeBsdfPrincipled::subsurface_method_RANDOM_WALK_FIXED_RADIUS:
|
||||||
principled->set_subsurface_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
principled->set_subsurface_method(CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID);
|
||||||
break;
|
break;
|
||||||
@@ -771,12 +756,11 @@ static ShaderNode *add_node(Scene *scene,
|
|||||||
int scene_frame = b_scene.frame_current();
|
int scene_frame = b_scene.frame_current();
|
||||||
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
|
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
|
||||||
image->handle = scene->image_manager->add_image(
|
image->handle = scene->image_manager->add_image(
|
||||||
new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()),
|
new BlenderImageLoader(b_image, image_frame), image->image_params());
|
||||||
image->image_params());
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ustring filename = ustring(
|
ustring filename = ustring(
|
||||||
image_user_file_path(b_image_user, b_image, b_scene.frame_current()));
|
image_user_file_path(b_image_user, b_image, b_scene.frame_current(), true));
|
||||||
image->set_filename(filename);
|
image->set_filename(filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -807,13 +791,12 @@ static ShaderNode *add_node(Scene *scene,
|
|||||||
if (is_builtin) {
|
if (is_builtin) {
|
||||||
int scene_frame = b_scene.frame_current();
|
int scene_frame = b_scene.frame_current();
|
||||||
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
|
int image_frame = image_user_frame_number(b_image_user, b_image, scene_frame);
|
||||||
env->handle = scene->image_manager->add_image(
|
env->handle = scene->image_manager->add_image(new BlenderImageLoader(b_image, image_frame),
|
||||||
new BlenderImageLoader(b_image, image_frame, b_engine.is_preview()),
|
|
||||||
env->image_params());
|
env->image_params());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
env->set_filename(
|
env->set_filename(
|
||||||
ustring(image_user_file_path(b_image_user, b_image, b_scene.frame_current())));
|
ustring(image_user_file_path(b_image_user, b_image, b_scene.frame_current(), false)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
node = env;
|
node = env;
|
||||||
@@ -1386,7 +1369,6 @@ void BlenderSync::sync_world(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d,
|
|||||||
{
|
{
|
||||||
Background *background = scene->background;
|
Background *background = scene->background;
|
||||||
Integrator *integrator = scene->integrator;
|
Integrator *integrator = scene->integrator;
|
||||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
|
||||||
|
|
||||||
BL::World b_world = b_scene.world();
|
BL::World b_world = b_scene.world();
|
||||||
|
|
||||||
@@ -1478,8 +1460,14 @@ void BlenderSync::sync_world(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d,
|
|||||||
graph->connect(background->output("Background"), out->input("Surface"));
|
graph->connect(background->output("Background"), out->input("Surface"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Visibility */
|
|
||||||
if (b_world) {
|
if (b_world) {
|
||||||
|
/* AO */
|
||||||
|
BL::WorldLighting b_light = b_world.light_settings();
|
||||||
|
|
||||||
|
integrator->set_ao_factor(b_light.ao_factor());
|
||||||
|
integrator->set_ao_distance(b_light.distance());
|
||||||
|
|
||||||
|
/* visibility */
|
||||||
PointerRNA cvisibility = RNA_pointer_get(&b_world.ptr, "cycles_visibility");
|
PointerRNA cvisibility = RNA_pointer_get(&b_world.ptr, "cycles_visibility");
|
||||||
uint visibility = 0;
|
uint visibility = 0;
|
||||||
|
|
||||||
@@ -1491,38 +1479,16 @@ void BlenderSync::sync_world(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d,
|
|||||||
|
|
||||||
background->set_visibility(visibility);
|
background->set_visibility(visibility);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
integrator->set_ao_factor(1.0f);
|
||||||
|
integrator->set_ao_distance(10.0f);
|
||||||
|
}
|
||||||
|
|
||||||
shader->set_graph(graph);
|
shader->set_graph(graph);
|
||||||
shader->tag_update(scene);
|
shader->tag_update(scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fast GI */
|
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||||
if (b_world) {
|
|
||||||
BL::WorldLighting b_light = b_world.light_settings();
|
|
||||||
enum { FAST_GI_METHOD_REPLACE = 0, FAST_GI_METHOD_ADD = 1, FAST_GI_METHOD_NUM };
|
|
||||||
|
|
||||||
const bool use_fast_gi = get_boolean(cscene, "use_fast_gi");
|
|
||||||
if (use_fast_gi) {
|
|
||||||
const int fast_gi_method = get_enum(
|
|
||||||
cscene, "fast_gi_method", FAST_GI_METHOD_NUM, FAST_GI_METHOD_REPLACE);
|
|
||||||
integrator->set_ao_factor((fast_gi_method == FAST_GI_METHOD_REPLACE) ? b_light.ao_factor() :
|
|
||||||
0.0f);
|
|
||||||
integrator->set_ao_additive_factor(
|
|
||||||
(fast_gi_method == FAST_GI_METHOD_ADD) ? b_light.ao_factor() : 0.0f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
integrator->set_ao_factor(0.0f);
|
|
||||||
integrator->set_ao_additive_factor(0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
integrator->set_ao_distance(b_light.distance());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
integrator->set_ao_factor(0.0f);
|
|
||||||
integrator->set_ao_additive_factor(0.0f);
|
|
||||||
integrator->set_ao_distance(10.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
background->set_transparent(b_scene.render().film_transparent());
|
background->set_transparent(b_scene.render().film_transparent());
|
||||||
|
|
||||||
if (background->get_transparent()) {
|
if (background->get_transparent()) {
|
@@ -14,33 +14,33 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "scene/background.h"
|
#include "render/background.h"
|
||||||
#include "scene/camera.h"
|
#include "render/camera.h"
|
||||||
#include "scene/curves.h"
|
#include "render/curves.h"
|
||||||
#include "scene/film.h"
|
#include "render/film.h"
|
||||||
#include "scene/integrator.h"
|
#include "render/graph.h"
|
||||||
#include "scene/light.h"
|
#include "render/integrator.h"
|
||||||
#include "scene/mesh.h"
|
#include "render/light.h"
|
||||||
#include "scene/object.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/procedural.h"
|
#include "render/nodes.h"
|
||||||
#include "scene/scene.h"
|
#include "render/object.h"
|
||||||
#include "scene/shader.h"
|
#include "render/procedural.h"
|
||||||
#include "scene/shader_graph.h"
|
#include "render/scene.h"
|
||||||
#include "scene/shader_nodes.h"
|
#include "render/shader.h"
|
||||||
|
|
||||||
#include "device/device.h"
|
#include "device/device.h"
|
||||||
|
|
||||||
#include "blender/device.h"
|
#include "blender/blender_device.h"
|
||||||
#include "blender/session.h"
|
#include "blender/blender_session.h"
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
|
|
||||||
#include "util/debug.h"
|
#include "util/util_debug.h"
|
||||||
#include "util/foreach.h"
|
#include "util/util_foreach.h"
|
||||||
#include "util/hash.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/opengl.h"
|
#include "util/util_opengl.h"
|
||||||
#include "util/openimagedenoise.h"
|
#include "util/util_openimagedenoise.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -95,11 +95,6 @@ void BlenderSync::reset(BL::BlendData &b_data, BL::Scene &b_scene)
|
|||||||
this->b_scene = b_scene;
|
this->b_scene = b_scene;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlenderSync::tag_update()
|
|
||||||
{
|
|
||||||
has_updates_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sync */
|
/* Sync */
|
||||||
|
|
||||||
void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d)
|
void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d)
|
||||||
@@ -167,19 +162,19 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
|
|||||||
/* Object */
|
/* Object */
|
||||||
else if (b_id.is_a(&RNA_Object)) {
|
else if (b_id.is_a(&RNA_Object)) {
|
||||||
BL::Object b_ob(b_id);
|
BL::Object b_ob(b_id);
|
||||||
const bool can_have_geometry = object_can_have_geometry(b_ob);
|
const bool is_geometry = object_is_geometry(b_ob);
|
||||||
const bool is_light = !can_have_geometry && object_is_light(b_ob);
|
const bool is_light = !is_geometry && object_is_light(b_ob);
|
||||||
|
|
||||||
if (b_ob.is_instancer() && b_update.is_updated_shading()) {
|
if (b_ob.is_instancer() && b_update.is_updated_shading()) {
|
||||||
/* Needed for e.g. object color updates on instancer. */
|
/* Needed for e.g. object color updates on instancer. */
|
||||||
object_map.set_recalc(b_ob);
|
object_map.set_recalc(b_ob);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (can_have_geometry || is_light) {
|
if (is_geometry || is_light) {
|
||||||
const bool updated_geometry = b_update.is_updated_geometry();
|
const bool updated_geometry = b_update.is_updated_geometry();
|
||||||
|
|
||||||
/* Geometry (mesh, hair, volume). */
|
/* Geometry (mesh, hair, volume). */
|
||||||
if (can_have_geometry) {
|
if (is_geometry) {
|
||||||
if (b_update.is_updated_transform() || b_update.is_updated_shading()) {
|
if (b_update.is_updated_transform() || b_update.is_updated_shading()) {
|
||||||
object_map.set_recalc(b_ob);
|
object_map.set_recalc(b_ob);
|
||||||
}
|
}
|
||||||
@@ -188,15 +183,6 @@ void BlenderSync::sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d
|
|||||||
(object_subdivision_type(b_ob, preview, experimental) != Mesh::SUBDIVISION_NONE)) {
|
(object_subdivision_type(b_ob, preview, experimental) != Mesh::SUBDIVISION_NONE)) {
|
||||||
BL::ID key = BKE_object_is_modified(b_ob) ? b_ob : b_ob.data();
|
BL::ID key = BKE_object_is_modified(b_ob) ? b_ob : b_ob.data();
|
||||||
geometry_map.set_recalc(key);
|
geometry_map.set_recalc(key);
|
||||||
|
|
||||||
/* Sync all contained geometry instances as well when the object changed.. */
|
|
||||||
map<void *, set<BL::ID>>::const_iterator instance_geometries =
|
|
||||||
instance_geometries_by_object.find(b_ob.ptr.data);
|
|
||||||
if (instance_geometries != instance_geometries_by_object.end()) {
|
|
||||||
for (BL::ID geometry : instance_geometries->second) {
|
|
||||||
geometry_map.set_recalc(geometry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updated_geometry) {
|
if (updated_geometry) {
|
||||||
@@ -354,37 +340,18 @@ void BlenderSync::sync_integrator(BL::ViewLayer &b_view_layer, bool background)
|
|||||||
cscene, "sampling_pattern", SAMPLING_NUM_PATTERNS, SAMPLING_PATTERN_SOBOL);
|
cscene, "sampling_pattern", SAMPLING_NUM_PATTERNS, SAMPLING_PATTERN_SOBOL);
|
||||||
integrator->set_sampling_pattern(sampling_pattern);
|
integrator->set_sampling_pattern(sampling_pattern);
|
||||||
|
|
||||||
bool use_adaptive_sampling = false;
|
|
||||||
if (preview) {
|
if (preview) {
|
||||||
use_adaptive_sampling = RNA_boolean_get(&cscene, "use_preview_adaptive_sampling");
|
integrator->set_use_adaptive_sampling(
|
||||||
integrator->set_use_adaptive_sampling(use_adaptive_sampling);
|
RNA_boolean_get(&cscene, "use_preview_adaptive_sampling"));
|
||||||
integrator->set_adaptive_threshold(get_float(cscene, "preview_adaptive_threshold"));
|
integrator->set_adaptive_threshold(get_float(cscene, "preview_adaptive_threshold"));
|
||||||
integrator->set_adaptive_min_samples(get_int(cscene, "preview_adaptive_min_samples"));
|
integrator->set_adaptive_min_samples(get_int(cscene, "preview_adaptive_min_samples"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
use_adaptive_sampling = RNA_boolean_get(&cscene, "use_adaptive_sampling");
|
integrator->set_use_adaptive_sampling(RNA_boolean_get(&cscene, "use_adaptive_sampling"));
|
||||||
integrator->set_use_adaptive_sampling(use_adaptive_sampling);
|
|
||||||
integrator->set_adaptive_threshold(get_float(cscene, "adaptive_threshold"));
|
integrator->set_adaptive_threshold(get_float(cscene, "adaptive_threshold"));
|
||||||
integrator->set_adaptive_min_samples(get_int(cscene, "adaptive_min_samples"));
|
integrator->set_adaptive_min_samples(get_int(cscene, "adaptive_min_samples"));
|
||||||
}
|
}
|
||||||
|
|
||||||
int samples = get_int(cscene, "samples");
|
|
||||||
float scrambling_distance = get_float(cscene, "scrambling_distance");
|
|
||||||
bool auto_scrambling_distance = get_boolean(cscene, "auto_scrambling_distance");
|
|
||||||
if (auto_scrambling_distance) {
|
|
||||||
scrambling_distance *= 4.0f / sqrtf(samples);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* only use scrambling distance in the viewport if user wants to and disable with AS */
|
|
||||||
bool preview_scrambling_distance = get_boolean(cscene, "preview_scrambling_distance");
|
|
||||||
if ((preview && !preview_scrambling_distance) || use_adaptive_sampling)
|
|
||||||
scrambling_distance = 1.0f;
|
|
||||||
|
|
||||||
if (scrambling_distance != 1.0f) {
|
|
||||||
VLOG(3) << "Using scrambling distance: " << scrambling_distance;
|
|
||||||
}
|
|
||||||
integrator->set_scrambling_distance(scrambling_distance);
|
|
||||||
|
|
||||||
if (get_boolean(cscene, "use_fast_gi")) {
|
if (get_boolean(cscene, "use_fast_gi")) {
|
||||||
if (preview) {
|
if (preview) {
|
||||||
integrator->set_ao_bounces(get_int(cscene, "ao_bounces"));
|
integrator->set_ao_bounces(get_int(cscene, "ao_bounces"));
|
||||||
@@ -397,12 +364,6 @@ void BlenderSync::sync_integrator(BL::ViewLayer &b_view_layer, bool background)
|
|||||||
integrator->set_ao_bounces(0);
|
integrator->set_ao_bounces(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WITH_CYCLES_DEBUG
|
|
||||||
DirectLightSamplingType direct_light_sampling_type = (DirectLightSamplingType)get_enum(
|
|
||||||
cscene, "direct_light_sampling_type", DIRECT_LIGHT_SAMPLING_NUM, DIRECT_LIGHT_SAMPLING_MIS);
|
|
||||||
integrator->set_direct_light_sampling_type(direct_light_sampling_type);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
const DenoiseParams denoise_params = get_denoise_params(b_scene, b_view_layer, background);
|
const DenoiseParams denoise_params = get_denoise_params(b_scene, b_view_layer, background);
|
||||||
integrator->set_use_denoise(denoise_params.use);
|
integrator->set_use_denoise(denoise_params.use);
|
||||||
|
|
||||||
@@ -580,7 +541,6 @@ static PassType get_blender_pass_type(BL::RenderPass &b_pass)
|
|||||||
|
|
||||||
MAP_PASS("Denoising Normal", PASS_DENOISING_NORMAL);
|
MAP_PASS("Denoising Normal", PASS_DENOISING_NORMAL);
|
||||||
MAP_PASS("Denoising Albedo", PASS_DENOISING_ALBEDO);
|
MAP_PASS("Denoising Albedo", PASS_DENOISING_ALBEDO);
|
||||||
MAP_PASS("Denoising Depth", PASS_DENOISING_DEPTH);
|
|
||||||
|
|
||||||
MAP_PASS("Shadow Catcher", PASS_SHADOW_CATCHER);
|
MAP_PASS("Shadow Catcher", PASS_SHADOW_CATCHER);
|
||||||
MAP_PASS("Noisy Shadow Catcher", PASS_SHADOW_CATCHER);
|
MAP_PASS("Noisy Shadow Catcher", PASS_SHADOW_CATCHER);
|
||||||
@@ -710,9 +670,6 @@ void BlenderSync::sync_render_passes(BL::RenderLayer &b_rlay, BL::ViewLayer &b_v
|
|||||||
|
|
||||||
b_engine.add_pass("Denoising Albedo", 3, "RGB", b_view_layer.name().c_str());
|
b_engine.add_pass("Denoising Albedo", 3, "RGB", b_view_layer.name().c_str());
|
||||||
pass_add(scene, PASS_DENOISING_ALBEDO, "Denoising Albedo", PassMode::NOISY);
|
pass_add(scene, PASS_DENOISING_ALBEDO, "Denoising Albedo", PassMode::NOISY);
|
||||||
|
|
||||||
b_engine.add_pass("Denoising Depth", 1, "Z", b_view_layer.name().c_str());
|
|
||||||
pass_add(scene, PASS_DENOISING_DEPTH, "Denoising Depth", PassMode::NOISY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom AOV passes. */
|
/* Custom AOV passes. */
|
||||||
@@ -846,25 +803,18 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine &b_engine,
|
|||||||
/* samples */
|
/* samples */
|
||||||
int samples = get_int(cscene, "samples");
|
int samples = get_int(cscene, "samples");
|
||||||
int preview_samples = get_int(cscene, "preview_samples");
|
int preview_samples = get_int(cscene, "preview_samples");
|
||||||
int sample_offset = get_int(cscene, "sample_offset");
|
|
||||||
|
|
||||||
if (background) {
|
if (background) {
|
||||||
params.samples = samples;
|
params.samples = samples;
|
||||||
params.sample_offset = sample_offset;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
params.samples = preview_samples;
|
params.samples = preview_samples;
|
||||||
if (params.samples == 0) {
|
if (params.samples == 0)
|
||||||
params.samples = INT_MAX;
|
params.samples = INT_MAX;
|
||||||
}
|
}
|
||||||
params.sample_offset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clamp sample offset. */
|
|
||||||
params.sample_offset = clamp(params.sample_offset, 0, Integrator::MAX_SAMPLES);
|
|
||||||
|
|
||||||
/* Clamp samples. */
|
/* Clamp samples. */
|
||||||
params.samples = clamp(params.samples, 0, Integrator::MAX_SAMPLES - params.sample_offset);
|
params.samples = min(params.samples, Integrator::MAX_SAMPLES);
|
||||||
|
|
||||||
/* Viewport Performance */
|
/* Viewport Performance */
|
||||||
params.pixel_size = b_engine.get_preview_pixel_size(b_scene);
|
params.pixel_size = b_engine.get_preview_pixel_size(b_scene);
|
||||||
@@ -883,7 +833,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine &b_engine,
|
|||||||
|
|
||||||
/* Time limit. */
|
/* Time limit. */
|
||||||
if (background) {
|
if (background) {
|
||||||
params.time_limit = (double)get_float(cscene, "time_limit");
|
params.time_limit = get_float(cscene, "time_limit");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* For the viewport it kind of makes more sense to think in terms of the noise floor, which is
|
/* For the viewport it kind of makes more sense to think in terms of the noise floor, which is
|
@@ -22,17 +22,17 @@
|
|||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
#include "RNA_types.h"
|
#include "RNA_types.h"
|
||||||
|
|
||||||
#include "blender/id_map.h"
|
#include "blender/blender_id_map.h"
|
||||||
#include "blender/util.h"
|
#include "blender/blender_util.h"
|
||||||
#include "blender/viewport.h"
|
#include "blender/blender_viewport.h"
|
||||||
|
|
||||||
#include "scene/scene.h"
|
#include "render/scene.h"
|
||||||
#include "session/session.h"
|
#include "render/session.h"
|
||||||
|
|
||||||
#include "util/map.h"
|
#include "util/util_map.h"
|
||||||
#include "util/set.h"
|
#include "util/util_set.h"
|
||||||
#include "util/transform.h"
|
#include "util/util_transform.h"
|
||||||
#include "util/vector.h"
|
#include "util/util_vector.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@@ -66,8 +66,6 @@ class BlenderSync {
|
|||||||
|
|
||||||
void reset(BL::BlendData &b_data, BL::Scene &b_scene);
|
void reset(BL::BlendData &b_data, BL::Scene &b_scene);
|
||||||
|
|
||||||
void tag_update();
|
|
||||||
|
|
||||||
/* sync */
|
/* sync */
|
||||||
void sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d);
|
void sync_recalc(BL::Depsgraph &b_depsgraph, BL::SpaceView3D &b_v3d);
|
||||||
void sync_data(BL::RenderSettings &b_render,
|
void sync_data(BL::RenderSettings &b_render,
|
||||||
@@ -105,11 +103,11 @@ class BlenderSync {
|
|||||||
static BufferParams get_buffer_params(
|
static BufferParams get_buffer_params(
|
||||||
BL::SpaceView3D &b_v3d, BL::RegionView3D &b_rv3d, Camera *cam, int width, int height);
|
BL::SpaceView3D &b_v3d, BL::RegionView3D &b_rv3d, Camera *cam, int width, int height);
|
||||||
|
|
||||||
|
private:
|
||||||
static DenoiseParams get_denoise_params(BL::Scene &b_scene,
|
static DenoiseParams get_denoise_params(BL::Scene &b_scene,
|
||||||
BL::ViewLayer &b_view_layer,
|
BL::ViewLayer &b_view_layer,
|
||||||
bool background);
|
bool background);
|
||||||
|
|
||||||
private:
|
|
||||||
/* sync */
|
/* sync */
|
||||||
void sync_lights(BL::Depsgraph &b_depsgraph, bool update_all);
|
void sync_lights(BL::Depsgraph &b_depsgraph, bool update_all);
|
||||||
void sync_materials(BL::Depsgraph &b_depsgraph, bool update_all);
|
void sync_materials(BL::Depsgraph &b_depsgraph, bool update_all);
|
||||||
@@ -169,16 +167,12 @@ class BlenderSync {
|
|||||||
Hair *hair, BL::Mesh &b_mesh, BObjectInfo &b_ob_info, bool motion, int motion_step = 0);
|
Hair *hair, BL::Mesh &b_mesh, BObjectInfo &b_ob_info, bool motion, int motion_step = 0);
|
||||||
bool object_has_particle_hair(BL::Object b_ob);
|
bool object_has_particle_hair(BL::Object b_ob);
|
||||||
|
|
||||||
/* Point Cloud */
|
|
||||||
void sync_pointcloud(PointCloud *pointcloud, BObjectInfo &b_ob_info);
|
|
||||||
void sync_pointcloud_motion(PointCloud *pointcloud, BObjectInfo &b_ob_info, int motion_step = 0);
|
|
||||||
|
|
||||||
/* Camera */
|
/* Camera */
|
||||||
void sync_camera_motion(
|
void sync_camera_motion(
|
||||||
BL::RenderSettings &b_render, BL::Object &b_ob, int width, int height, float motion_time);
|
BL::RenderSettings &b_render, BL::Object &b_ob, int width, int height, float motion_time);
|
||||||
|
|
||||||
/* Geometry */
|
/* Geometry */
|
||||||
Geometry *sync_geometry(BL::Depsgraph &b_depsgraph,
|
Geometry *sync_geometry(BL::Depsgraph &b_depsgrpah,
|
||||||
BObjectInfo &b_ob_info,
|
BObjectInfo &b_ob_info,
|
||||||
bool object_updated,
|
bool object_updated,
|
||||||
bool use_particle_hair,
|
bool use_particle_hair,
|
||||||
@@ -214,8 +208,7 @@ class BlenderSync {
|
|||||||
/* util */
|
/* util */
|
||||||
void find_shader(BL::ID &id, array<Node *> &used_shaders, Shader *default_shader);
|
void find_shader(BL::ID &id, array<Node *> &used_shaders, Shader *default_shader);
|
||||||
bool BKE_object_is_modified(BL::Object &b_ob);
|
bool BKE_object_is_modified(BL::Object &b_ob);
|
||||||
bool object_is_geometry(BObjectInfo &b_ob_info);
|
bool object_is_geometry(BL::Object &b_ob);
|
||||||
bool object_can_have_geometry(BL::Object &b_ob);
|
|
||||||
bool object_is_light(BL::Object &b_ob);
|
bool object_is_light(BL::Object &b_ob);
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
@@ -232,8 +225,6 @@ class BlenderSync {
|
|||||||
set<Geometry *> geometry_synced;
|
set<Geometry *> geometry_synced;
|
||||||
set<Geometry *> geometry_motion_synced;
|
set<Geometry *> geometry_motion_synced;
|
||||||
set<Geometry *> geometry_motion_attribute_synced;
|
set<Geometry *> geometry_motion_attribute_synced;
|
||||||
/** Remember which geometries come from which objects to be able to sync them after changes. */
|
|
||||||
map<void *, set<BL::ID>> instance_geometries_by_object;
|
|
||||||
set<float> motion_times;
|
set<float> motion_times;
|
||||||
void *world_map;
|
void *world_map;
|
||||||
bool world_recalc;
|
bool world_recalc;
|
||||||
@@ -273,6 +264,7 @@ class BlenderSync {
|
|||||||
|
|
||||||
Progress &progress;
|
Progress &progress;
|
||||||
|
|
||||||
|
protected:
|
||||||
/* Indicates that `sync_recalc()` detected changes in the scene.
|
/* Indicates that `sync_recalc()` detected changes in the scene.
|
||||||
* If this flag is false then the data is considered to be up-to-date and will not be
|
* If this flag is false then the data is considered to be up-to-date and will not be
|
||||||
* synchronized at all. */
|
* synchronized at all. */
|
@@ -14,7 +14,7 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/texture.h"
|
#include "blender/blender_texture.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -17,7 +17,7 @@
|
|||||||
#ifndef __BLENDER_TEXTURE_H__
|
#ifndef __BLENDER_TEXTURE_H__
|
||||||
#define __BLENDER_TEXTURE_H__
|
#define __BLENDER_TEXTURE_H__
|
||||||
|
|
||||||
#include "blender/sync.h"
|
#include "blender/blender_sync.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
@@ -17,24 +17,23 @@
|
|||||||
#ifndef __BLENDER_UTIL_H__
|
#ifndef __BLENDER_UTIL_H__
|
||||||
#define __BLENDER_UTIL_H__
|
#define __BLENDER_UTIL_H__
|
||||||
|
|
||||||
#include "scene/mesh.h"
|
#include "render/mesh.h"
|
||||||
#include "scene/scene.h"
|
|
||||||
|
|
||||||
#include "util/algorithm.h"
|
#include "util/util_algorithm.h"
|
||||||
#include "util/array.h"
|
#include "util/util_array.h"
|
||||||
#include "util/map.h"
|
#include "util/util_map.h"
|
||||||
#include "util/path.h"
|
#include "util/util_path.h"
|
||||||
#include "util/set.h"
|
#include "util/util_set.h"
|
||||||
#include "util/transform.h"
|
#include "util/util_transform.h"
|
||||||
#include "util/types.h"
|
#include "util/util_types.h"
|
||||||
#include "util/vector.h"
|
#include "util/util_vector.h"
|
||||||
|
|
||||||
/* Hacks to hook into Blender API
|
/* Hacks to hook into Blender API
|
||||||
* todo: clean this up ... */
|
* todo: clean this up ... */
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
void BKE_image_user_frame_calc(void *ima, void *iuser, int cfra);
|
void BKE_image_user_frame_calc(void *ima, void *iuser, int cfra);
|
||||||
void BKE_image_user_file_path_ex(void *iuser, void *ima, char *path, bool resolve_udim);
|
void BKE_image_user_file_path(void *iuser, void *ima, char *path);
|
||||||
unsigned char *BKE_image_get_pixels_for_frame(void *image, int frame, int tile);
|
unsigned char *BKE_image_get_pixels_for_frame(void *image, int frame, int tile);
|
||||||
float *BKE_image_get_float_pixels_for_frame(void *image, int frame, int tile);
|
float *BKE_image_get_float_pixels_for_frame(void *image, int frame, int tile);
|
||||||
}
|
}
|
||||||
@@ -291,14 +290,25 @@ static inline int render_resolution_y(BL::RenderSettings &b_render)
|
|||||||
return b_render.resolution_y() * b_render.resolution_percentage() / 100;
|
return b_render.resolution_y() * b_render.resolution_percentage() / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline string image_user_file_path(BL::ImageUser &iuser, BL::Image &ima, int cfra)
|
static inline string image_user_file_path(BL::ImageUser &iuser,
|
||||||
|
BL::Image &ima,
|
||||||
|
int cfra,
|
||||||
|
bool load_tiled)
|
||||||
{
|
{
|
||||||
char filepath[1024];
|
char filepath[1024];
|
||||||
iuser.tile(0);
|
iuser.tile(0);
|
||||||
BKE_image_user_frame_calc(ima.ptr.data, iuser.ptr.data, cfra);
|
BKE_image_user_frame_calc(ima.ptr.data, iuser.ptr.data, cfra);
|
||||||
BKE_image_user_file_path_ex(iuser.ptr.data, ima.ptr.data, filepath, false);
|
BKE_image_user_file_path(iuser.ptr.data, ima.ptr.data, filepath);
|
||||||
|
|
||||||
return string(filepath);
|
string filepath_str = string(filepath);
|
||||||
|
if (load_tiled && ima.source() == BL::Image::source_TILED) {
|
||||||
|
string udim;
|
||||||
|
if (ima.tiles.length() > 0) {
|
||||||
|
udim = to_string(ima.tiles[0].number());
|
||||||
|
}
|
||||||
|
string_replace(filepath_str, udim, "<UDIM>");
|
||||||
|
}
|
||||||
|
return filepath_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int image_user_frame_number(BL::ImageUser &iuser, BL::Image &ima, int cfra)
|
static inline int image_user_frame_number(BL::ImageUser &iuser, BL::Image &ima, int cfra)
|
||||||
@@ -637,7 +647,7 @@ static inline Mesh::SubdivisionType object_subdivision_type(BL::Object &b_ob,
|
|||||||
{
|
{
|
||||||
PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
|
PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
|
||||||
|
|
||||||
if (cobj.data && !b_ob.modifiers.empty() && experimental) {
|
if (cobj.data && b_ob.modifiers.length() > 0 && experimental) {
|
||||||
BL::Modifier mod = b_ob.modifiers[b_ob.modifiers.length() - 1];
|
BL::Modifier mod = b_ob.modifiers[b_ob.modifiers.length() - 1];
|
||||||
bool enabled = preview ? mod.show_viewport() : mod.show_render();
|
bool enabled = preview ? mod.show_viewport() : mod.show_render();
|
||||||
|
|
||||||
@@ -671,40 +681,6 @@ static inline uint object_ray_visibility(BL::Object &b_ob)
|
|||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check whether some of "built-in" motion-related attributes are needed to be exported (includes
|
|
||||||
* things like velocity from cache modifier, fluid simulation).
|
|
||||||
*
|
|
||||||
* NOTE: This code is run prior to object motion blur initialization. so can not access properties
|
|
||||||
* set by `sync_object_motion_init()`. */
|
|
||||||
static inline bool object_need_motion_attribute(BObjectInfo &b_ob_info, Scene *scene)
|
|
||||||
{
|
|
||||||
const Scene::MotionType need_motion = scene->need_motion();
|
|
||||||
if (need_motion == Scene::MOTION_NONE) {
|
|
||||||
/* Simple case: neither motion pass nor motion blur is needed, no need in the motion related
|
|
||||||
* attributes. */
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (need_motion == Scene::MOTION_BLUR) {
|
|
||||||
/* A bit tricky and implicit case:
|
|
||||||
* - Motion blur is enabled in the scene, which implies specific number of time steps for
|
|
||||||
* objects.
|
|
||||||
* - If the object has motion blur disabled on it, it will have 0 time steps.
|
|
||||||
* - Motion attribute expects non-zero time steps.
|
|
||||||
*
|
|
||||||
* Avoid adding motion attributes if the motion blur will enforce 0 motion steps. */
|
|
||||||
PointerRNA cobject = RNA_pointer_get(&b_ob_info.real_object.ptr, "cycles");
|
|
||||||
const bool use_motion = get_boolean(cobject, "use_motion_blur");
|
|
||||||
if (!use_motion) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Motion pass which implies 3 motion steps, or motion blur which is not disabled on object
|
|
||||||
* level. */
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
class EdgeMap {
|
class EdgeMap {
|
||||||
public:
|
public:
|
||||||
EdgeMap()
|
EdgeMap()
|
@@ -14,12 +14,11 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "blender/viewport.h"
|
#include "blender_viewport.h"
|
||||||
#include "blender/util.h"
|
|
||||||
|
|
||||||
#include "scene/pass.h"
|
#include "blender_util.h"
|
||||||
|
#include "render/pass.h"
|
||||||
#include "util/log.h"
|
#include "util/util_logging.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
@@ -23,7 +23,7 @@
|
|||||||
#include "RNA_blender_cpp.h"
|
#include "RNA_blender_cpp.h"
|
||||||
#include "RNA_types.h"
|
#include "RNA_types.h"
|
||||||
|
|
||||||
#include "scene/film.h"
|
#include "render/film.h"
|
||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user