Compare commits
14 Commits
temp-gpu-p
...
temp-geome
Author | SHA1 | Date | |
---|---|---|---|
73ed9afd03 | |||
de040ccb96 | |||
a9ba86c046 | |||
842375e1ed | |||
41bfb64da1 | |||
db59a5f9f0 | |||
a25dbf243a | |||
782b0df9c8 | |||
8969f4ba23 | |||
7cea4dc6f5 | |||
1e006e58dc | |||
0702871110 | |||
5ea958a992 | |||
7694a098ef |
@@ -265,5 +265,4 @@ ForEachMacros:
|
|||||||
- VECTOR_SET_SLOT_PROBING_BEGIN
|
- VECTOR_SET_SLOT_PROBING_BEGIN
|
||||||
|
|
||||||
StatementMacros:
|
StatementMacros:
|
||||||
- PyObject_HEAD
|
|
||||||
- PyObject_VAR_HEAD
|
- PyObject_VAR_HEAD
|
||||||
|
@@ -836,7 +836,7 @@ if(WITH_PYTHON)
|
|||||||
# because UNIX will search for the old Python paths which may not exist.
|
# because UNIX will search for the old Python paths which may not exist.
|
||||||
# giving errors about missing paths before this case is met.
|
# giving errors about missing paths before this case is met.
|
||||||
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.9")
|
if(DEFINED PYTHON_VERSION AND "${PYTHON_VERSION}" VERSION_LESS "3.9")
|
||||||
message(FATAL_ERROR "At least Python 3.9 is required to build, but found Python ${PYTHON_VERSION}")
|
message(FATAL_ERROR "At least Python 3.9 is required to build")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
file(GLOB RESULT "${CMAKE_SOURCE_DIR}/release/scripts/addons")
|
||||||
|
@@ -43,12 +43,6 @@ endif()
|
|||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
set(EMBREE_BUILD_DIR ${BUILD_MODE}/)
|
set(EMBREE_BUILD_DIR ${BUILD_MODE}/)
|
||||||
if(BUILD_MODE STREQUAL Debug)
|
|
||||||
list(APPEND EMBREE_EXTRA_ARGS
|
|
||||||
-DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_debug
|
|
||||||
-DEMBREE_TBB_LIBRARY_NAME=tbb_debug
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
else()
|
else()
|
||||||
set(EMBREE_BUILD_DIR)
|
set(EMBREE_BUILD_DIR)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -22,7 +22,6 @@ if(WIN32)
|
|||||||
-DTBB_BUILD_TBBMALLOC_PROXY=On
|
-DTBB_BUILD_TBBMALLOC_PROXY=On
|
||||||
-DTBB_BUILD_STATIC=Off
|
-DTBB_BUILD_STATIC=Off
|
||||||
-DTBB_BUILD_TESTS=Off
|
-DTBB_BUILD_TESTS=Off
|
||||||
-DCMAKE_DEBUG_POSTFIX=_debug
|
|
||||||
)
|
)
|
||||||
set(TBB_LIBRARY tbb)
|
set(TBB_LIBRARY tbb)
|
||||||
set(TBB_STATIC_LIBRARY Off)
|
set(TBB_STATIC_LIBRARY Off)
|
||||||
@@ -56,17 +55,17 @@ if(WIN32)
|
|||||||
ExternalProject_Add_Step(external_tbb after_install
|
ExternalProject_Add_Step(external_tbb after_install
|
||||||
# findtbb.cmake in some deps *NEEDS* to find tbb_debug.lib even if they are not going to use it
|
# findtbb.cmake in some deps *NEEDS* to find tbb_debug.lib even if they are not going to use it
|
||||||
# to make that test pass, we place a copy with the right name in the lib folder.
|
# to make that test pass, we place a copy with the right name in the lib folder.
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${LIBDIR}/tbb/lib/tbb_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb.dll ${LIBDIR}/tbb/bin/tbb_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.dll ${HARVEST_TARGET}/tbb/lib/tbb_debug.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc.dll ${LIBDIR}/tbb/bin/tbbmalloc_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.dll
|
||||||
# Normal collection of build artifacts
|
# Normal collection of build artifacts
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.lib ${HARVEST_TARGET}/tbb/lib/tbb.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb.dll ${HARVEST_TARGET}/tbb/bin/tbb.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb.dll ${HARVEST_TARGET}/tbb/lib/tbb.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_proxy.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tbb/include/ ${HARVEST_TARGET}/tbb/include/
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tbb/include/ ${HARVEST_TARGET}/tbb/include/
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
@@ -77,12 +76,11 @@ if(WIN32)
|
|||||||
# to make that test pass, we place a copy with the right name in the lib folder.
|
# to make that test pass, we place a copy with the right name in the lib folder.
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${LIBDIR}/tbb/lib/tbb.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${LIBDIR}/tbb/lib/tbb.lib
|
||||||
# Normal collection of build artifacts
|
# Normal collection of build artifacts
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${HARVEST_TARGET}/tbb/lib/tbb_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.lib ${HARVEST_TARGET}/tbb/lib/debug/tbb_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbb_debug.dll ${HARVEST_TARGET}/tbb/bin/tbb_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbb_debug.dll ${HARVEST_TARGET}/tbb/lib/debug/tbb_debug.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy_debug.lib
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy_debug.lib ${HARVEST_TARGET}/tbb/lib/tbbmalloc_proxy_debug.lib
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc.dll ${HARVEST_TARGET}/tbb/lib/debug/tbbmalloc.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_debug.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_debug.dll
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/lib/tbbmalloc_proxy.dll ${HARVEST_TARGET}/tbb/lib/debug/tbbmalloc_proxy.dll
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tbb/bin/tbbmalloc_proxy_debug.dll ${HARVEST_TARGET}/tbb/bin/tbbmalloc_proxy_debug.dll
|
|
||||||
DEPENDEES install
|
DEPENDEES install
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -432,9 +432,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
|
|||||||
set(USD_HASH_TYPE MD5)
|
set(USD_HASH_TYPE MD5)
|
||||||
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(OIDN_VERSION 1.4.0)
|
set(OIDN_VERSION 1.3.0)
|
||||||
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
set(OIDN_HASH 421824019becc5b664a22a2b98332bc5)
|
set(OIDN_HASH 301a5a0958d375a942014df0679b9270)
|
||||||
set(OIDN_HASH_TYPE MD5)
|
set(OIDN_HASH_TYPE MD5)
|
||||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||||
|
|
||||||
|
@@ -553,10 +553,10 @@ EMBREE_FORCE_BUILD=false
|
|||||||
EMBREE_FORCE_REBUILD=false
|
EMBREE_FORCE_REBUILD=false
|
||||||
EMBREE_SKIP=false
|
EMBREE_SKIP=false
|
||||||
|
|
||||||
OIDN_VERSION="1.4.0"
|
OIDN_VERSION="1.3.0"
|
||||||
OIDN_VERSION_SHORT="1.4"
|
OIDN_VERSION_SHORT="1.3"
|
||||||
OIDN_VERSION_MIN="1.4.0"
|
OIDN_VERSION_MIN="1.3.0"
|
||||||
OIDN_VERSION_MAX="1.5"
|
OIDN_VERSION_MAX="1.4"
|
||||||
OIDN_FORCE_BUILD=false
|
OIDN_FORCE_BUILD=false
|
||||||
OIDN_FORCE_REBUILD=false
|
OIDN_FORCE_REBUILD=false
|
||||||
OIDN_SKIP=false
|
OIDN_SKIP=false
|
||||||
@@ -565,7 +565,7 @@ ISPC_VERSION="1.14.1"
|
|||||||
|
|
||||||
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="4.4"
|
||||||
FFMPEG_VERSION_MAX="5.0"
|
FFMPEG_VERSION_MAX="5.0"
|
||||||
FFMPEG_FORCE_BUILD=false
|
FFMPEG_FORCE_BUILD=false
|
||||||
FFMPEG_FORCE_REBUILD=false
|
FFMPEG_FORCE_REBUILD=false
|
||||||
|
@@ -1,3 +1,33 @@
|
|||||||
|
diff -Naur oidn-1.3.0/cmake/FindTBB.cmake external_openimagedenoise/cmake/FindTBB.cmake
|
||||||
|
--- oidn-1.3.0/cmake/FindTBB.cmake 2021-02-04 16:20:26 -0700
|
||||||
|
+++ external_openimagedenoise/cmake/FindTBB.cmake 2021-02-12 09:35:53 -0700
|
||||||
|
@@ -332,20 +332,22 @@
|
||||||
|
${TBB_ROOT}/lib/${TBB_ARCH}/${TBB_VCVER}
|
||||||
|
${TBB_ROOT}/lib
|
||||||
|
)
|
||||||
|
-
|
||||||
|
# On Windows, also search the DLL so that the client may install it.
|
||||||
|
file(GLOB DLL_NAMES
|
||||||
|
${TBB_ROOT}/bin/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
|
||||||
|
${TBB_ROOT}/bin/${LIB_NAME}.dll
|
||||||
|
+ ${TBB_ROOT}/lib/${LIB_NAME}.dll
|
||||||
|
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME}.dll
|
||||||
|
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB1}.dll
|
||||||
|
${TBB_ROOT}/redist/${TBB_ARCH}/${TBB_VCVER}/${LIB_NAME_GLOB2}.dll
|
||||||
|
${TBB_ROOT}/../redist/${TBB_ARCH}/tbb/${TBB_VCVER}/${LIB_NAME}.dll
|
||||||
|
${TBB_ROOT}/../redist/${TBB_ARCH}_win/tbb/${TBB_VCVER}/${LIB_NAME}.dll
|
||||||
|
)
|
||||||
|
- list(GET DLL_NAMES 0 DLL_NAME)
|
||||||
|
- get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
|
||||||
|
- set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
|
||||||
|
+ if (DLL_NAMES)
|
||||||
|
+ list(GET DLL_NAMES 0 DLL_NAME)
|
||||||
|
+ get_filename_component(${BIN_DIR_VAR} "${DLL_NAME}" DIRECTORY)
|
||||||
|
+ set(${DLL_VAR} "${DLL_NAME}" CACHE PATH "${COMPONENT_NAME} ${BUILD_CONFIG} dll path")
|
||||||
|
+ endif()
|
||||||
|
elseif(APPLE)
|
||||||
|
set(LIB_PATHS ${TBB_ROOT}/lib)
|
||||||
|
else()
|
||||||
--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
|
--- external_openimagedenoise/cmake/oidn_ispc.cmake 2021-02-15 17:29:34.000000000 +0100
|
||||||
+++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
|
+++ external_openimagedenoise/cmake/oidn_ispc.cmake2 2021-02-15 17:29:28.000000000 +0100
|
||||||
@@ -98,7 +98,7 @@
|
@@ -98,7 +98,7 @@
|
||||||
|
@@ -20,24 +20,8 @@ if(NOT CLANG_ROOT_DIR AND NOT $ENV{CLANG_ROOT_DIR} STREQUAL "")
|
|||||||
set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
|
set(CLANG_ROOT_DIR $ENV{CLANG_ROOT_DIR})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT LLVM_ROOT_DIR)
|
|
||||||
if(DEFINED LLVM_VERSION)
|
|
||||||
message(running llvm-config-${LLVM_VERSION})
|
|
||||||
find_program(LLVM_CONFIG llvm-config-${LLVM_VERSION})
|
|
||||||
endif()
|
|
||||||
if(NOT LLVM_CONFIG)
|
|
||||||
find_program(LLVM_CONFIG llvm-config)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND ${LLVM_CONFIG} --prefix
|
|
||||||
OUTPUT_VARIABLE LLVM_ROOT_DIR
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
||||||
set(LLVM_ROOT_DIR ${LLVM_ROOT_DIR} CACHE PATH "Path to the LLVM installation")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(_CLANG_SEARCH_DIRS
|
set(_CLANG_SEARCH_DIRS
|
||||||
${CLANG_ROOT_DIR}
|
${CLANG_ROOT_DIR}
|
||||||
${LLVM_ROOT_DIR}
|
|
||||||
/opt/lib/clang
|
/opt/lib/clang
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -472,7 +472,8 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Could not find gflags include directory, set GFLAGS_INCLUDE_DIR "
|
"Could not find gflags include directory, set GFLAGS_INCLUDE_DIR "
|
||||||
"to directory containing gflags/gflags.h")
|
"to directory containing gflags/gflags.h")
|
||||||
endif()
|
endif(NOT GFLAGS_INCLUDE_DIR OR
|
||||||
|
NOT EXISTS ${GFLAGS_INCLUDE_DIR})
|
||||||
|
|
||||||
find_library(GFLAGS_LIBRARY NAMES gflags
|
find_library(GFLAGS_LIBRARY NAMES gflags
|
||||||
PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
|
PATHS ${GFLAGS_LIBRARY_DIR_HINTS}
|
||||||
@@ -483,7 +484,8 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Could not find gflags library, set GFLAGS_LIBRARY "
|
"Could not find gflags library, set GFLAGS_LIBRARY "
|
||||||
"to full path to libgflags.")
|
"to full path to libgflags.")
|
||||||
endif()
|
endif(NOT GFLAGS_LIBRARY OR
|
||||||
|
NOT EXISTS ${GFLAGS_LIBRARY})
|
||||||
|
|
||||||
# gflags typically requires a threading library (which is OS dependent), note
|
# gflags typically requires a threading library (which is OS dependent), note
|
||||||
# that this defines the CMAKE_THREAD_LIBS_INIT variable. If we are able to
|
# that this defines the CMAKE_THREAD_LIBS_INIT variable. If we are able to
|
||||||
@@ -558,7 +560,8 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Caller defined GFLAGS_INCLUDE_DIR:"
|
"Caller defined GFLAGS_INCLUDE_DIR:"
|
||||||
" ${GFLAGS_INCLUDE_DIR} does not contain gflags/gflags.h header.")
|
" ${GFLAGS_INCLUDE_DIR} does not contain gflags/gflags.h header.")
|
||||||
endif()
|
endif(GFLAGS_INCLUDE_DIR AND
|
||||||
|
NOT EXISTS ${GFLAGS_INCLUDE_DIR}/gflags/gflags.h)
|
||||||
# TODO: This regex for gflags library is pretty primitive, we use lowercase
|
# TODO: This regex for gflags library is pretty primitive, we use lowercase
|
||||||
# for comparison to handle Windows using CamelCase library names, could
|
# for comparison to handle Windows using CamelCase library names, could
|
||||||
# this check be better?
|
# this check be better?
|
||||||
@@ -568,7 +571,8 @@ if(NOT GFLAGS_FOUND)
|
|||||||
gflags_report_not_found(
|
gflags_report_not_found(
|
||||||
"Caller defined GFLAGS_LIBRARY: "
|
"Caller defined GFLAGS_LIBRARY: "
|
||||||
"${GFLAGS_LIBRARY} does not match gflags.")
|
"${GFLAGS_LIBRARY} does not match gflags.")
|
||||||
endif()
|
endif(GFLAGS_LIBRARY AND
|
||||||
|
NOT "${LOWERCASE_GFLAGS_LIBRARY}" MATCHES ".*gflags[^/]*")
|
||||||
|
|
||||||
gflags_reset_find_library_prefix()
|
gflags_reset_find_library_prefix()
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(NanoVDB DEFAULT_MSG
|
|||||||
|
|
||||||
IF(NANOVDB_FOUND)
|
IF(NANOVDB_FOUND)
|
||||||
SET(NANOVDB_INCLUDE_DIRS ${NANOVDB_INCLUDE_DIR})
|
SET(NANOVDB_INCLUDE_DIRS ${NANOVDB_INCLUDE_DIR})
|
||||||
ENDIF()
|
ENDIF(NANOVDB_FOUND)
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
NANOVDB_INCLUDE_DIR
|
NANOVDB_INCLUDE_DIR
|
||||||
|
@@ -46,7 +46,7 @@ SET(_opencollada_FIND_COMPONENTS
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Fedora openCOLLADA package links these statically
|
# Fedora openCOLLADA package links these statically
|
||||||
# note that order is important here or it won't link
|
# note that order is important here ot it wont link
|
||||||
SET(_opencollada_FIND_STATIC_COMPONENTS
|
SET(_opencollada_FIND_STATIC_COMPONENTS
|
||||||
buffer
|
buffer
|
||||||
ftoa
|
ftoa
|
||||||
|
@@ -44,7 +44,7 @@ SET(PYTHON_LINKFLAGS "-Xlinker -export-dynamic" CACHE STRING "Linker flags for p
|
|||||||
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
MARK_AS_ADVANCED(PYTHON_LINKFLAGS)
|
||||||
|
|
||||||
|
|
||||||
# if the user passes these defines as args, we don't want to overwrite
|
# if the user passes these defines as args, we dont want to overwrite
|
||||||
SET(_IS_INC_DEF OFF)
|
SET(_IS_INC_DEF OFF)
|
||||||
SET(_IS_INC_CONF_DEF OFF)
|
SET(_IS_INC_CONF_DEF OFF)
|
||||||
SET(_IS_LIB_DEF OFF)
|
SET(_IS_LIB_DEF OFF)
|
||||||
@@ -143,7 +143,7 @@ IF((NOT _IS_INC_DEF) OR (NOT _IS_INC_CONF_DEF) OR (NOT _IS_LIB_DEF) OR (NOT _IS_
|
|||||||
SET(_PYTHON_ABI_FLAGS "${_CURRENT_ABI_FLAGS}")
|
SET(_PYTHON_ABI_FLAGS "${_CURRENT_ABI_FLAGS}")
|
||||||
break()
|
break()
|
||||||
ELSE()
|
ELSE()
|
||||||
# ensure we don't find values from 2 different ABI versions
|
# ensure we dont find values from 2 different ABI versions
|
||||||
IF(NOT _IS_INC_DEF)
|
IF(NOT _IS_INC_DEF)
|
||||||
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
UNSET(PYTHON_INCLUDE_DIR CACHE)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
@@ -40,7 +40,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(sse2neon DEFAULT_MSG
|
|||||||
|
|
||||||
IF(SSE2NEON_FOUND)
|
IF(SSE2NEON_FOUND)
|
||||||
SET(SSE2NEON_INCLUDE_DIRS ${SSE2NEON_INCLUDE_DIR})
|
SET(SSE2NEON_INCLUDE_DIRS ${SSE2NEON_INCLUDE_DIR})
|
||||||
ENDIF()
|
ENDIF(SSE2NEON_FOUND)
|
||||||
|
|
||||||
MARK_AS_ADVANCED(
|
MARK_AS_ADVANCED(
|
||||||
SSE2NEON_INCLUDE_DIR
|
SSE2NEON_INCLUDE_DIR
|
||||||
|
@@ -305,7 +305,7 @@ def file_check_arg_sizes(tu):
|
|||||||
for i, node_child in enumerate(children):
|
for i, node_child in enumerate(children):
|
||||||
children = list(node_child.get_children())
|
children = list(node_child.get_children())
|
||||||
|
|
||||||
# skip if we don't have an index...
|
# skip if we dont have an index...
|
||||||
size_def = args_size_definition.get(i, -1)
|
size_def = args_size_definition.get(i, -1)
|
||||||
|
|
||||||
if size_def == -1:
|
if size_def == -1:
|
||||||
@@ -354,7 +354,7 @@ def file_check_arg_sizes(tu):
|
|||||||
filepath # always the same but useful when running threaded
|
filepath # always the same but useful when running threaded
|
||||||
))
|
))
|
||||||
|
|
||||||
# we don't really care what we are looking at, just scan entire file for
|
# we dont really care what we are looking at, just scan entire file for
|
||||||
# function calls.
|
# function calls.
|
||||||
|
|
||||||
def recursive_func_call_check(node):
|
def recursive_func_call_check(node):
|
||||||
|
@@ -596,6 +596,14 @@ function(SETUP_LIBDIRS)
|
|||||||
link_directories(${GMP_LIBPATH})
|
link_directories(${GMP_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(WITH_GHOST_WAYLAND)
|
||||||
|
link_directories(
|
||||||
|
${wayland-client_LIBRARY_DIRS}
|
||||||
|
${wayland-egl_LIBRARY_DIRS}
|
||||||
|
${xkbcommon_LIBRARY_DIRS}
|
||||||
|
${wayland-cursor_LIBRARY_DIRS})
|
||||||
|
endif()
|
||||||
|
|
||||||
if(WIN32 AND NOT UNIX)
|
if(WIN32 AND NOT UNIX)
|
||||||
link_directories(${PTHREADS_LIBPATH})
|
link_directories(${PTHREADS_LIBPATH})
|
||||||
endif()
|
endif()
|
||||||
@@ -694,7 +702,7 @@ macro(message_first_run)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# when we have warnings as errors applied globally this
|
# when we have warnings as errors applied globally this
|
||||||
# needs to be removed for some external libs which we don't maintain.
|
# needs to be removed for some external libs which we dont maintain.
|
||||||
|
|
||||||
# utility macro
|
# utility macro
|
||||||
macro(remove_cc_flag
|
macro(remove_cc_flag
|
||||||
@@ -794,7 +802,7 @@ macro(remove_extra_strict_flags)
|
|||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# note, we can only append flags on a single file so we need to negate the options.
|
# note, we can only append flags on a single file so we need to negate the options.
|
||||||
# at the moment we can't shut up ffmpeg deprecations, so use this, but will
|
# at the moment we cant shut up ffmpeg deprecations, so use this, but will
|
||||||
# probably add more removals here.
|
# probably add more removals here.
|
||||||
macro(remove_strict_c_flags_file
|
macro(remove_strict_c_flags_file
|
||||||
filenames)
|
filenames)
|
||||||
@@ -963,6 +971,14 @@ macro(blender_project_hack_post)
|
|||||||
unset(_reset_standard_cflags_rel)
|
unset(_reset_standard_cflags_rel)
|
||||||
unset(_reset_standard_cxxflags_rel)
|
unset(_reset_standard_cxxflags_rel)
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# workaround for omission in cmake 2.8.4's GNU.cmake, fixed in 2.8.5
|
||||||
|
if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
if(NOT DARWIN)
|
||||||
|
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
# pair of macros to allow libraries to be specify files to install, but to
|
# pair of macros to allow libraries to be specify files to install, but to
|
||||||
|
@@ -388,10 +388,6 @@ endif()
|
|||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
find_package(TBB)
|
find_package(TBB)
|
||||||
if(NOT TBB_FOUND)
|
|
||||||
message(WARNING "TBB not found, disabling WITH_TBB")
|
|
||||||
set(WITH_TBB OFF)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_POTRACE)
|
if(WITH_POTRACE)
|
||||||
|
@@ -457,10 +457,6 @@ endif()
|
|||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
find_package_wrapper(TBB)
|
find_package_wrapper(TBB)
|
||||||
if(NOT TBB_FOUND)
|
|
||||||
message(WARNING "TBB not found, disabling WITH_TBB")
|
|
||||||
set(WITH_TBB OFF)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_XR_OPENXR)
|
if(WITH_XR_OPENXR)
|
||||||
@@ -579,17 +575,17 @@ if(WITH_GHOST_WAYLAND)
|
|||||||
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
|
pkg_check_modules(wayland-scanner REQUIRED wayland-scanner)
|
||||||
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
|
pkg_check_modules(xkbcommon REQUIRED xkbcommon)
|
||||||
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
||||||
pkg_check_modules(dbus REQUIRED dbus-1)
|
|
||||||
|
|
||||||
set(WITH_GL_EGL ON)
|
set(WITH_GL_EGL ON)
|
||||||
|
|
||||||
list(APPEND PLATFORM_LINKLIBS
|
if(WITH_GHOST_WAYLAND)
|
||||||
${wayland-client_LINK_LIBRARIES}
|
list(APPEND PLATFORM_LINKLIBS
|
||||||
${wayland-egl_LINK_LIBRARIES}
|
${wayland-client_LIBRARIES}
|
||||||
${xkbcommon_LINK_LIBRARIES}
|
${wayland-egl_LIBRARIES}
|
||||||
${wayland-cursor_LINK_LIBRARIES}
|
${xkbcommon_LIBRARIES}
|
||||||
${dbus_LINK_LIBRARIES}
|
${wayland-cursor_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_GHOST_X11)
|
if(WITH_GHOST_X11)
|
||||||
|
@@ -261,10 +261,8 @@ if(NOT DEFINED LIBDIR)
|
|||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
message(FATAL_ERROR "32 bit compiler detected, blender no longer provides pre-build libraries for 32 bit windows, please set the LIBDIR cmake variable to your own library folder")
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.29.30130)
|
# Can be 1910..1912
|
||||||
message(STATUS "Visual Studio 2022 detected.")
|
if(MSVC_VERSION GREATER 1919)
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
|
||||||
elseif(MSVC_VERSION GREATER 1919)
|
|
||||||
message(STATUS "Visual Studio 2019 detected.")
|
message(STATUS "Visual Studio 2019 detected.")
|
||||||
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_BASE}_vc15)
|
||||||
elseif(MSVC_VERSION GREATER 1909)
|
elseif(MSVC_VERSION GREATER 1909)
|
||||||
@@ -550,6 +548,7 @@ if(WITH_OPENIMAGEIO)
|
|||||||
set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
|
set(OPENIMAGEIO_LIBRARIES ${OIIO_OPTIMIZED} ${OIIO_DEBUG})
|
||||||
|
|
||||||
set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
|
set(OPENIMAGEIO_DEFINITIONS "-DUSE_TBB=0")
|
||||||
|
set(OPENCOLORIO_DEFINITIONS "-DDOpenColorIO_SKIP_IMPORTS")
|
||||||
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
|
set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe")
|
||||||
add_definitions(-DOIIO_STATIC_DEFINE)
|
add_definitions(-DOIIO_STATIC_DEFINE)
|
||||||
add_definitions(-DOIIO_NO_SSE=1)
|
add_definitions(-DOIIO_NO_SSE=1)
|
||||||
@@ -595,7 +594,7 @@ if(WITH_OPENCOLORIO)
|
|||||||
debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib
|
debug ${OPENCOLORIO_LIBPATH}/libexpatdMD.lib
|
||||||
debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib
|
debug ${OPENCOLORIO_LIBPATH}/pystring_d.lib
|
||||||
)
|
)
|
||||||
set(OPENCOLORIO_DEFINITIONS "-DOpenColorIO_SKIP_IMPORTS")
|
set(OPENCOLORIO_DEFINITIONS)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_OPENVDB)
|
if(WITH_OPENVDB)
|
||||||
@@ -676,11 +675,10 @@ if(WITH_SYSTEM_AUDASPACE)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_TBB)
|
if(WITH_TBB)
|
||||||
set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/tbb_debug.lib)
|
set(TBB_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbb.lib debug ${LIBDIR}/tbb/lib/debug/tbb_debug.lib)
|
||||||
set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
|
set(TBB_INCLUDE_DIR ${LIBDIR}/tbb/include)
|
||||||
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
|
set(TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR})
|
||||||
if(WITH_TBB_MALLOC_PROXY)
|
if(WITH_TBB_MALLOC_PROXY)
|
||||||
set(TBB_MALLOC_LIBRARIES optimized ${LIBDIR}/tbb/lib/tbbmalloc.lib debug ${LIBDIR}/tbb/lib/tbbmalloc_debug.lib)
|
|
||||||
add_definitions(-DWITH_TBB_MALLOC)
|
add_definitions(-DWITH_TBB_MALLOC)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
@@ -15,15 +15,6 @@ if(WITH_WINDOWS_BUNDLE_CRT)
|
|||||||
|
|
||||||
include(InstallRequiredSystemLibraries)
|
include(InstallRequiredSystemLibraries)
|
||||||
|
|
||||||
# ucrtbase(d).dll cannot be in the manifest, due to the way windows 10 handles
|
|
||||||
# redirects for this dll, for details see T88813.
|
|
||||||
foreach(lib ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
|
|
||||||
string(FIND ${lib} "ucrtbase" pos)
|
|
||||||
if(NOT pos EQUAL -1)
|
|
||||||
list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${lib})
|
|
||||||
install(FILES ${lib} DESTINATION . COMPONENT Libraries)
|
|
||||||
endif()
|
|
||||||
endforeach()
|
|
||||||
# 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)
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
{ "path": "source/tools", "branch": "master", "commit_id": "HEAD" }
|
{ "path": "source/tools", "branch": "master", "commit_id": "HEAD" }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"svn":
|
"svn":
|
||||||
{
|
{
|
||||||
"tests": { "path": "lib/tests", "branch": "trunk", "commit_id": "HEAD" },
|
"tests": { "path": "lib/tests", "branch": "trunk", "commit_id": "HEAD" },
|
||||||
"libraries":
|
"libraries":
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
"cmake":
|
"cmake":
|
||||||
{
|
{
|
||||||
"default":
|
"default":
|
||||||
{
|
{
|
||||||
"version": "any",
|
"version": "any",
|
||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
@@ -58,28 +58,28 @@
|
|||||||
{
|
{
|
||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin-arm64":
|
"darwin-arm64":
|
||||||
{
|
{
|
||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"linux-x86_64":
|
"linux-x86_64":
|
||||||
{
|
{
|
||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"windows-amd64":
|
"windows-amd64":
|
||||||
{
|
{
|
||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,9 +6,6 @@ if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
|||||||
call "%~dp0\detect_msvc2019.cmd"
|
call "%~dp0\detect_msvc2019.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2022.cmd"
|
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
|
||||||
|
|
||||||
echo Compiler Detection failed. Use verbose switch for more information.
|
echo Compiler Detection failed. Use verbose switch for more information.
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc15
|
||||||
if "%BUILD_VS_YEAR%"=="2019" 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_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
||||||
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
||||||
|
@@ -19,10 +19,10 @@ if "%WITH_PYDEBUG%"=="1" (
|
|||||||
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
set PYDEBUG_CMAKE_ARGS=-DWINDOWS_PYTHON_DEBUG=On
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%BUILD_VS_YEAR%"=="2017" (
|
if "%BUILD_VS_YEAR%"=="2019" (
|
||||||
set BUILD_GENERATOR_POST=%WINDOWS_ARCH%
|
|
||||||
) else (
|
|
||||||
set BUILD_PLATFORM_SELECT=-A %MSBUILD_PLATFORM%
|
set BUILD_PLATFORM_SELECT=-A %MSBUILD_PLATFORM%
|
||||||
|
) else (
|
||||||
|
set BUILD_GENERATOR_POST=%WINDOWS_ARCH%
|
||||||
)
|
)
|
||||||
|
|
||||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%BUILD_GENERATOR_POST%" %BUILD_PLATFORM_SELECT% %TESTS_CMAKE_ARGS% %CLANG_CMAKE_ARGS% %ASAN_CMAKE_ARGS% %PYDEBUG_CMAKE_ARGS%
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
set BUILD_VS_VER=17
|
|
||||||
set BUILD_VS_YEAR=2022
|
|
||||||
call "%~dp0\detect_msvc_vswhere.cmd"
|
|
@@ -66,14 +66,6 @@ if NOT "%1" == "" (
|
|||||||
) else if "%1" == "2019b" (
|
) else if "%1" == "2019b" (
|
||||||
set BUILD_VS_YEAR=2019
|
set BUILD_VS_YEAR=2019
|
||||||
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
||||||
) else if "%1" == "2022" (
|
|
||||||
set BUILD_VS_YEAR=2022
|
|
||||||
) else if "%1" == "2022pre" (
|
|
||||||
set BUILD_VS_YEAR=2022
|
|
||||||
set VSWHERE_ARGS=-prerelease
|
|
||||||
) else if "%1" == "2022b" (
|
|
||||||
set BUILD_VS_YEAR=2022
|
|
||||||
set VSWHERE_ARGS=-products Microsoft.VisualStudio.Product.BuildTools
|
|
||||||
) else if "%1" == "packagename" (
|
) else if "%1" == "packagename" (
|
||||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
||||||
shift /1
|
shift /1
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# Doxyfile 1.9.1
|
# Doxyfile 1.8.16
|
||||||
|
|
||||||
# This file describes the settings to be used by the documentation system
|
# This file describes the settings to be used by the documentation system
|
||||||
# doxygen (www.doxygen.org) for a project.
|
# doxygen (www.doxygen.org) for a project.
|
||||||
@@ -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.0
|
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
|
||||||
@@ -227,14 +227,6 @@ QT_AUTOBRIEF = NO
|
|||||||
|
|
||||||
MULTILINE_CPP_IS_BRIEF = NO
|
MULTILINE_CPP_IS_BRIEF = NO
|
||||||
|
|
||||||
# By default Python docstrings are displayed as preformatted text and doxygen's
|
|
||||||
# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
|
|
||||||
# doxygen's special commands can be used and the contents of the docstring
|
|
||||||
# documentation blocks is shown as doxygen documentation.
|
|
||||||
# The default value is: YES.
|
|
||||||
|
|
||||||
PYTHON_DOCSTRING = YES
|
|
||||||
|
|
||||||
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
|
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
|
||||||
# documentation from any documented member that it re-implements.
|
# documentation from any documented member that it re-implements.
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
@@ -271,6 +263,12 @@ TAB_SIZE = 4
|
|||||||
|
|
||||||
ALIASES =
|
ALIASES =
|
||||||
|
|
||||||
|
# This tag can be used to specify a number of word-keyword mappings (TCL only).
|
||||||
|
# A mapping has the form "name=value". For example adding "class=itcl::class"
|
||||||
|
# will allow you to use the command class in the itcl::class meaning.
|
||||||
|
|
||||||
|
TCL_SUBST =
|
||||||
|
|
||||||
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
|
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
|
||||||
# only. Doxygen will then generate output that is more tailored for C. For
|
# only. Doxygen will then generate output that is more tailored for C. For
|
||||||
# instance, some of the names that are used will be different. The list of all
|
# instance, some of the names that are used will be different. The list of all
|
||||||
@@ -311,22 +309,19 @@ OPTIMIZE_OUTPUT_SLICE = NO
|
|||||||
# parses. With this tag you can assign which parser to use for a given
|
# parses. With this tag you can assign which parser to use for a given
|
||||||
# extension. Doxygen has a built-in mapping, but you can override or extend it
|
# extension. Doxygen has a built-in mapping, but you can override or extend it
|
||||||
# using this tag. The format is ext=language, where ext is a file extension, and
|
# using this tag. The format is ext=language, where ext is a file extension, and
|
||||||
# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
|
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
|
||||||
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
|
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
|
||||||
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
|
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
|
||||||
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
|
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
|
||||||
# tries to guess whether the code is fixed or free formatted code, this is the
|
# tries to guess whether the code is fixed or free formatted code, this is the
|
||||||
# default for Fortran type files). For instance to make doxygen treat .inc files
|
# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
|
||||||
# as Fortran files (default is PHP), and .f files as C (default is Fortran),
|
# .inc files as Fortran files (default is PHP), and .f files as C (default is
|
||||||
# use: inc=Fortran f=C.
|
# Fortran), use: inc=Fortran f=C.
|
||||||
#
|
#
|
||||||
# Note: For files without extension you can use no_extension as a placeholder.
|
# Note: For files without extension you can use no_extension as a placeholder.
|
||||||
#
|
#
|
||||||
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
|
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
|
||||||
# the files are not read by doxygen. When specifying no_extension you should add
|
# the files are not read by doxygen.
|
||||||
# * to the FILE_PATTERNS.
|
|
||||||
#
|
|
||||||
# Note see also the list of default file extension mappings.
|
|
||||||
|
|
||||||
EXTENSION_MAPPING =
|
EXTENSION_MAPPING =
|
||||||
|
|
||||||
@@ -460,19 +455,6 @@ TYPEDEF_HIDES_STRUCT = NO
|
|||||||
|
|
||||||
LOOKUP_CACHE_SIZE = 3
|
LOOKUP_CACHE_SIZE = 3
|
||||||
|
|
||||||
# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
|
|
||||||
# during processing. When set to 0 doxygen will based this on the number of
|
|
||||||
# cores available in the system. You can set it explicitly to a value larger
|
|
||||||
# than 0 to get more control over the balance between CPU load and processing
|
|
||||||
# speed. At this moment only the input processing can be done using multiple
|
|
||||||
# threads. Since this is still an experimental feature the default is set to 1,
|
|
||||||
# which efficively disables parallel processing. Please report any issues you
|
|
||||||
# encounter. Generating dot graphs in parallel is controlled by the
|
|
||||||
# DOT_NUM_THREADS setting.
|
|
||||||
# Minimum value: 0, maximum value: 32, default value: 1.
|
|
||||||
|
|
||||||
NUM_PROC_THREADS = 1
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Build related configuration options
|
# Build related configuration options
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
@@ -536,13 +518,6 @@ EXTRACT_LOCAL_METHODS = NO
|
|||||||
|
|
||||||
EXTRACT_ANON_NSPACES = NO
|
EXTRACT_ANON_NSPACES = NO
|
||||||
|
|
||||||
# If this flag is set to YES, the name of an unnamed parameter in a declaration
|
|
||||||
# will be determined by the corresponding definition. By default unnamed
|
|
||||||
# parameters remain unnamed in the output.
|
|
||||||
# The default value is: YES.
|
|
||||||
|
|
||||||
RESOLVE_UNNAMED_PARAMS = YES
|
|
||||||
|
|
||||||
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
|
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
|
||||||
# undocumented members inside documented classes or files. If set to NO these
|
# undocumented members inside documented classes or files. If set to NO these
|
||||||
# members will be included in the various overviews, but no documentation
|
# members will be included in the various overviews, but no documentation
|
||||||
@@ -560,8 +535,8 @@ HIDE_UNDOC_MEMBERS = NO
|
|||||||
HIDE_UNDOC_CLASSES = NO
|
HIDE_UNDOC_CLASSES = NO
|
||||||
|
|
||||||
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
|
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
|
||||||
# declarations. If set to NO, these declarations will be included in the
|
# (class|struct|union) declarations. If set to NO, these declarations will be
|
||||||
# documentation.
|
# included in the documentation.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
HIDE_FRIEND_COMPOUNDS = NO
|
HIDE_FRIEND_COMPOUNDS = NO
|
||||||
@@ -580,18 +555,11 @@ HIDE_IN_BODY_DOCS = NO
|
|||||||
|
|
||||||
INTERNAL_DOCS = YES
|
INTERNAL_DOCS = YES
|
||||||
|
|
||||||
# With the correct setting of option CASE_SENSE_NAMES doxygen will better be
|
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
|
||||||
# able to match the capabilities of the underlying filesystem. In case the
|
# names in lower-case letters. If set to YES, upper-case letters are also
|
||||||
# filesystem is case sensitive (i.e. it supports files in the same directory
|
# allowed. This is useful if you have classes or files whose names only differ
|
||||||
# whose names only differ in casing), the option must be set to YES to properly
|
# in case and if your file system supports case sensitive file names. Windows
|
||||||
# deal with such files in case they appear in the input. For filesystems that
|
# (including Cygwin) ands Mac users are advised to set this option to NO.
|
||||||
# are not case sensitive the option should be be set to NO to properly deal with
|
|
||||||
# output files written for symbols that only differ in casing, such as for two
|
|
||||||
# classes, one named CLASS and the other named Class, and to also support
|
|
||||||
# references to files without having to specify the exact matching casing. On
|
|
||||||
# Windows (including Cygwin) and MacOS, users should typically set this option
|
|
||||||
# to NO, whereas on Linux or other Unix flavors it should typically be set to
|
|
||||||
# YES.
|
|
||||||
# The default value is: system dependent.
|
# The default value is: system dependent.
|
||||||
|
|
||||||
CASE_SENSE_NAMES = YES
|
CASE_SENSE_NAMES = YES
|
||||||
@@ -830,10 +798,7 @@ WARN_IF_DOC_ERROR = YES
|
|||||||
WARN_NO_PARAMDOC = NO
|
WARN_NO_PARAMDOC = NO
|
||||||
|
|
||||||
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
|
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
|
||||||
# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
|
# a warning is encountered.
|
||||||
# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
|
|
||||||
# at the end of the doxygen process doxygen will return with a non-zero status.
|
|
||||||
# Possible values are: NO, YES and FAIL_ON_WARNINGS.
|
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
|
|
||||||
WARN_AS_ERROR = NO
|
WARN_AS_ERROR = NO
|
||||||
@@ -875,8 +840,8 @@ INPUT = doxygen.main.h \
|
|||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
|
||||||
# documentation (see:
|
# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
|
||||||
# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
|
# possible encodings.
|
||||||
# The default value is: UTF-8.
|
# The default value is: UTF-8.
|
||||||
|
|
||||||
INPUT_ENCODING = UTF-8
|
INPUT_ENCODING = UTF-8
|
||||||
@@ -889,15 +854,11 @@ INPUT_ENCODING = UTF-8
|
|||||||
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
|
||||||
# read by doxygen.
|
# read by doxygen.
|
||||||
#
|
#
|
||||||
# Note the list of default checked file patterns might differ from the list of
|
|
||||||
# default file extension mappings.
|
|
||||||
#
|
|
||||||
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
|
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
|
||||||
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
|
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
|
||||||
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
|
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
|
||||||
# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
|
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
|
||||||
# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl,
|
# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
|
||||||
# *.ucf, *.qsf and *.ice.
|
|
||||||
|
|
||||||
FILE_PATTERNS =
|
FILE_PATTERNS =
|
||||||
|
|
||||||
@@ -1125,6 +1086,13 @@ VERBATIM_HEADERS = YES
|
|||||||
|
|
||||||
ALPHABETICAL_INDEX = YES
|
ALPHABETICAL_INDEX = YES
|
||||||
|
|
||||||
|
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
|
||||||
|
# which the alphabetical index list will be split.
|
||||||
|
# Minimum value: 1, maximum value: 20, default value: 5.
|
||||||
|
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
|
||||||
|
|
||||||
|
COLS_IN_ALPHA_INDEX = 5
|
||||||
|
|
||||||
# In case all classes in a project start with a common prefix, all classes will
|
# In case all classes in a project start with a common prefix, all classes will
|
||||||
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
|
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
|
||||||
# can be used to specify a prefix (or a list of prefixes) that should be ignored
|
# can be used to specify a prefix (or a list of prefixes) that should be ignored
|
||||||
@@ -1263,9 +1231,9 @@ HTML_TIMESTAMP = YES
|
|||||||
|
|
||||||
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
|
||||||
# documentation will contain a main index with vertical navigation menus that
|
# documentation will contain a main index with vertical navigation menus that
|
||||||
# are dynamically created via JavaScript. If disabled, the navigation index will
|
# are dynamically created via Javascript. If disabled, the navigation index will
|
||||||
# consists of multiple levels of tabs that are statically embedded in every HTML
|
# consists of multiple levels of tabs that are statically embedded in every HTML
|
||||||
# page. Disable this option to support browsers that do not have JavaScript,
|
# page. Disable this option to support browsers that do not have Javascript,
|
||||||
# like the Qt help browser.
|
# like the Qt help browser.
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||||
@@ -1295,11 +1263,10 @@ HTML_INDEX_NUM_ENTRIES = 100
|
|||||||
|
|
||||||
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
|
||||||
# generated that can be used as input for Apple's Xcode 3 integrated development
|
# generated that can be used as input for Apple's Xcode 3 integrated development
|
||||||
# environment (see:
|
# environment (see: https://developer.apple.com/xcode/), introduced with OSX
|
||||||
# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
|
# 10.5 (Leopard). To create a documentation set, doxygen will generate a
|
||||||
# create a documentation set, doxygen will generate a Makefile in the HTML
|
# Makefile in the HTML output directory. Running make will produce the docset in
|
||||||
# output directory. Running make will produce the docset in that directory and
|
# that directory and running make install will install the docset in
|
||||||
# running make install will install the docset in
|
|
||||||
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
|
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
|
||||||
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
|
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
|
||||||
# genXcode/_index.html for more information.
|
# genXcode/_index.html for more information.
|
||||||
@@ -1341,8 +1308,8 @@ DOCSET_PUBLISHER_NAME = Publisher
|
|||||||
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
|
||||||
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
|
||||||
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
|
||||||
# (see:
|
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
|
||||||
# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows.
|
# Windows.
|
||||||
#
|
#
|
||||||
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
# The HTML Help Workshop contains a compiler that can convert all HTML output
|
||||||
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
|
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
|
||||||
@@ -1372,7 +1339,7 @@ CHM_FILE = blender.chm
|
|||||||
HHC_LOCATION = "C:/Program Files (x86)/HTML Help Workshop/hhc.exe"
|
HHC_LOCATION = "C:/Program Files (x86)/HTML Help Workshop/hhc.exe"
|
||||||
|
|
||||||
# The GENERATE_CHI flag controls if a separate .chi index file is generated
|
# The GENERATE_CHI flag controls if a separate .chi index file is generated
|
||||||
# (YES) or that it should be included in the main .chm file (NO).
|
# (YES) or that it should be included in the master .chm file (NO).
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
|
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
|
||||||
|
|
||||||
@@ -1417,8 +1384,7 @@ QCH_FILE =
|
|||||||
|
|
||||||
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
|
||||||
# Project output. For more information please see Qt Help Project / Namespace
|
# Project output. For more information please see Qt Help Project / Namespace
|
||||||
# (see:
|
# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
|
||||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
|
|
||||||
# The default value is: org.doxygen.Project.
|
# The default value is: org.doxygen.Project.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
@@ -1426,8 +1392,8 @@ QHP_NAMESPACE = org.doxygen.Project
|
|||||||
|
|
||||||
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
|
||||||
# Help Project output. For more information please see Qt Help Project / Virtual
|
# Help Project output. For more information please see Qt Help Project / Virtual
|
||||||
# Folders (see:
|
# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
|
||||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
|
# folders).
|
||||||
# The default value is: doc.
|
# The default value is: doc.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
@@ -1435,16 +1401,16 @@ QHP_VIRTUAL_FOLDER = doc
|
|||||||
|
|
||||||
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
|
||||||
# filter to add. For more information please see Qt Help Project / Custom
|
# filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see:
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
|
||||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
|
# filters).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_CUST_FILTER_NAME =
|
QHP_CUST_FILTER_NAME =
|
||||||
|
|
||||||
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
|
||||||
# custom filter to add. For more information please see Qt Help Project / Custom
|
# custom filter to add. For more information please see Qt Help Project / Custom
|
||||||
# Filters (see:
|
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
|
||||||
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
|
# filters).
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHP_CUST_FILTER_ATTRS =
|
QHP_CUST_FILTER_ATTRS =
|
||||||
@@ -1456,9 +1422,9 @@ QHP_CUST_FILTER_ATTRS =
|
|||||||
|
|
||||||
QHP_SECT_FILTER_ATTRS =
|
QHP_SECT_FILTER_ATTRS =
|
||||||
|
|
||||||
# The QHG_LOCATION tag can be used to specify the location (absolute path
|
# The QHG_LOCATION tag can be used to specify the location of Qt's
|
||||||
# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to
|
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
|
||||||
# run qhelpgenerator on the generated .qhp file.
|
# generated .qhp file.
|
||||||
# This tag requires that the tag GENERATE_QHP is set to YES.
|
# This tag requires that the tag GENERATE_QHP is set to YES.
|
||||||
|
|
||||||
QHG_LOCATION =
|
QHG_LOCATION =
|
||||||
@@ -1535,17 +1501,6 @@ TREEVIEW_WIDTH = 246
|
|||||||
|
|
||||||
EXT_LINKS_IN_WINDOW = NO
|
EXT_LINKS_IN_WINDOW = NO
|
||||||
|
|
||||||
# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
|
|
||||||
# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
|
|
||||||
# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
|
|
||||||
# the HTML output. These images will generally look nicer at scaled resolutions.
|
|
||||||
# Possible values are: png (the default) and svg (looks nicer but requires the
|
|
||||||
# pdf2svg or inkscape tool).
|
|
||||||
# The default value is: png.
|
|
||||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
|
||||||
|
|
||||||
HTML_FORMULA_FORMAT = png
|
|
||||||
|
|
||||||
# Use this tag to change the font size of LaTeX formulas included as images in
|
# Use this tag to change the font size of LaTeX formulas included as images in
|
||||||
# the HTML documentation. When you change the font size after a successful
|
# the HTML documentation. When you change the font size after a successful
|
||||||
# doxygen run you need to manually remove any form_*.png images from the HTML
|
# doxygen run you need to manually remove any form_*.png images from the HTML
|
||||||
@@ -1566,14 +1521,8 @@ FORMULA_FONTSIZE = 10
|
|||||||
|
|
||||||
FORMULA_TRANSPARENT = YES
|
FORMULA_TRANSPARENT = YES
|
||||||
|
|
||||||
# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
|
|
||||||
# to create new LaTeX commands to be used in formulas as building blocks. See
|
|
||||||
# the section "Including formulas" for details.
|
|
||||||
|
|
||||||
FORMULA_MACROFILE =
|
|
||||||
|
|
||||||
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
||||||
# https://www.mathjax.org) which uses client side JavaScript for the rendering
|
# https://www.mathjax.org) which uses client side Javascript for the rendering
|
||||||
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
|
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
|
||||||
# installed or if you want to formulas look prettier in the HTML output. When
|
# installed or if you want to formulas look prettier in the HTML output. When
|
||||||
# enabled you may also need to install MathJax separately and configure the path
|
# enabled you may also need to install MathJax separately and configure the path
|
||||||
@@ -1585,7 +1534,7 @@ USE_MATHJAX = NO
|
|||||||
|
|
||||||
# When MathJax is enabled you can set the default output format to be used for
|
# When MathJax is enabled you can set the default output format to be used for
|
||||||
# the MathJax output. See the MathJax site (see:
|
# the MathJax output. See the MathJax site (see:
|
||||||
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details.
|
# http://docs.mathjax.org/en/latest/output.html) for more details.
|
||||||
# Possible values are: HTML-CSS (which is slower, but has the best
|
# Possible values are: HTML-CSS (which is slower, but has the best
|
||||||
# compatibility), NativeMML (i.e. MathML) and SVG.
|
# compatibility), NativeMML (i.e. MathML) and SVG.
|
||||||
# The default value is: HTML-CSS.
|
# The default value is: HTML-CSS.
|
||||||
@@ -1601,7 +1550,7 @@ MATHJAX_FORMAT = HTML-CSS
|
|||||||
# Content Delivery Network so you can quickly see the result without installing
|
# Content Delivery Network so you can quickly see the result without installing
|
||||||
# MathJax. However, it is strongly recommended to install a local copy of
|
# MathJax. However, it is strongly recommended to install a local copy of
|
||||||
# MathJax from https://www.mathjax.org before deployment.
|
# MathJax from https://www.mathjax.org before deployment.
|
||||||
# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
|
# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
|
||||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||||
|
|
||||||
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
|
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
|
||||||
@@ -1615,8 +1564,7 @@ MATHJAX_EXTENSIONS =
|
|||||||
|
|
||||||
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
|
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
|
||||||
# of code that will be used on startup of the MathJax code. See the MathJax site
|
# of code that will be used on startup of the MathJax code. See the MathJax site
|
||||||
# (see:
|
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
|
||||||
# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
|
|
||||||
# example see the documentation.
|
# example see the documentation.
|
||||||
# This tag requires that the tag USE_MATHJAX is set to YES.
|
# This tag requires that the tag USE_MATHJAX is set to YES.
|
||||||
|
|
||||||
@@ -1644,7 +1592,7 @@ MATHJAX_CODEFILE =
|
|||||||
SEARCHENGINE = NO
|
SEARCHENGINE = NO
|
||||||
|
|
||||||
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
|
||||||
# implemented using a web server instead of a web client using JavaScript. There
|
# implemented using a web server instead of a web client using Javascript. There
|
||||||
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
|
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
|
||||||
# setting. When disabled, doxygen will generate a PHP script for searching and
|
# setting. When disabled, doxygen will generate a PHP script for searching and
|
||||||
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
|
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
|
||||||
@@ -1663,8 +1611,7 @@ SERVER_BASED_SEARCH = NO
|
|||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see:
|
# Xapian (see: https://xapian.org/).
|
||||||
# https://xapian.org/).
|
|
||||||
#
|
#
|
||||||
# See the section "External Indexing and Searching" for details.
|
# See the section "External Indexing and Searching" for details.
|
||||||
# The default value is: NO.
|
# The default value is: NO.
|
||||||
@@ -1677,9 +1624,8 @@ EXTERNAL_SEARCH = NO
|
|||||||
#
|
#
|
||||||
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
# Doxygen ships with an example indexer (doxyindexer) and search engine
|
||||||
# (doxysearch.cgi) which are based on the open source search engine library
|
# (doxysearch.cgi) which are based on the open source search engine library
|
||||||
# Xapian (see:
|
# Xapian (see: https://xapian.org/). See the section "External Indexing and
|
||||||
# https://xapian.org/). See the section "External Indexing and Searching" for
|
# Searching" for details.
|
||||||
# details.
|
|
||||||
# This tag requires that the tag SEARCHENGINE is set to YES.
|
# This tag requires that the tag SEARCHENGINE is set to YES.
|
||||||
|
|
||||||
SEARCHENGINE_URL =
|
SEARCHENGINE_URL =
|
||||||
@@ -1843,11 +1789,9 @@ LATEX_EXTRA_FILES =
|
|||||||
|
|
||||||
PDF_HYPERLINKS = NO
|
PDF_HYPERLINKS = NO
|
||||||
|
|
||||||
# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
|
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
|
||||||
# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
|
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
|
||||||
# files. Set this option to YES, to get a higher quality PDF documentation.
|
# higher quality PDF documentation.
|
||||||
#
|
|
||||||
# See also section LATEX_CMD_NAME for selecting the engine.
|
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
# This tag requires that the tag GENERATE_LATEX is set to YES.
|
||||||
|
|
||||||
@@ -2182,8 +2126,7 @@ INCLUDE_FILE_PATTERNS =
|
|||||||
# recursively expanded use the := operator instead of the = operator.
|
# recursively expanded use the := operator instead of the = operator.
|
||||||
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
|
||||||
|
|
||||||
PREDEFINED = BUILD_DATE \
|
PREDEFINED = BUILD_DATE
|
||||||
DOXYGEN=1
|
|
||||||
|
|
||||||
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
|
||||||
# tag can be used to specify a list of macro names that should be expanded. The
|
# tag can be used to specify a list of macro names that should be expanded. The
|
||||||
@@ -2360,31 +2303,9 @@ UML_LOOK = YES
|
|||||||
# but if the number exceeds 15, the total amount of fields shown is limited to
|
# but if the number exceeds 15, the total amount of fields shown is limited to
|
||||||
# 10.
|
# 10.
|
||||||
# Minimum value: 0, maximum value: 100, default value: 10.
|
# Minimum value: 0, maximum value: 100, default value: 10.
|
||||||
# This tag requires that the tag UML_LOOK is set to YES.
|
|
||||||
|
|
||||||
UML_LIMIT_NUM_FIELDS = 10
|
|
||||||
|
|
||||||
# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and
|
|
||||||
# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
|
|
||||||
# tag is set to YES, doxygen will add type and arguments for attributes and
|
|
||||||
# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen
|
|
||||||
# will not generate fields with class member information in the UML graphs. The
|
|
||||||
# class diagrams will look similar to the default class diagrams but using UML
|
|
||||||
# notation for the relationships.
|
|
||||||
# Possible values are: NO, YES and NONE.
|
|
||||||
# The default value is: NO.
|
|
||||||
# This tag requires that the tag UML_LOOK is set to YES.
|
|
||||||
|
|
||||||
DOT_UML_DETAILS = NO
|
|
||||||
|
|
||||||
# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
|
|
||||||
# to display on a single line. If the actual line length exceeds this threshold
|
|
||||||
# significantly it will wrapped across multiple lines. Some heuristics are apply
|
|
||||||
# to avoid ugly line breaks.
|
|
||||||
# Minimum value: 0, maximum value: 1000, default value: 17.
|
|
||||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
DOT_WRAP_THRESHOLD = 17
|
UML_LIMIT_NUM_FIELDS = 10
|
||||||
|
|
||||||
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
|
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
|
||||||
# collaboration graphs will show the relations between templates and their
|
# collaboration graphs will show the relations between templates and their
|
||||||
@@ -2575,11 +2496,9 @@ DOT_MULTI_TARGETS = YES
|
|||||||
|
|
||||||
GENERATE_LEGEND = YES
|
GENERATE_LEGEND = YES
|
||||||
|
|
||||||
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate
|
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
|
||||||
# files that are used to generate the various graphs.
|
# files that are used to generate the various graphs.
|
||||||
#
|
|
||||||
# Note: This setting is not only used for dot files but also for msc and
|
|
||||||
# plantuml temporary files.
|
|
||||||
# The default value is: YES.
|
# The default value is: YES.
|
||||||
|
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||||
|
|
||||||
DOT_CLEANUP = YES
|
DOT_CLEANUP = YES
|
||||||
|
@@ -29,7 +29,7 @@ with offscreen.bind():
|
|||||||
amount = 10
|
amount = 10
|
||||||
for i in range(-amount, amount + 1):
|
for i in range(-amount, amount + 1):
|
||||||
x_pos = i / amount
|
x_pos = i / amount
|
||||||
draw_circle_2d((x_pos, 0.0), (1, 1, 1, 1), 0.5, segments=200)
|
draw_circle_2d((x_pos, 0.0), (1, 1, 1, 1), 0.5, 200)
|
||||||
|
|
||||||
|
|
||||||
# Drawing the generated texture in 3D space
|
# Drawing the generated texture in 3D space
|
||||||
|
@@ -34,9 +34,7 @@ with offscreen.bind():
|
|||||||
for i in range(RING_AMOUNT):
|
for i in range(RING_AMOUNT):
|
||||||
draw_circle_2d(
|
draw_circle_2d(
|
||||||
(random.uniform(-1, 1), random.uniform(-1, 1)),
|
(random.uniform(-1, 1), random.uniform(-1, 1)),
|
||||||
(1, 1, 1, 1), random.uniform(0.1, 1),
|
(1, 1, 1, 1), random.uniform(0.1, 1), 20)
|
||||||
segments=20,
|
|
||||||
)
|
|
||||||
|
|
||||||
buffer = fb.read_color(0, 0, WIDTH, HEIGHT, 4, 0, 'UBYTE')
|
buffer = fb.read_color(0, 0, WIDTH, HEIGHT, 4, 0, 'UBYTE')
|
||||||
|
|
||||||
|
@@ -1,13 +1,2 @@
|
|||||||
sphinx==3.5.4
|
Sphinx==3.5.3
|
||||||
|
|
||||||
# Sphinx dependencies that are important
|
|
||||||
Jinja2==2.11.3
|
|
||||||
Pygments==2.9.0
|
|
||||||
docutils==0.16
|
|
||||||
snowballstemmer==2.1.0
|
|
||||||
babel==2.9.1
|
|
||||||
requests==2.25.1
|
|
||||||
|
|
||||||
# Only needed to match the theme used for the official documentation.
|
|
||||||
# Without this theme, the default theme will be used.
|
|
||||||
sphinx_rtd_theme==0.5.2
|
sphinx_rtd_theme==0.5.2
|
||||||
|
2
extern/mantaflow/preprocessed/gitinfo.h
vendored
2
extern/mantaflow/preprocessed/gitinfo.h
vendored
@@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
#define MANTA_GIT_VERSION "commit 8fbebe02459b7f72575872c20961f7cb757db408"
|
#define MANTA_GIT_VERSION "commit 9c505cd22e289b98c9aa717efba8ef3201c7e458"
|
||||||
|
13
extern/mantaflow/preprocessed/kernel.h
vendored
13
extern/mantaflow/preprocessed/kernel.h
vendored
@@ -71,19 +71,6 @@ class ParticleBase;
|
|||||||
for (int j = bnd; j < (grid).getSizeY() - bnd; ++j) \
|
for (int j = bnd; j < (grid).getSizeY() - bnd; ++j) \
|
||||||
for (int i = bnd; i < (grid).getSizeX() - bnd; ++i)
|
for (int i = bnd; i < (grid).getSizeX() - bnd; ++i)
|
||||||
|
|
||||||
#define FOR_NEIGHBORS_BND(grid, radius, bnd) \
|
|
||||||
for (int zj = ((grid).is3D() ? std::max(bnd, k - radius) : 0); \
|
|
||||||
zj <= ((grid).is3D() ? std::min(k + radius, (grid).getSizeZ() - 1 - bnd) : 0); \
|
|
||||||
zj++) \
|
|
||||||
for (int yj = std::max(bnd, j - radius); \
|
|
||||||
yj <= std::min(j + radius, (grid).getSizeY() - 1 - bnd); \
|
|
||||||
yj++) \
|
|
||||||
for (int xj = std::max(bnd, i - radius); \
|
|
||||||
xj <= std::min(i + radius, (grid).getSizeX() - 1 - bnd); \
|
|
||||||
xj++)
|
|
||||||
|
|
||||||
#define FOR_NEIGHBORS(grid, radius) FOR_NEIGHBORS_BND(grid, radius, 0)
|
|
||||||
|
|
||||||
//! Basic data structure for kernel data, initialized based on kernel type (e.g. single, idx, etc).
|
//! Basic data structure for kernel data, initialized based on kernel type (e.g. single, idx, etc).
|
||||||
struct KernelBase {
|
struct KernelBase {
|
||||||
int maxX, maxY, maxZ, minZ, maxT, minT;
|
int maxX, maxY, maxZ, minZ, maxT, minT;
|
||||||
|
92
extern/mantaflow/preprocessed/plugin/flip.cpp
vendored
92
extern/mantaflow/preprocessed/plugin/flip.cpp
vendored
@@ -822,29 +822,33 @@ struct ComputeUnionLevelsetPindex : public KernelBase {
|
|||||||
{
|
{
|
||||||
const Vec3 gridPos = Vec3(i, j, k) + Vec3(0.5); // shifted by half cell
|
const Vec3 gridPos = Vec3(i, j, k) + Vec3(0.5); // shifted by half cell
|
||||||
Real phiv = radius * 1.0; // outside
|
Real phiv = radius * 1.0; // outside
|
||||||
const int r = int(radius) + 1;
|
|
||||||
|
|
||||||
FOR_NEIGHBORS(phi, r)
|
int r = int(radius) + 1;
|
||||||
{
|
int rZ = phi.is3D() ? r : 0;
|
||||||
|
for (int zj = k - rZ; zj <= k + rZ; zj++)
|
||||||
|
for (int yj = j - r; yj <= j + r; yj++)
|
||||||
|
for (int xj = i - r; xj <= i + r; xj++) {
|
||||||
|
if (!phi.isInBounds(Vec3i(xj, yj, zj)))
|
||||||
|
continue;
|
||||||
|
|
||||||
// note, for the particle indices in indexSys the access is periodic (ie, dont skip for eg
|
// note, for the particle indices in indexSys the access is periodic (ie, dont skip for
|
||||||
// inBounds(sx,10,10)
|
// eg inBounds(sx,10,10)
|
||||||
IndexInt isysIdxS = index.index(xj, yj, zj);
|
IndexInt isysIdxS = index.index(xj, yj, zj);
|
||||||
IndexInt pStart = index(isysIdxS), pEnd = 0;
|
IndexInt pStart = index(isysIdxS), pEnd = 0;
|
||||||
if (phi.isInBounds(isysIdxS + 1))
|
if (phi.isInBounds(isysIdxS + 1))
|
||||||
pEnd = index(isysIdxS + 1);
|
pEnd = index(isysIdxS + 1);
|
||||||
else
|
else
|
||||||
pEnd = indexSys.size();
|
pEnd = indexSys.size();
|
||||||
|
|
||||||
// now loop over particles in cell
|
// now loop over particles in cell
|
||||||
for (IndexInt p = pStart; p < pEnd; ++p) {
|
for (IndexInt p = pStart; p < pEnd; ++p) {
|
||||||
const int psrc = indexSys[p].sourceIndex;
|
const int psrc = indexSys[p].sourceIndex;
|
||||||
if (ptype && ((*ptype)[psrc] & exclude))
|
if (ptype && ((*ptype)[psrc] & exclude))
|
||||||
continue;
|
continue;
|
||||||
const Vec3 pos = parts[psrc].pos;
|
const Vec3 pos = parts[psrc].pos;
|
||||||
phiv = std::min(phiv, fabs(norm(gridPos - pos)) - radius);
|
phiv = std::min(phiv, fabs(norm(gridPos - pos)) - radius);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
phi(i, j, k) = phiv;
|
phi(i, j, k) = phiv;
|
||||||
}
|
}
|
||||||
inline const Grid<int> &getArg0()
|
inline const Grid<int> &getArg0()
|
||||||
@@ -1022,35 +1026,39 @@ struct ComputeAveragedLevelsetWeight : public KernelBase {
|
|||||||
|
|
||||||
// loop over neighborhood, similar to ComputeUnionLevelsetPindex
|
// loop over neighborhood, similar to ComputeUnionLevelsetPindex
|
||||||
const Real sradiusInv = 1. / (4. * radius * radius);
|
const Real sradiusInv = 1. / (4. * radius * radius);
|
||||||
const int r = int(radius) + 1;
|
int r = int(1. * radius) + 1;
|
||||||
|
int rZ = phi.is3D() ? r : 0;
|
||||||
// accumulators
|
// accumulators
|
||||||
Real wacc = 0.;
|
Real wacc = 0.;
|
||||||
Vec3 pacc = Vec3(0.);
|
Vec3 pacc = Vec3(0.);
|
||||||
Real racc = 0.;
|
Real racc = 0.;
|
||||||
|
|
||||||
FOR_NEIGHBORS(phi, r)
|
for (int zj = k - rZ; zj <= k + rZ; zj++)
|
||||||
{
|
for (int yj = j - r; yj <= j + r; yj++)
|
||||||
|
for (int xj = i - r; xj <= i + r; xj++) {
|
||||||
|
if (!phi.isInBounds(Vec3i(xj, yj, zj)))
|
||||||
|
continue;
|
||||||
|
|
||||||
IndexInt isysIdxS = index.index(xj, yj, zj);
|
IndexInt isysIdxS = index.index(xj, yj, zj);
|
||||||
IndexInt pStart = index(isysIdxS), pEnd = 0;
|
IndexInt pStart = index(isysIdxS), pEnd = 0;
|
||||||
if (phi.isInBounds(isysIdxS + 1))
|
if (phi.isInBounds(isysIdxS + 1))
|
||||||
pEnd = index(isysIdxS + 1);
|
pEnd = index(isysIdxS + 1);
|
||||||
else
|
else
|
||||||
pEnd = indexSys.size();
|
pEnd = indexSys.size();
|
||||||
for (IndexInt p = pStart; p < pEnd; ++p) {
|
for (IndexInt p = pStart; p < pEnd; ++p) {
|
||||||
IndexInt psrc = indexSys[p].sourceIndex;
|
IndexInt psrc = indexSys[p].sourceIndex;
|
||||||
if (ptype && ((*ptype)[psrc] & exclude))
|
if (ptype && ((*ptype)[psrc] & exclude))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Vec3 pos = parts[psrc].pos;
|
Vec3 pos = parts[psrc].pos;
|
||||||
Real s = normSquare(gridPos - pos) * sradiusInv;
|
Real s = normSquare(gridPos - pos) * sradiusInv;
|
||||||
// Real w = std::max(0., cubed(1.-s) );
|
// Real w = std::max(0., cubed(1.-s) );
|
||||||
Real w = std::max(0., (1. - s)); // a bit smoother
|
Real w = std::max(0., (1. - s)); // a bit smoother
|
||||||
wacc += w;
|
wacc += w;
|
||||||
racc += radius * w;
|
racc += radius * w;
|
||||||
pacc += pos * w;
|
pacc += pos * w;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wacc > VECTOR_EPSILON) {
|
if (wacc > VECTOR_EPSILON) {
|
||||||
racc /= wacc;
|
racc /= wacc;
|
||||||
|
@@ -234,10 +234,10 @@ void subdivideMesh(
|
|||||||
normalize(ne2);
|
normalize(ne2);
|
||||||
|
|
||||||
// Real thisArea = sqrMag(cross(-e2,e0));
|
// Real thisArea = sqrMag(cross(-e2,e0));
|
||||||
// small angle approximation says sin(x) = arcsin(x) = x,
|
// small angle approximation says sin(x) = arcsin(x) = x,
|
||||||
// arccos(x) = pi/2 - arcsin(x),
|
// arccos(x) = pi/2 - arcsin(x),
|
||||||
// cos(x) = dot(A,B),
|
// cos(x) = dot(A,B),
|
||||||
// so angle is approximately 1 - dot(A,B).
|
// so angle is approximately 1 - dot(A,B).
|
||||||
Real angle[3];
|
Real angle[3];
|
||||||
angle[0] = 1.0 - dot(ne0, -ne2);
|
angle[0] = 1.0 - dot(ne0, -ne2);
|
||||||
angle[1] = 1.0 - dot(ne1, -ne0);
|
angle[1] = 1.0 - dot(ne1, -ne0);
|
||||||
|
@@ -2287,9 +2287,10 @@ struct knFlipComputePotentialTrappedAir : public KernelBase {
|
|||||||
const Vec3 &vj = scaleFromManta * v.getCentered(x, y, z);
|
const Vec3 &vj = scaleFromManta * v.getCentered(x, y, z);
|
||||||
const Vec3 xij = xi - xj;
|
const Vec3 xij = xi - xj;
|
||||||
const Vec3 vij = vi - vj;
|
const Vec3 vij = vi - vj;
|
||||||
Real h = !pot.is3D() ? 1.414 * radius :
|
Real h = !pot.is3D() ?
|
||||||
1.732 * radius; // estimate sqrt(2)*radius resp. sqrt(3)*radius
|
1.414 * radius :
|
||||||
// for h, due to squared resp. cubic neighbor area
|
1.732 * radius; // estimate sqrt(2)*radius resp. sqrt(3)*radius for h, due
|
||||||
|
// to squared resp. cubic neighbor area
|
||||||
vdiff += norm(vij) * (1 - dot(getNormalized(vij), getNormalized(xij))) *
|
vdiff += norm(vij) * (1 - dot(getNormalized(vij), getNormalized(xij))) *
|
||||||
(1 - norm(xij) / h);
|
(1 - norm(xij) / h);
|
||||||
}
|
}
|
||||||
|
@@ -79,15 +79,15 @@ typedef struct CLG_IDFilter {
|
|||||||
} CLG_IDFilter;
|
} CLG_IDFilter;
|
||||||
|
|
||||||
typedef struct CLogContext {
|
typedef struct CLogContext {
|
||||||
/** Single linked list of types. */
|
/** Single linked list of types. */
|
||||||
CLG_LogType *types;
|
CLG_LogType *types;
|
||||||
/** Single linked list of references. */
|
/** Single linked list of references. */
|
||||||
CLG_LogRef *refs;
|
CLG_LogRef *refs;
|
||||||
#ifdef WITH_CLOG_PTHREADS
|
#ifdef WITH_CLOG_PTHREADS
|
||||||
pthread_mutex_t types_lock;
|
pthread_mutex_t types_lock;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* exclude, include filters. */
|
/* exclude, include filters. */
|
||||||
CLG_IDFilter *filters[2];
|
CLG_IDFilter *filters[2];
|
||||||
bool use_color;
|
bool use_color;
|
||||||
bool use_basename;
|
bool use_basename;
|
||||||
|
@@ -51,12 +51,12 @@ CCL_NAMESPACE_BEGIN
|
|||||||
/* XML reading state */
|
/* XML reading state */
|
||||||
|
|
||||||
struct XMLReadState : public XMLReader {
|
struct XMLReadState : public XMLReader {
|
||||||
Scene *scene; /* Scene pointer. */
|
Scene *scene; /* scene pointer */
|
||||||
Transform tfm; /* Current transform state. */
|
Transform tfm; /* current transform state */
|
||||||
bool smooth; /* Smooth normal state. */
|
bool smooth; /* smooth normal state */
|
||||||
Shader *shader; /* Current shader. */
|
Shader *shader; /* current shader */
|
||||||
string base; /* Base path to current file. */
|
string base; /* base path to current file*/
|
||||||
float dicing_rate; /* Current dicing rate. */
|
float dicing_rate; /* current dicing rate */
|
||||||
|
|
||||||
XMLReadState() : scene(NULL), smooth(false), shader(NULL), dicing_rate(1.0f)
|
XMLReadState() : scene(NULL), smooth(false), shader(NULL), dicing_rate(1.0f)
|
||||||
{
|
{
|
||||||
@@ -385,7 +385,7 @@ static Mesh *xml_add_mesh(Scene *scene, const Transform &tfm)
|
|||||||
Mesh *mesh = new Mesh();
|
Mesh *mesh = new Mesh();
|
||||||
scene->geometry.push_back(mesh);
|
scene->geometry.push_back(mesh);
|
||||||
|
|
||||||
/* Create object. */
|
/* create object*/
|
||||||
Object *object = new Object();
|
Object *object = new Object();
|
||||||
object->set_geometry(mesh);
|
object->set_geometry(mesh);
|
||||||
object->set_tfm(tfm);
|
object->set_tfm(tfm);
|
||||||
|
@@ -132,7 +132,7 @@ def init():
|
|||||||
_workaround_buggy_drivers()
|
_workaround_buggy_drivers()
|
||||||
|
|
||||||
path = os.path.dirname(__file__)
|
path = os.path.dirname(__file__)
|
||||||
user_path = os.path.dirname(os.path.abspath(bpy.utils.user_resource('CONFIG', path='')))
|
user_path = os.path.dirname(os.path.abspath(bpy.utils.user_resource('CONFIG', '')))
|
||||||
|
|
||||||
_cycles.init(path, user_path, bpy.app.background)
|
_cycles.init(path, user_path, bpy.app.background)
|
||||||
_parse_command_line()
|
_parse_command_line()
|
||||||
|
@@ -1254,19 +1254,12 @@ class CyclesObjectSettings(bpy.types.PropertyGroup):
|
|||||||
)
|
)
|
||||||
|
|
||||||
shadow_terminator_offset: FloatProperty(
|
shadow_terminator_offset: FloatProperty(
|
||||||
name="Shadow Terminator Shading Offset",
|
name="Shadow Terminator Offset",
|
||||||
description="Push the shadow terminator towards the light to hide artifacts on low poly geometry",
|
description="Push the shadow terminator towards the light to hide artifacts on low poly geometry",
|
||||||
min=0.0, max=1.0,
|
min=0.0, max=1.0,
|
||||||
default=0.0,
|
default=0.0,
|
||||||
)
|
)
|
||||||
|
|
||||||
shadow_terminator_geometry_offset: FloatProperty(
|
|
||||||
name="Shadow Terminator Geometry Offset",
|
|
||||||
description="Offset rays from the surface to reduce shadow terminator artifact on low poly geometry. Only affects triangles at grazing angles to light",
|
|
||||||
min=0.0, max=1.0,
|
|
||||||
default=0.1,
|
|
||||||
)
|
|
||||||
|
|
||||||
is_shadow_catcher: BoolProperty(
|
is_shadow_catcher: BoolProperty(
|
||||||
name="Shadow Catcher",
|
name="Shadow Catcher",
|
||||||
description="Only render shadows on this object, for compositing renders into real footage",
|
description="Only render shadows on this object, for compositing renders into real footage",
|
||||||
|
@@ -821,11 +821,6 @@ class CYCLES_RENDER_PT_filter(CyclesButtonsPanel, Panel):
|
|||||||
col.prop(view_layer, "use_strand", text="Hair")
|
col.prop(view_layer, "use_strand", text="Hair")
|
||||||
col.prop(view_layer, "use_volumes", text="Volumes")
|
col.prop(view_layer, "use_volumes", text="Volumes")
|
||||||
|
|
||||||
col = layout.column(heading="Use")
|
|
||||||
sub = col.row()
|
|
||||||
sub.prop(view_layer, "use_motion_blur", text="Motion Blur")
|
|
||||||
sub.active = rd.use_motion_blur
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_override(CyclesButtonsPanel, Panel):
|
class CYCLES_RENDER_PT_override(CyclesButtonsPanel, Panel):
|
||||||
bl_label = "Override"
|
bl_label = "Override"
|
||||||
@@ -1223,31 +1218,20 @@ class CYCLES_OBJECT_PT_shading(CyclesButtonsPanel, Panel):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
if not CyclesButtonsPanel.poll(context):
|
return CyclesButtonsPanel.poll(context) and (context.object)
|
||||||
return False
|
|
||||||
|
|
||||||
ob = context.object
|
|
||||||
return ob and has_geometry_visibility(ob)
|
|
||||||
|
|
||||||
def draw(self, context):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_shading_shadow_terminator(CyclesButtonsPanel, Panel):
|
|
||||||
bl_label = "Shadow Terminator"
|
|
||||||
bl_parent_id = "CYCLES_OBJECT_PT_shading"
|
|
||||||
bl_context = "object"
|
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.use_property_split = True
|
layout.use_property_split = True
|
||||||
|
|
||||||
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=True)
|
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
|
||||||
|
layout = self.layout
|
||||||
ob = context.object
|
ob = context.object
|
||||||
cob = ob.cycles
|
cob = ob.cycles
|
||||||
flow.prop(cob, "shadow_terminator_geometry_offset", text="Geometry Offset")
|
|
||||||
flow.prop(cob, "shadow_terminator_offset", text="Shading Offset")
|
if has_geometry_visibility(ob):
|
||||||
|
col = flow.column()
|
||||||
|
col.prop(cob, "shadow_terminator_offset")
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
|
class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
|
||||||
@@ -2327,7 +2311,6 @@ classes = (
|
|||||||
CYCLES_PT_context_material,
|
CYCLES_PT_context_material,
|
||||||
CYCLES_OBJECT_PT_motion_blur,
|
CYCLES_OBJECT_PT_motion_blur,
|
||||||
CYCLES_OBJECT_PT_shading,
|
CYCLES_OBJECT_PT_shading,
|
||||||
CYCLES_OBJECT_PT_shading_shadow_terminator,
|
|
||||||
CYCLES_OBJECT_PT_visibility,
|
CYCLES_OBJECT_PT_visibility,
|
||||||
CYCLES_OBJECT_PT_visibility_ray_visibility,
|
CYCLES_OBJECT_PT_visibility_ray_visibility,
|
||||||
CYCLES_OBJECT_PT_visibility_culling,
|
CYCLES_OBJECT_PT_visibility_culling,
|
||||||
|
@@ -533,7 +533,7 @@ void BlenderSync::sync_particle_hair(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Extract particle hair data - should be combined with connecting to mesh later. */
|
/* extract particle hair data - should be combined with connecting to mesh later*/
|
||||||
|
|
||||||
ParticleCurveData CData;
|
ParticleCurveData CData;
|
||||||
|
|
||||||
|
@@ -34,17 +34,12 @@ void BlenderSync::sync_light(BL::Object &b_parent,
|
|||||||
bool *use_portal)
|
bool *use_portal)
|
||||||
{
|
{
|
||||||
/* test if we need to sync */
|
/* test if we need to sync */
|
||||||
|
Light *light;
|
||||||
ObjectKey key(b_parent, persistent_id, b_ob_instance, false);
|
ObjectKey key(b_parent, persistent_id, b_ob_instance, false);
|
||||||
BL::Light b_light(b_ob.data());
|
BL::Light b_light(b_ob.data());
|
||||||
|
|
||||||
Light *light = light_map.find(key);
|
|
||||||
|
|
||||||
/* Check if the transform was modified, in case a linked collection is moved we do not get a
|
|
||||||
* specific depsgraph update (T88515). This also mimics the behavior for Objects. */
|
|
||||||
const bool tfm_updated = (light && light->get_tfm() != tfm);
|
|
||||||
|
|
||||||
/* Update if either object or light data changed. */
|
/* Update if either object or light data changed. */
|
||||||
if (!light_map.add_or_update(&light, b_ob, b_parent, key) && !tfm_updated) {
|
if (!light_map.add_or_update(&light, b_ob, b_parent, key)) {
|
||||||
Shader *shader;
|
Shader *shader;
|
||||||
if (!shader_map.add_or_update(&shader, b_light)) {
|
if (!shader_map.add_or_update(&shader, b_light)) {
|
||||||
if (light->get_is_portal())
|
if (light->get_is_portal())
|
||||||
|
@@ -290,12 +290,8 @@ Object *BlenderSync::sync_object(BL::Depsgraph &b_depsgraph,
|
|||||||
bool is_shadow_catcher = get_boolean(cobject, "is_shadow_catcher");
|
bool is_shadow_catcher = get_boolean(cobject, "is_shadow_catcher");
|
||||||
object->set_is_shadow_catcher(is_shadow_catcher);
|
object->set_is_shadow_catcher(is_shadow_catcher);
|
||||||
|
|
||||||
float shadow_terminator_shading_offset = get_float(cobject, "shadow_terminator_offset");
|
float shadow_terminator_offset = get_float(cobject, "shadow_terminator_offset");
|
||||||
object->set_shadow_terminator_shading_offset(shadow_terminator_shading_offset);
|
object->set_shadow_terminator_offset(shadow_terminator_offset);
|
||||||
|
|
||||||
float shadow_terminator_geometry_offset = get_float(cobject,
|
|
||||||
"shadow_terminator_geometry_offset");
|
|
||||||
object->set_shadow_terminator_geometry_offset(shadow_terminator_geometry_offset);
|
|
||||||
|
|
||||||
/* sync the asset name for Cryptomatte */
|
/* sync the asset name for Cryptomatte */
|
||||||
BL::Object parent = b_ob.parent();
|
BL::Object parent = b_ob.parent();
|
||||||
|
@@ -289,10 +289,11 @@ static PyObject *render_func(PyObject * /*self*/, PyObject *args)
|
|||||||
RNA_pointer_create(NULL, &RNA_Depsgraph, (ID *)PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
RNA_pointer_create(NULL, &RNA_Depsgraph, (ID *)PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||||
BL::Depsgraph b_depsgraph(depsgraphptr);
|
BL::Depsgraph b_depsgraph(depsgraphptr);
|
||||||
|
|
||||||
/* Allow Blender to execute other Python scripts. */
|
/* Allow Blender to execute other Python scripts, and isolate TBB tasks so we
|
||||||
|
* don't get deadlocks with Blender threads accessing shared data like images. */
|
||||||
python_thread_state_save(&session->python_thread_state);
|
python_thread_state_save(&session->python_thread_state);
|
||||||
|
|
||||||
session->render(b_depsgraph);
|
tbb::this_task_arena::isolate([&] { session->render(b_depsgraph); });
|
||||||
|
|
||||||
python_thread_state_restore(&session->python_thread_state);
|
python_thread_state_restore(&session->python_thread_state);
|
||||||
|
|
||||||
@@ -329,7 +330,8 @@ static PyObject *bake_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
python_thread_state_save(&session->python_thread_state);
|
python_thread_state_save(&session->python_thread_state);
|
||||||
|
|
||||||
session->bake(b_depsgraph, b_object, pass_type, pass_filter, width, height);
|
tbb::this_task_arena::isolate(
|
||||||
|
[&] { session->bake(b_depsgraph, b_object, pass_type, pass_filter, width, height); });
|
||||||
|
|
||||||
python_thread_state_restore(&session->python_thread_state);
|
python_thread_state_restore(&session->python_thread_state);
|
||||||
|
|
||||||
@@ -375,7 +377,7 @@ static PyObject *reset_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
python_thread_state_save(&session->python_thread_state);
|
python_thread_state_save(&session->python_thread_state);
|
||||||
|
|
||||||
session->reset_session(b_data, b_depsgraph);
|
tbb::this_task_arena::isolate([&] { session->reset_session(b_data, b_depsgraph); });
|
||||||
|
|
||||||
python_thread_state_restore(&session->python_thread_state);
|
python_thread_state_restore(&session->python_thread_state);
|
||||||
|
|
||||||
@@ -397,7 +399,7 @@ static PyObject *sync_func(PyObject * /*self*/, PyObject *args)
|
|||||||
|
|
||||||
python_thread_state_save(&session->python_thread_state);
|
python_thread_state_save(&session->python_thread_state);
|
||||||
|
|
||||||
session->synchronize(b_depsgraph);
|
tbb::this_task_arena::isolate([&] { session->synchronize(b_depsgraph); });
|
||||||
|
|
||||||
python_thread_state_restore(&session->python_thread_state);
|
python_thread_state_restore(&session->python_thread_state);
|
||||||
|
|
||||||
|
@@ -281,6 +281,7 @@ void BlenderSync::sync_data(BL::RenderSettings &b_render,
|
|||||||
|
|
||||||
void BlenderSync::sync_integrator()
|
void BlenderSync::sync_integrator()
|
||||||
{
|
{
|
||||||
|
BL::RenderSettings r = b_scene.render();
|
||||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||||
|
|
||||||
experimental = (get_enum(cscene, "feature_set") != 0);
|
experimental = (get_enum(cscene, "feature_set") != 0);
|
||||||
@@ -324,7 +325,7 @@ void BlenderSync::sync_integrator()
|
|||||||
integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct"));
|
integrator->set_sample_clamp_direct(get_float(cscene, "sample_clamp_direct"));
|
||||||
integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
|
integrator->set_sample_clamp_indirect(get_float(cscene, "sample_clamp_indirect"));
|
||||||
if (!preview) {
|
if (!preview) {
|
||||||
integrator->set_motion_blur(view_layer.use_motion_blur);
|
integrator->set_motion_blur(r.use_motion_blur());
|
||||||
}
|
}
|
||||||
|
|
||||||
integrator->set_method((Integrator::Method)get_enum(
|
integrator->set_method((Integrator::Method)get_enum(
|
||||||
@@ -455,8 +456,6 @@ void BlenderSync::sync_view_layer(BL::ViewLayer &b_view_layer)
|
|||||||
view_layer.use_surfaces = b_view_layer.use_solid() || scene->bake_manager->get_baking();
|
view_layer.use_surfaces = b_view_layer.use_solid() || scene->bake_manager->get_baking();
|
||||||
view_layer.use_hair = b_view_layer.use_strand();
|
view_layer.use_hair = b_view_layer.use_strand();
|
||||||
view_layer.use_volumes = b_view_layer.use_volumes();
|
view_layer.use_volumes = b_view_layer.use_volumes();
|
||||||
view_layer.use_motion_blur = b_view_layer.use_motion_blur() &&
|
|
||||||
b_scene.render().use_motion_blur();
|
|
||||||
|
|
||||||
/* Material override. */
|
/* Material override. */
|
||||||
view_layer.material_override = b_view_layer.material_override();
|
view_layer.material_override = b_view_layer.material_override();
|
||||||
@@ -603,10 +602,8 @@ vector<Pass> BlenderSync::sync_render_passes(BL::Scene &b_scene,
|
|||||||
for (BL::RenderPass &b_pass : b_rlay.passes) {
|
for (BL::RenderPass &b_pass : b_rlay.passes) {
|
||||||
PassType pass_type = get_pass_type(b_pass);
|
PassType pass_type = get_pass_type(b_pass);
|
||||||
|
|
||||||
if (pass_type == PASS_MOTION &&
|
if (pass_type == PASS_MOTION && b_scene.render().use_motion_blur())
|
||||||
(b_view_layer.use_motion_blur() && b_scene.render().use_motion_blur())) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
if (pass_type != PASS_NONE)
|
if (pass_type != PASS_NONE)
|
||||||
Pass::add(pass_type, passes, b_pass.name().c_str());
|
Pass::add(pass_type, passes, b_pass.name().c_str());
|
||||||
}
|
}
|
||||||
|
@@ -246,7 +246,6 @@ class BlenderSync {
|
|||||||
use_surfaces(true),
|
use_surfaces(true),
|
||||||
use_hair(true),
|
use_hair(true),
|
||||||
use_volumes(true),
|
use_volumes(true),
|
||||||
use_motion_blur(true),
|
|
||||||
samples(0),
|
samples(0),
|
||||||
bound_samples(false)
|
bound_samples(false)
|
||||||
{
|
{
|
||||||
@@ -259,7 +258,6 @@ class BlenderSync {
|
|||||||
bool use_surfaces;
|
bool use_surfaces;
|
||||||
bool use_hair;
|
bool use_hair;
|
||||||
bool use_volumes;
|
bool use_volumes;
|
||||||
bool use_motion_blur;
|
|
||||||
int samples;
|
int samples;
|
||||||
bool bound_samples;
|
bool bound_samples;
|
||||||
} view_layer;
|
} view_layer;
|
||||||
|
@@ -181,7 +181,7 @@ static void rtc_filter_occluded_func(const RTCFilterFunctionNArguments *args)
|
|||||||
/* record intersection */
|
/* record intersection */
|
||||||
ctx->local_isect->hits[hit_idx] = current_isect;
|
ctx->local_isect->hits[hit_idx] = current_isect;
|
||||||
ctx->local_isect->Ng[hit_idx] = normalize(make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z));
|
ctx->local_isect->Ng[hit_idx] = normalize(make_float3(hit->Ng_x, hit->Ng_y, hit->Ng_z));
|
||||||
/* This tells Embree to continue tracing. */
|
/* This tells Embree to continue tracing .*/
|
||||||
*args->valid = 0;
|
*args->valid = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -179,7 +179,7 @@ class InnerNode : public BVHNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: This function is only used during binary BVH builder, and it
|
/* NOTE: This function is only used during binary BVH builder, and it
|
||||||
* supposed to be configured to have 2 children which will be filled-in in a
|
* supposed to be configured to have 2 children which will be filled in in a
|
||||||
* bit. But this is important to have children reset to NULL. */
|
* bit. But this is important to have children reset to NULL. */
|
||||||
explicit InnerNode(const BoundBox &bounds) : BVHNode(bounds), num_children_(0)
|
explicit InnerNode(const BoundBox &bounds) : BVHNode(bounds), num_children_(0)
|
||||||
{
|
{
|
||||||
|
@@ -297,7 +297,7 @@ struct BVHSpatialBin {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
struct BVHSpatialStorage {
|
struct BVHSpatialStorage {
|
||||||
/* Accumulated bounds when sweeping from right to left. */
|
/* Accumulated bounds when sweeping from right to left. */
|
||||||
vector<BoundBox> right_bounds;
|
vector<BoundBox> right_bounds;
|
||||||
|
|
||||||
/* Bins used for histogram when selecting best split plane. */
|
/* Bins used for histogram when selecting best split plane. */
|
||||||
|
@@ -388,7 +388,7 @@ void BVHSpatialSplit::split_curve_primitive(const Hair *hair,
|
|||||||
BoundBox &left_bounds,
|
BoundBox &left_bounds,
|
||||||
BoundBox &right_bounds)
|
BoundBox &right_bounds)
|
||||||
{
|
{
|
||||||
/* curve split: NOTE - Currently ignores curve width and needs to be fixed. */
|
/* curve split: NOTE - Currently ignores curve width and needs to be fixed.*/
|
||||||
Hair::Curve curve = hair->get_curve(prim_index);
|
Hair::Curve curve = hair->get_curve(prim_index);
|
||||||
const int k0 = curve.first_key + segment_index;
|
const int k0 = curve.first_key + segment_index;
|
||||||
const int k1 = k0 + 1;
|
const int k1 = k0 + 1;
|
||||||
|
@@ -1196,18 +1196,16 @@ class OptiXDevice : public CUDADevice {
|
|||||||
|
|
||||||
const CUDAContextScope scope(cuContext);
|
const CUDAContextScope scope(cuContext);
|
||||||
|
|
||||||
const bool use_fast_trace_bvh = (bvh->params.bvh_type == SceneParams::BVH_STATIC);
|
|
||||||
|
|
||||||
// Compute memory usage
|
// Compute memory usage
|
||||||
OptixAccelBufferSizes sizes = {};
|
OptixAccelBufferSizes sizes = {};
|
||||||
OptixAccelBuildOptions options = {};
|
OptixAccelBuildOptions options = {};
|
||||||
options.operation = operation;
|
options.operation = operation;
|
||||||
if (use_fast_trace_bvh) {
|
if (background) {
|
||||||
VLOG(2) << "Using fast to trace OptiX BVH";
|
// Prefer best performance and lowest memory consumption in background
|
||||||
options.buildFlags = OPTIX_BUILD_FLAG_PREFER_FAST_TRACE | OPTIX_BUILD_FLAG_ALLOW_COMPACTION;
|
options.buildFlags = OPTIX_BUILD_FLAG_PREFER_FAST_TRACE | OPTIX_BUILD_FLAG_ALLOW_COMPACTION;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
VLOG(2) << "Using fast to update OptiX BVH";
|
// Prefer fast updates in viewport
|
||||||
options.buildFlags = OPTIX_BUILD_FLAG_PREFER_FAST_BUILD | OPTIX_BUILD_FLAG_ALLOW_UPDATE;
|
options.buildFlags = OPTIX_BUILD_FLAG_PREFER_FAST_BUILD | OPTIX_BUILD_FLAG_ALLOW_UPDATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1255,16 +1253,15 @@ class OptiXDevice : public CUDADevice {
|
|||||||
out_data.device_pointer,
|
out_data.device_pointer,
|
||||||
sizes.outputSizeInBytes,
|
sizes.outputSizeInBytes,
|
||||||
&out_handle,
|
&out_handle,
|
||||||
use_fast_trace_bvh ? &compacted_size_prop : NULL,
|
background ? &compacted_size_prop : NULL,
|
||||||
use_fast_trace_bvh ? 1 : 0));
|
background ? 1 : 0));
|
||||||
bvh->traversable_handle = static_cast<uint64_t>(out_handle);
|
bvh->traversable_handle = static_cast<uint64_t>(out_handle);
|
||||||
|
|
||||||
// Wait for all operations to finish
|
// Wait for all operations to finish
|
||||||
check_result_cuda_ret(cuStreamSynchronize(NULL));
|
check_result_cuda_ret(cuStreamSynchronize(NULL));
|
||||||
|
|
||||||
// Compact acceleration structure to save memory (only if using fast trace as the
|
// Compact acceleration structure to save memory (do not do this in viewport for faster builds)
|
||||||
// OPTIX_BUILD_FLAG_ALLOW_COMPACTION flag is only set in this case).
|
if (background) {
|
||||||
if (use_fast_trace_bvh) {
|
|
||||||
uint64_t compacted_size = sizes.outputSizeInBytes;
|
uint64_t compacted_size = sizes.outputSizeInBytes;
|
||||||
check_result_cuda_ret(
|
check_result_cuda_ret(
|
||||||
cuMemcpyDtoH(&compacted_size, compacted_size_prop.result, sizeof(compacted_size)));
|
cuMemcpyDtoH(&compacted_size, compacted_size_prop.result, sizeof(compacted_size)));
|
||||||
@@ -1309,8 +1306,6 @@ class OptiXDevice : public CUDADevice {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool use_fast_trace_bvh = (bvh->params.bvh_type == SceneParams::BVH_STATIC);
|
|
||||||
|
|
||||||
free_bvh_memory_delayed();
|
free_bvh_memory_delayed();
|
||||||
|
|
||||||
BVHOptiX *const bvh_optix = static_cast<BVHOptiX *>(bvh);
|
BVHOptiX *const bvh_optix = static_cast<BVHOptiX *>(bvh);
|
||||||
@@ -1320,10 +1315,10 @@ class OptiXDevice : public CUDADevice {
|
|||||||
if (!bvh->params.top_level) {
|
if (!bvh->params.top_level) {
|
||||||
assert(bvh->objects.size() == 1 && bvh->geometry.size() == 1);
|
assert(bvh->objects.size() == 1 && bvh->geometry.size() == 1);
|
||||||
|
|
||||||
|
// Refit is only possible in viewport for now (because AS is built with
|
||||||
|
// OPTIX_BUILD_FLAG_ALLOW_UPDATE only there, see above)
|
||||||
OptixBuildOperation operation = OPTIX_BUILD_OPERATION_BUILD;
|
OptixBuildOperation operation = OPTIX_BUILD_OPERATION_BUILD;
|
||||||
/* Refit is only possible when using fast to trace BVH (because AS is built with
|
if (refit && !background) {
|
||||||
* OPTIX_BUILD_FLAG_ALLOW_UPDATE only there, see above). */
|
|
||||||
if (refit && !use_fast_trace_bvh) {
|
|
||||||
assert(bvh_optix->traversable_handle != 0);
|
assert(bvh_optix->traversable_handle != 0);
|
||||||
operation = OPTIX_BUILD_OPERATION_UPDATE;
|
operation = OPTIX_BUILD_OPERATION_UPDATE;
|
||||||
}
|
}
|
||||||
|
@@ -65,7 +65,7 @@ class DenoiseParams {
|
|||||||
/* Viewport start sample. */
|
/* Viewport start sample. */
|
||||||
int start_sample;
|
int start_sample;
|
||||||
|
|
||||||
/** Native Denoiser. */
|
/** Native Denoiser **/
|
||||||
|
|
||||||
/* Pixel radius for neighboring pixels to take into account. */
|
/* Pixel radius for neighboring pixels to take into account. */
|
||||||
int radius;
|
int radius;
|
||||||
@@ -81,7 +81,7 @@ class DenoiseParams {
|
|||||||
/* Clamp the input to the range of +-1e8. Should be enough for any legitimate data. */
|
/* Clamp the input to the range of +-1e8. Should be enough for any legitimate data. */
|
||||||
bool clamp_input;
|
bool clamp_input;
|
||||||
|
|
||||||
/** OIDN/Optix Denoiser. */
|
/** OIDN/Optix Denoiser **/
|
||||||
|
|
||||||
/* Passes handed over to the OIDN/OptiX denoiser (default to color + albedo). */
|
/* Passes handed over to the OIDN/OptiX denoiser (default to color + albedo). */
|
||||||
DenoiserInput input_passes;
|
DenoiserInput input_passes;
|
||||||
|
@@ -1186,7 +1186,7 @@ bool OpenCLInfo::get_device_extensions(cl_device_id device_id,
|
|||||||
{
|
{
|
||||||
size_t extension_length = 0;
|
size_t extension_length = 0;
|
||||||
cl_int err;
|
cl_int err;
|
||||||
/* Determine the size of the extension string. */
|
/* Determine the size of the extension string*/
|
||||||
if ((err = clGetDeviceInfo(device_id, CL_DEVICE_EXTENSIONS, 0, 0, &extension_length)) !=
|
if ((err = clGetDeviceInfo(device_id, CL_DEVICE_EXTENSIONS, 0, 0, &extension_length)) !=
|
||||||
CL_SUCCESS) {
|
CL_SUCCESS) {
|
||||||
if (error != NULL) {
|
if (error != NULL) {
|
||||||
|
@@ -116,7 +116,7 @@ CCL_NAMESPACE_BEGIN
|
|||||||
# endif
|
# endif
|
||||||
# endif /* __SHADOW_RECORD_ALL__ */
|
# endif /* __SHADOW_RECORD_ALL__ */
|
||||||
|
|
||||||
/* Record all intersections - Volume BVH traversal. */
|
/* Record all intersections - Volume BVH traversal */
|
||||||
|
|
||||||
# if defined(__VOLUME_RECORD_ALL__)
|
# if defined(__VOLUME_RECORD_ALL__)
|
||||||
# define BVH_FUNCTION_NAME bvh_intersect_volume_all
|
# define BVH_FUNCTION_NAME bvh_intersect_volume_all
|
||||||
|
@@ -71,87 +71,6 @@ ccl_device_inline float3 ray_offset(float3 P, float3 Ng)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function should be used to compute a modified ray start position for
|
|
||||||
* rays leaving from a surface. The algorithm slightly distorts flat surface
|
|
||||||
* of a triangle. Surface is lifted by amount h along normal n in the incident
|
|
||||||
* point. */
|
|
||||||
|
|
||||||
ccl_device_inline float3 smooth_surface_offset(KernelGlobals *kg, ShaderData *sd, float3 Ng)
|
|
||||||
{
|
|
||||||
float3 V[3], N[3];
|
|
||||||
triangle_vertices_and_normals(kg, sd->prim, V, N);
|
|
||||||
|
|
||||||
const float u = sd->u, v = sd->v;
|
|
||||||
const float w = 1 - u - v;
|
|
||||||
float3 P = V[0] * u + V[1] * v + V[2] * w; /* Local space */
|
|
||||||
float3 n = N[0] * u + N[1] * v + N[2] * w; /* We get away without normalization */
|
|
||||||
|
|
||||||
n = normalize(
|
|
||||||
transform_direction_transposed_auto(&sd->ob_itfm, n)); /* Normal x scale, world space */
|
|
||||||
|
|
||||||
/* Parabolic approximation */
|
|
||||||
float a = dot(N[2] - N[0], V[0] - V[2]);
|
|
||||||
float b = dot(N[2] - N[1], V[1] - V[2]);
|
|
||||||
float c = dot(N[1] - N[0], V[1] - V[0]);
|
|
||||||
float h = a * u * (u - 1) + (a + b + c) * u * v + b * v * (v - 1);
|
|
||||||
|
|
||||||
/* Check flipped normals */
|
|
||||||
if (dot(n, Ng) > 0) {
|
|
||||||
/* Local linear envelope */
|
|
||||||
float h0 = max(max(dot(V[1] - V[0], N[0]), dot(V[2] - V[0], N[0])), 0.0f);
|
|
||||||
float h1 = max(max(dot(V[0] - V[1], N[1]), dot(V[2] - V[1], N[1])), 0.0f);
|
|
||||||
float h2 = max(max(dot(V[0] - V[2], N[2]), dot(V[1] - V[2], N[2])), 0.0f);
|
|
||||||
h0 = max(dot(V[0] - P, N[0]) + h0, 0.0f);
|
|
||||||
h1 = max(dot(V[1] - P, N[1]) + h1, 0.0f);
|
|
||||||
h2 = max(dot(V[2] - P, N[2]) + h2, 0.0f);
|
|
||||||
h = max(min(min(h0, h1), h2), h * 0.5f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
float h0 = max(max(dot(V[0] - V[1], N[0]), dot(V[0] - V[2], N[0])), 0.0f);
|
|
||||||
float h1 = max(max(dot(V[1] - V[0], N[1]), dot(V[1] - V[2], N[1])), 0.0f);
|
|
||||||
float h2 = max(max(dot(V[2] - V[0], N[2]), dot(V[2] - V[1], N[2])), 0.0f);
|
|
||||||
h0 = max(dot(P - V[0], N[0]) + h0, 0.0f);
|
|
||||||
h1 = max(dot(P - V[1], N[1]) + h1, 0.0f);
|
|
||||||
h2 = max(dot(P - V[2], N[2]) + h2, 0.0f);
|
|
||||||
h = min(-min(min(h0, h1), h2), h * 0.5f);
|
|
||||||
}
|
|
||||||
|
|
||||||
return n * h;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ray offset to avoid shadow terminator artifact. */
|
|
||||||
|
|
||||||
ccl_device_inline float3 ray_offset_shadow(KernelGlobals *kg, ShaderData *sd, float3 L)
|
|
||||||
{
|
|
||||||
float NL = dot(sd->N, L);
|
|
||||||
bool transmit = (NL < 0.0f);
|
|
||||||
float3 Ng = (transmit ? -sd->Ng : sd->Ng);
|
|
||||||
float3 P = ray_offset(sd->P, Ng);
|
|
||||||
|
|
||||||
if ((sd->type & PRIMITIVE_ALL_TRIANGLE) && (sd->shader & SHADER_SMOOTH_NORMAL)) {
|
|
||||||
const float offset_cutoff =
|
|
||||||
kernel_tex_fetch(__objects, sd->object).shadow_terminator_geometry_offset;
|
|
||||||
/* Do ray offset (heavy stuff) only for close to be terminated triangles:
|
|
||||||
* offset_cutoff = 0.1f means that 10-20% of rays will be affected. Also
|
|
||||||
* make a smooth transition near the threshold. */
|
|
||||||
if (offset_cutoff > 0.0f) {
|
|
||||||
float NgL = dot(Ng, L);
|
|
||||||
float offset_amount = 0.0f;
|
|
||||||
if (NL < offset_cutoff) {
|
|
||||||
offset_amount = clamp(2.0f - (NgL + NL) / offset_cutoff, 0.0f, 1.0f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
offset_amount = clamp(1.0f - NgL / offset_cutoff, 0.0f, 1.0f);
|
|
||||||
}
|
|
||||||
if (offset_amount > 0.0f) {
|
|
||||||
P += smooth_surface_offset(kg, sd, Ng) * offset_amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return P;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__VOLUME_RECORD_ALL__) || (defined(__SHADOW_RECORD_ALL__) && defined(__KERNEL_CPU__))
|
#if defined(__VOLUME_RECORD_ALL__) || (defined(__SHADOW_RECORD_ALL__) && defined(__KERNEL_CPU__))
|
||||||
/* ToDo: Move to another file? */
|
/* ToDo: Move to another file? */
|
||||||
ccl_device int intersections_compare(const void *a, const void *b)
|
ccl_device int intersections_compare(const void *a, const void *b)
|
||||||
|
@@ -462,7 +462,7 @@ ccl_device_inline int bsdf_sample(KernelGlobals *kg,
|
|||||||
else {
|
else {
|
||||||
/* Shadow terminator offset. */
|
/* Shadow terminator offset. */
|
||||||
const float frequency_multiplier =
|
const float frequency_multiplier =
|
||||||
kernel_tex_fetch(__objects, sd->object).shadow_terminator_shading_offset;
|
kernel_tex_fetch(__objects, sd->object).shadow_terminator_offset;
|
||||||
if (frequency_multiplier > 1.0f) {
|
if (frequency_multiplier > 1.0f) {
|
||||||
*eval *= shift_cos_in(dot(*omega_in, sc->N), frequency_multiplier);
|
*eval *= shift_cos_in(dot(*omega_in, sc->N), frequency_multiplier);
|
||||||
}
|
}
|
||||||
@@ -488,9 +488,12 @@ ccl_device_inline
|
|||||||
const float3 omega_in,
|
const float3 omega_in,
|
||||||
float *pdf)
|
float *pdf)
|
||||||
{
|
{
|
||||||
|
/* For curves use the smooth normal, particularly for ribbons the geometric
|
||||||
|
* normal gives too much darkening otherwise. */
|
||||||
|
const float3 Ng = (sd->type & PRIMITIVE_ALL_CURVE) ? sd->N : sd->Ng;
|
||||||
float3 eval;
|
float3 eval;
|
||||||
|
|
||||||
if (dot(sd->N, omega_in) >= 0.0f) {
|
if (dot(Ng, omega_in) >= 0.0f) {
|
||||||
switch (sc->type) {
|
switch (sc->type) {
|
||||||
case CLOSURE_BSDF_DIFFUSE_ID:
|
case CLOSURE_BSDF_DIFFUSE_ID:
|
||||||
case CLOSURE_BSDF_BSSRDF_ID:
|
case CLOSURE_BSDF_BSSRDF_ID:
|
||||||
@@ -586,7 +589,7 @@ ccl_device_inline
|
|||||||
}
|
}
|
||||||
/* Shadow terminator offset. */
|
/* Shadow terminator offset. */
|
||||||
const float frequency_multiplier =
|
const float frequency_multiplier =
|
||||||
kernel_tex_fetch(__objects, sd->object).shadow_terminator_shading_offset;
|
kernel_tex_fetch(__objects, sd->object).shadow_terminator_offset;
|
||||||
if (frequency_multiplier > 1.0f) {
|
if (frequency_multiplier > 1.0f) {
|
||||||
eval *= shift_cos_in(dot(omega_in, sc->N), frequency_multiplier);
|
eval *= shift_cos_in(dot(omega_in, sc->N), frequency_multiplier);
|
||||||
}
|
}
|
||||||
|
@@ -61,8 +61,8 @@ ccl_device_forceinline float3 bsdf_ashikhmin_shirley_eval_reflect(const ShaderCl
|
|||||||
const MicrofacetBsdf *bsdf = (const MicrofacetBsdf *)sc;
|
const MicrofacetBsdf *bsdf = (const MicrofacetBsdf *)sc;
|
||||||
float3 N = bsdf->N;
|
float3 N = bsdf->N;
|
||||||
|
|
||||||
float NdotI = dot(N, I); /* in Cycles/OSL convention I is omega_out */
|
float NdotI = dot(N, I); /* in Cycles/OSL convention I is omega_out */
|
||||||
float NdotO = dot(N, omega_in); /* and consequently we use for O omaga_in ;) */
|
float NdotO = dot(N, omega_in); /* and consequently we use for O omaga_in ;) */
|
||||||
|
|
||||||
float out = 0.0f;
|
float out = 0.0f;
|
||||||
|
|
||||||
|
@@ -66,7 +66,7 @@ ccl_device_noinline void motion_triangle_shader_setup(
|
|||||||
sd->P = motion_triangle_refine_local(kg, sd, isect, ray, verts);
|
sd->P = motion_triangle_refine_local(kg, sd, isect, ray, verts);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* __BVH_LOCAL__*/
|
#endif /* __BVH_LOCAL__*/
|
||||||
{
|
{
|
||||||
sd->P = motion_triangle_refine(kg, sd, isect, ray, verts);
|
sd->P = motion_triangle_refine(kg, sd, isect, ray, verts);
|
||||||
}
|
}
|
||||||
|
@@ -138,7 +138,7 @@ ccl_device_inline float4 primitive_surface_attribute_float4(KernelGlobals *kg,
|
|||||||
ccl_device_inline bool primitive_is_volume_attribute(const ShaderData *sd,
|
ccl_device_inline bool primitive_is_volume_attribute(const ShaderData *sd,
|
||||||
const AttributeDescriptor desc)
|
const AttributeDescriptor desc)
|
||||||
{
|
{
|
||||||
return sd->type == PRIMITIVE_VOLUME;
|
return (sd->object != OBJECT_NONE && desc.element == ATTR_ELEMENT_VOXEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ccl_device_inline float primitive_volume_attribute_float(KernelGlobals *kg,
|
ccl_device_inline float primitive_volume_attribute_float(KernelGlobals *kg,
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
/* Normal on triangle. */
|
/* normal on triangle */
|
||||||
ccl_device_inline float3 triangle_normal(KernelGlobals *kg, ShaderData *sd)
|
ccl_device_inline float3 triangle_normal(KernelGlobals *kg, ShaderData *sd)
|
||||||
{
|
{
|
||||||
/* load triangle vertices */
|
/* load triangle vertices */
|
||||||
@@ -40,7 +40,7 @@ ccl_device_inline float3 triangle_normal(KernelGlobals *kg, ShaderData *sd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Point and normal on triangle. */
|
/* point and normal on triangle */
|
||||||
ccl_device_inline void triangle_point_normal(
|
ccl_device_inline void triangle_point_normal(
|
||||||
KernelGlobals *kg, int object, int prim, float u, float v, float3 *P, float3 *Ng, int *shader)
|
KernelGlobals *kg, int object, int prim, float u, float v, float3 *P, float3 *Ng, int *shader)
|
||||||
{
|
{
|
||||||
@@ -75,22 +75,6 @@ ccl_device_inline void triangle_vertices(KernelGlobals *kg, int prim, float3 P[3
|
|||||||
P[2] = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, tri_vindex.w + 2));
|
P[2] = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, tri_vindex.w + 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Triangle vertex locations and vertex normals */
|
|
||||||
|
|
||||||
ccl_device_inline void triangle_vertices_and_normals(KernelGlobals *kg,
|
|
||||||
int prim,
|
|
||||||
float3 P[3],
|
|
||||||
float3 N[3])
|
|
||||||
{
|
|
||||||
const uint4 tri_vindex = kernel_tex_fetch(__tri_vindex, prim);
|
|
||||||
P[0] = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, tri_vindex.w + 0));
|
|
||||||
P[1] = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, tri_vindex.w + 1));
|
|
||||||
P[2] = float4_to_float3(kernel_tex_fetch(__prim_tri_verts, tri_vindex.w + 2));
|
|
||||||
N[0] = float4_to_float3(kernel_tex_fetch(__tri_vnormal, tri_vindex.x));
|
|
||||||
N[1] = float4_to_float3(kernel_tex_fetch(__tri_vnormal, tri_vindex.y));
|
|
||||||
N[2] = float4_to_float3(kernel_tex_fetch(__tri_vnormal, tri_vindex.z));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Interpolate smooth vertex normal from vertices */
|
/* Interpolate smooth vertex normal from vertices */
|
||||||
|
|
||||||
ccl_device_inline float3
|
ccl_device_inline float3
|
||||||
|
@@ -72,22 +72,14 @@ ccl_device float4 volume_attribute_float4(KernelGlobals *kg,
|
|||||||
const ShaderData *sd,
|
const ShaderData *sd,
|
||||||
const AttributeDescriptor desc)
|
const AttributeDescriptor desc)
|
||||||
{
|
{
|
||||||
if (desc.element & (ATTR_ELEMENT_OBJECT | ATTR_ELEMENT_MESH)) {
|
/* todo: optimize this so we don't have to transform both here and in
|
||||||
return kernel_tex_fetch(__attributes_float3, desc.offset);
|
* kernel_tex_image_interp_3d when possible. Also could optimize for the
|
||||||
}
|
* common case where transform is translation/scale only. */
|
||||||
else if (desc.element == ATTR_ELEMENT_VOXEL) {
|
float3 P = sd->P;
|
||||||
/* todo: optimize this so we don't have to transform both here and in
|
object_inverse_position_transform(kg, sd, &P);
|
||||||
* kernel_tex_image_interp_3d when possible. Also could optimize for the
|
InterpolationType interp = (sd->flag & SD_VOLUME_CUBIC) ? INTERPOLATION_CUBIC :
|
||||||
* common case where transform is translation/scale only. */
|
INTERPOLATION_NONE;
|
||||||
float3 P = sd->P;
|
return kernel_tex_image_interp_3d(kg, desc.offset, P, interp);
|
||||||
object_inverse_position_transform(kg, sd, &P);
|
|
||||||
InterpolationType interp = (sd->flag & SD_VOLUME_CUBIC) ? INTERPOLATION_CUBIC :
|
|
||||||
INTERPOLATION_NONE;
|
|
||||||
return kernel_tex_image_interp_3d(kg, desc.offset, P, interp);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return make_float4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -176,7 +176,8 @@ ccl_device_noinline_cpu bool direct_emission(KernelGlobals *kg,
|
|||||||
|
|
||||||
if (ls->shader & SHADER_CAST_SHADOW) {
|
if (ls->shader & SHADER_CAST_SHADOW) {
|
||||||
/* setup ray */
|
/* setup ray */
|
||||||
ray->P = ray_offset_shadow(kg, sd, ls->D);
|
bool transmit = (dot(sd->Ng, ls->D) < 0.0f);
|
||||||
|
ray->P = ray_offset(sd->P, (transmit) ? -sd->Ng : sd->Ng);
|
||||||
|
|
||||||
if (ls->t == FLT_MAX) {
|
if (ls->t == FLT_MAX) {
|
||||||
/* distant light */
|
/* distant light */
|
||||||
|
@@ -64,7 +64,7 @@ typedef struct KernelGlobals {
|
|||||||
OSLThreadData *osl_tdata;
|
OSLThreadData *osl_tdata;
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* **** Run-time data **** */
|
/* **** Run-time data **** */
|
||||||
|
|
||||||
/* Heap-allocated storage for transparent shadows intersections. */
|
/* Heap-allocated storage for transparent shadows intersections. */
|
||||||
Intersection *transparent_shadow_intersections;
|
Intersection *transparent_shadow_intersections;
|
||||||
|
@@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
CCL_NAMESPACE_BEGIN
|
CCL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
/* Spherical coordinates <-> Cartesian direction. */
|
/* Spherical coordinates <-> Cartesian direction */
|
||||||
|
|
||||||
ccl_device float2 direction_to_spherical(float3 dir)
|
ccl_device float2 direction_to_spherical(float3 dir)
|
||||||
{
|
{
|
||||||
|
@@ -79,7 +79,7 @@ ccl_device void enqueue_ray_index_local(
|
|||||||
{
|
{
|
||||||
int lidx = ccl_local_id(1) * ccl_local_size(0) + ccl_local_id(0);
|
int lidx = ccl_local_id(1) * ccl_local_size(0) + ccl_local_id(0);
|
||||||
|
|
||||||
/* Get local queue id. */
|
/* Get local queue id .*/
|
||||||
unsigned int lqidx;
|
unsigned int lqidx;
|
||||||
if (enqueue_flag) {
|
if (enqueue_flag) {
|
||||||
lqidx = atomic_fetch_and_inc_uint32(local_queue_atomics);
|
lqidx = atomic_fetch_and_inc_uint32(local_queue_atomics);
|
||||||
|
@@ -274,7 +274,7 @@ ccl_device_inline void shader_setup_from_sample(KernelGlobals *kg,
|
|||||||
/* primitive */
|
/* primitive */
|
||||||
sd->object = object;
|
sd->object = object;
|
||||||
sd->lamp = LAMP_NONE;
|
sd->lamp = LAMP_NONE;
|
||||||
/* Currently no access to bvh prim index for strand sd->prim. */
|
/* currently no access to bvh prim index for strand sd->prim*/
|
||||||
sd->prim = prim;
|
sd->prim = prim;
|
||||||
sd->u = u;
|
sd->u = u;
|
||||||
sd->v = v;
|
sd->v = v;
|
||||||
@@ -1268,7 +1268,6 @@ ccl_device_inline void shader_eval_volume(KernelGlobals *kg,
|
|||||||
sd->num_closure_left = max_closures;
|
sd->num_closure_left = max_closures;
|
||||||
sd->flag = 0;
|
sd->flag = 0;
|
||||||
sd->object_flag = 0;
|
sd->object_flag = 0;
|
||||||
sd->type = PRIMITIVE_VOLUME;
|
|
||||||
|
|
||||||
for (int i = 0; stack[i].shader != SHADER_NONE; i++) {
|
for (int i = 0; stack[i].shader != SHADER_NONE; i++) {
|
||||||
/* setup shaderdata from stack. it's mostly setup already in
|
/* setup shaderdata from stack. it's mostly setup already in
|
||||||
|
@@ -409,7 +409,7 @@ ccl_device void subsurface_random_walk_coefficients(const ShaderClosure *sc,
|
|||||||
|
|
||||||
ccl_device_forceinline float eval_phase_dwivedi(float v, float phase_log, float cos_theta)
|
ccl_device_forceinline float eval_phase_dwivedi(float v, float phase_log, float cos_theta)
|
||||||
{
|
{
|
||||||
/* Eq. 9 from [2] using precomputed log((v + 1) / (v - 1)) */
|
/* Eq. 9 from [2] using precomputed log((v + 1) / (v - 1))*/
|
||||||
return 1.0f / ((v - cos_theta) * phase_log);
|
return 1.0f / ((v - cos_theta) * phase_log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -302,7 +302,7 @@ enum PathRayFlag {
|
|||||||
PATH_RAY_DIFFUSE_ANCESTOR = (1 << 15),
|
PATH_RAY_DIFFUSE_ANCESTOR = (1 << 15),
|
||||||
/* Single pass has been written. */
|
/* Single pass has been written. */
|
||||||
PATH_RAY_SINGLE_PASS_DONE = (1 << 16),
|
PATH_RAY_SINGLE_PASS_DONE = (1 << 16),
|
||||||
/* Ray is behind a shadow catcher. */
|
/* Ray is behind a shadow catcher .*/
|
||||||
PATH_RAY_SHADOW_CATCHER = (1 << 17),
|
PATH_RAY_SHADOW_CATCHER = (1 << 17),
|
||||||
/* Store shadow data for shadow catcher or denoising. */
|
/* Store shadow data for shadow catcher or denoising. */
|
||||||
PATH_RAY_STORE_SHADOW_INFO = (1 << 18),
|
PATH_RAY_STORE_SHADOW_INFO = (1 << 18),
|
||||||
@@ -689,24 +689,22 @@ typedef enum PrimitiveType {
|
|||||||
PRIMITIVE_MOTION_CURVE_THICK = (1 << 3),
|
PRIMITIVE_MOTION_CURVE_THICK = (1 << 3),
|
||||||
PRIMITIVE_CURVE_RIBBON = (1 << 4),
|
PRIMITIVE_CURVE_RIBBON = (1 << 4),
|
||||||
PRIMITIVE_MOTION_CURVE_RIBBON = (1 << 5),
|
PRIMITIVE_MOTION_CURVE_RIBBON = (1 << 5),
|
||||||
PRIMITIVE_VOLUME = (1 << 6),
|
|
||||||
/* Lamp primitive is not included below on purpose,
|
/* Lamp primitive is not included below on purpose,
|
||||||
* since it is no real traceable primitive.
|
* since it is no real traceable primitive.
|
||||||
*/
|
*/
|
||||||
PRIMITIVE_LAMP = (1 << 7),
|
PRIMITIVE_LAMP = (1 << 6),
|
||||||
|
|
||||||
PRIMITIVE_ALL_TRIANGLE = (PRIMITIVE_TRIANGLE | PRIMITIVE_MOTION_TRIANGLE),
|
PRIMITIVE_ALL_TRIANGLE = (PRIMITIVE_TRIANGLE | PRIMITIVE_MOTION_TRIANGLE),
|
||||||
PRIMITIVE_ALL_CURVE = (PRIMITIVE_CURVE_THICK | PRIMITIVE_MOTION_CURVE_THICK |
|
PRIMITIVE_ALL_CURVE = (PRIMITIVE_CURVE_THICK | PRIMITIVE_MOTION_CURVE_THICK |
|
||||||
PRIMITIVE_CURVE_RIBBON | PRIMITIVE_MOTION_CURVE_RIBBON),
|
PRIMITIVE_CURVE_RIBBON | PRIMITIVE_MOTION_CURVE_RIBBON),
|
||||||
PRIMITIVE_ALL_VOLUME = (PRIMITIVE_VOLUME),
|
|
||||||
PRIMITIVE_ALL_MOTION = (PRIMITIVE_MOTION_TRIANGLE | PRIMITIVE_MOTION_CURVE_THICK |
|
PRIMITIVE_ALL_MOTION = (PRIMITIVE_MOTION_TRIANGLE | PRIMITIVE_MOTION_CURVE_THICK |
|
||||||
PRIMITIVE_MOTION_CURVE_RIBBON),
|
PRIMITIVE_MOTION_CURVE_RIBBON),
|
||||||
PRIMITIVE_ALL = (PRIMITIVE_ALL_TRIANGLE | PRIMITIVE_ALL_CURVE | PRIMITIVE_ALL_VOLUME),
|
PRIMITIVE_ALL = (PRIMITIVE_ALL_TRIANGLE | PRIMITIVE_ALL_CURVE),
|
||||||
|
|
||||||
/* Total number of different traceable primitives.
|
/* Total number of different traceable primitives.
|
||||||
* NOTE: This is an actual value, not a bitflag.
|
* NOTE: This is an actual value, not a bitflag.
|
||||||
*/
|
*/
|
||||||
PRIMITIVE_NUM_TOTAL = 7,
|
PRIMITIVE_NUM_TOTAL = 6,
|
||||||
} PrimitiveType;
|
} PrimitiveType;
|
||||||
|
|
||||||
#define PRIMITIVE_PACK_SEGMENT(type, segment) ((segment << PRIMITIVE_NUM_TOTAL) | (type))
|
#define PRIMITIVE_PACK_SEGMENT(type, segment) ((segment << PRIMITIVE_NUM_TOTAL) | (type))
|
||||||
@@ -1481,8 +1479,7 @@ typedef struct KernelObject {
|
|||||||
float cryptomatte_object;
|
float cryptomatte_object;
|
||||||
float cryptomatte_asset;
|
float cryptomatte_asset;
|
||||||
|
|
||||||
float shadow_terminator_shading_offset;
|
float shadow_terminator_offset;
|
||||||
float shadow_terminator_geometry_offset;
|
|
||||||
float pad1, pad2, pad3;
|
float pad1, pad2, pad3;
|
||||||
} KernelObject;
|
} KernelObject;
|
||||||
static_assert_align(KernelObject, 16);
|
static_assert_align(KernelObject, 16);
|
||||||
|
@@ -317,4 +317,4 @@ class OSLRenderServices : public OSL::RendererServices {
|
|||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
|
||||||
#endif /* __OSL_SERVICES_H__ */
|
#endif /* __OSL_SERVICES_H__ */
|
||||||
|
@@ -49,7 +49,7 @@ void OSLShader::thread_init(KernelGlobals *kg,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Per thread kernel data init. */
|
/* per thread kernel data init*/
|
||||||
kg->osl = osl_globals;
|
kg->osl = osl_globals;
|
||||||
|
|
||||||
OSL::ShadingSystem *ss = kg->osl->ss;
|
OSL::ShadingSystem *ss = kg->osl->ss;
|
||||||
|
@@ -52,9 +52,6 @@ shader node_vector_math(string math_type = "add",
|
|||||||
else if (math_type == "faceforward") {
|
else if (math_type == "faceforward") {
|
||||||
Vector = compatible_faceforward(Vector1, Vector2, Vector3);
|
Vector = compatible_faceforward(Vector1, Vector2, Vector3);
|
||||||
}
|
}
|
||||||
else if (math_type == "multiply_add") {
|
|
||||||
Vector = Vector1 * Vector2 + Vector3;
|
|
||||||
}
|
|
||||||
else if (math_type == "dot_product") {
|
else if (math_type == "dot_product") {
|
||||||
Value = dot(Vector1, Vector2);
|
Value = dot(Vector1, Vector2);
|
||||||
}
|
}
|
||||||
|
@@ -68,7 +68,7 @@ typedef ccl_global struct SplitBranchedState {
|
|||||||
|
|
||||||
uint lcg_state;
|
uint lcg_state;
|
||||||
LocalIntersection ss_isect;
|
LocalIntersection ss_isect;
|
||||||
# endif /* __SUBSURFACE__ */
|
# endif /*__SUBSURFACE__ */
|
||||||
|
|
||||||
int shared_sample_count; /* number of branched samples shared with other threads */
|
int shared_sample_count; /* number of branched samples shared with other threads */
|
||||||
int original_ray; /* index of original ray when sharing branched samples */
|
int original_ray; /* index of original ray when sharing branched samples */
|
||||||
|
@@ -803,7 +803,7 @@ ccl_device void svm_node_closure_bsdf(KernelGlobals *kg,
|
|||||||
float melanin_redness = stack_load_float_default(
|
float melanin_redness = stack_load_float_default(
|
||||||
stack, melanin_redness_ofs, data_node2.w);
|
stack, melanin_redness_ofs, data_node2.w);
|
||||||
|
|
||||||
/* Randomize melanin. */
|
/* Randomize melanin. */
|
||||||
float random_color = stack_load_float_default(stack, random_color_ofs, data_node3.z);
|
float random_color = stack_load_float_default(stack, random_color_ofs, data_node3.z);
|
||||||
random_color = clamp(random_color, 0.0f, 1.0f);
|
random_color = clamp(random_color, 0.0f, 1.0f);
|
||||||
float factor_random_color = 1.0f + 2.0f * (random - 0.5f) * random_color;
|
float factor_random_color = 1.0f + 2.0f * (random - 0.5f) * random_color;
|
||||||
|
@@ -220,13 +220,11 @@ ccl_device void svm_node_hair_info(
|
|||||||
stack_store_float(stack, out_offset, data);
|
stack_store_float(stack, out_offset, data);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
# if 0
|
/*case NODE_INFO_CURVE_FADE: {
|
||||||
case NODE_INFO_CURVE_FADE: {
|
|
||||||
data = sd->curve_transparency;
|
data = sd->curve_transparency;
|
||||||
stack_store_float(stack, out_offset, data);
|
stack_store_float(stack, out_offset, data);
|
||||||
break;
|
break;
|
||||||
}
|
}*/
|
||||||
# endif
|
|
||||||
case NODE_INFO_CURVE_TANGENT_NORMAL: {
|
case NODE_INFO_CURVE_TANGENT_NORMAL: {
|
||||||
data3 = curve_tangent_normal(kg, sd);
|
data3 = curve_tangent_normal(kg, sd);
|
||||||
stack_store_float3(stack, out_offset, data3);
|
stack_store_float3(stack, out_offset, data3);
|
||||||
|
@@ -182,7 +182,7 @@ ccl_device void svm_node_tex_image_box(KernelGlobals *kg, ShaderData *sd, float
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Desperate mode, no valid choice anyway, fallback to one side. */
|
/* Desperate mode, no valid choice anyway, fallback to one side.*/
|
||||||
weight.x = 1.0f;
|
weight.x = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,8 +58,7 @@ ccl_device void svm_node_vector_math(KernelGlobals *kg,
|
|||||||
float3 vector;
|
float3 vector;
|
||||||
|
|
||||||
/* 3 Vector Operators */
|
/* 3 Vector Operators */
|
||||||
if (type == NODE_VECTOR_MATH_WRAP || type == NODE_VECTOR_MATH_FACEFORWARD ||
|
if (type == NODE_VECTOR_MATH_WRAP || type == NODE_VECTOR_MATH_FACEFORWARD) {
|
||||||
type == NODE_VECTOR_MATH_MULTIPLY_ADD) {
|
|
||||||
uint4 extra_node = read_node(kg, offset);
|
uint4 extra_node = read_node(kg, offset);
|
||||||
c = stack_load_float3(stack, extra_node.x);
|
c = stack_load_float3(stack, extra_node.x);
|
||||||
}
|
}
|
||||||
|
@@ -52,9 +52,6 @@ ccl_device void svm_vector_math(float *value,
|
|||||||
case NODE_VECTOR_MATH_FACEFORWARD:
|
case NODE_VECTOR_MATH_FACEFORWARD:
|
||||||
*vector = faceforward(a, b, c);
|
*vector = faceforward(a, b, c);
|
||||||
break;
|
break;
|
||||||
case NODE_VECTOR_MATH_MULTIPLY_ADD:
|
|
||||||
*vector = a * b + c;
|
|
||||||
break;
|
|
||||||
case NODE_VECTOR_MATH_DOT_PRODUCT:
|
case NODE_VECTOR_MATH_DOT_PRODUCT:
|
||||||
*value = dot(a, b);
|
*value = dot(a, b);
|
||||||
break;
|
break;
|
||||||
|
@@ -341,7 +341,6 @@ typedef enum NodeVectorMathType {
|
|||||||
NODE_VECTOR_MATH_TANGENT,
|
NODE_VECTOR_MATH_TANGENT,
|
||||||
NODE_VECTOR_MATH_REFRACT,
|
NODE_VECTOR_MATH_REFRACT,
|
||||||
NODE_VECTOR_MATH_FACEFORWARD,
|
NODE_VECTOR_MATH_FACEFORWARD,
|
||||||
NODE_VECTOR_MATH_MULTIPLY_ADD,
|
|
||||||
} NodeVectorMathType;
|
} NodeVectorMathType;
|
||||||
|
|
||||||
typedef enum NodeClampType {
|
typedef enum NodeClampType {
|
||||||
|
@@ -333,7 +333,7 @@ static M44d get_interpolated_matrix_for_time(const MatrixSampleMap &samples, chr
|
|||||||
|
|
||||||
chrono_t t = (time - prev_time) / (next_time - prev_time);
|
chrono_t t = (time - prev_time) / (next_time - prev_time);
|
||||||
|
|
||||||
/* Ensure rotation around the shortest angle. */
|
/* ensure rotation around the shortest angle */
|
||||||
if ((prev_rotation ^ next_rotation) < 0) {
|
if ((prev_rotation ^ next_rotation) < 0) {
|
||||||
next_rotation = -next_rotation;
|
next_rotation = -next_rotation;
|
||||||
}
|
}
|
||||||
|
@@ -736,14 +736,13 @@ static void process_uvs(CachedData &cache,
|
|||||||
const IV2fGeomParam::Sample &sample,
|
const IV2fGeomParam::Sample &sample,
|
||||||
double time)
|
double time)
|
||||||
{
|
{
|
||||||
if (scope != kFacevaryingScope && scope != kVaryingScope && scope != kVertexScope) {
|
if (scope != kFacevaryingScope) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const array<int> *uv_loops = cache.uv_loops.data_for_time_no_check(time).get_data_or_null();
|
const array<int> *uv_loops = cache.uv_loops.data_for_time_no_check(time).get_data_or_null();
|
||||||
|
|
||||||
/* It's ok to not have loop indices, as long as the scope is not face-varying. */
|
if (!uv_loops) {
|
||||||
if (!uv_loops && scope == kFacevaryingScope) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -767,27 +766,9 @@ static void process_uvs(CachedData &cache,
|
|||||||
const uint32_t *indices = sample.getIndices()->get();
|
const uint32_t *indices = sample.getIndices()->get();
|
||||||
const V2f *values = sample.getVals()->get();
|
const V2f *values = sample.getVals()->get();
|
||||||
|
|
||||||
if (scope == kFacevaryingScope) {
|
for (const int uv_loop_index : *uv_loops) {
|
||||||
for (const int uv_loop_index : *uv_loops) {
|
const uint32_t index = indices[uv_loop_index];
|
||||||
const uint32_t index = indices[uv_loop_index];
|
*data_float2++ = make_float2(values[index][0], values[index][1]);
|
||||||
*data_float2++ = make_float2(values[index][0], values[index][1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (scope == kVaryingScope || scope == kVertexScope) {
|
|
||||||
if (triangles) {
|
|
||||||
for (size_t i = 0; i < triangles->size(); i++) {
|
|
||||||
const int3 t = (*triangles)[i];
|
|
||||||
*data_float2++ = make_float2(values[t.x][0], values[t.x][1]);
|
|
||||||
*data_float2++ = make_float2(values[t.y][0], values[t.y][1]);
|
|
||||||
*data_float2++ = make_float2(values[t.z][0], values[t.z][1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (corners) {
|
|
||||||
for (size_t i = 0; i < corners->size(); i++) {
|
|
||||||
const int c = (*corners)[i];
|
|
||||||
*data_float2++ = make_float2(values[c][0], values[c][1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
attribute.data.add_data(data, time);
|
attribute.data.add_data(data, time);
|
||||||
|
@@ -48,7 +48,6 @@ void ConstantFolder::make_constant(float value) const
|
|||||||
|
|
||||||
foreach (ShaderInput *sock, output->links) {
|
foreach (ShaderInput *sock, output->links) {
|
||||||
sock->set(value);
|
sock->set(value);
|
||||||
sock->constant_folded_in = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
graph->disconnect(output);
|
graph->disconnect(output);
|
||||||
@@ -60,7 +59,6 @@ void ConstantFolder::make_constant(float3 value) const
|
|||||||
|
|
||||||
foreach (ShaderInput *sock, output->links) {
|
foreach (ShaderInput *sock, output->links) {
|
||||||
sock->set(value);
|
sock->set(value);
|
||||||
sock->constant_folded_in = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
graph->disconnect(output);
|
graph->disconnect(output);
|
||||||
|
@@ -676,8 +676,8 @@ void GeometryManager::update_attribute_element_offset(Geometry *geom,
|
|||||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||||
if (mesh->subdivision_type == Mesh::SUBDIVISION_CATMULL_CLARK &&
|
if (mesh->subdivision_type == Mesh::SUBDIVISION_CATMULL_CLARK &&
|
||||||
desc.flags & ATTR_SUBDIVIDED) {
|
desc.flags & ATTR_SUBDIVIDED) {
|
||||||
/* Indices for subdivided attributes are retrieved
|
/* indices for subdivided attributes are retrieved
|
||||||
* from patch table so no need for correction here. */
|
* from patch table so no need for correction here*/
|
||||||
}
|
}
|
||||||
else if (element == ATTR_ELEMENT_VERTEX)
|
else if (element == ATTR_ELEMENT_VERTEX)
|
||||||
offset -= mesh->vert_offset;
|
offset -= mesh->vert_offset;
|
||||||
|
@@ -79,11 +79,7 @@ enum ShaderNodeSpecialType {
|
|||||||
class ShaderInput {
|
class ShaderInput {
|
||||||
public:
|
public:
|
||||||
ShaderInput(const SocketType &socket_type_, ShaderNode *parent_)
|
ShaderInput(const SocketType &socket_type_, ShaderNode *parent_)
|
||||||
: socket_type(socket_type_),
|
: socket_type(socket_type_), parent(parent_), link(NULL), stack_offset(SVM_STACK_INVALID)
|
||||||
parent(parent_),
|
|
||||||
link(NULL),
|
|
||||||
stack_offset(SVM_STACK_INVALID),
|
|
||||||
constant_folded_in(false)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,10 +111,6 @@ class ShaderInput {
|
|||||||
ShaderNode *parent;
|
ShaderNode *parent;
|
||||||
ShaderOutput *link;
|
ShaderOutput *link;
|
||||||
int stack_offset; /* for SVM compiler */
|
int stack_offset; /* for SVM compiler */
|
||||||
|
|
||||||
/* Keeps track of whether a constant was folded in this socket, to avoid over-optimizing when the
|
|
||||||
* link is null. */
|
|
||||||
bool constant_folded_in;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Output
|
/* Output
|
||||||
|
@@ -4374,7 +4374,7 @@ NODE_DEFINE(HairInfoNode)
|
|||||||
SOCKET_OUT_FLOAT(intercept, "Intercept");
|
SOCKET_OUT_FLOAT(intercept, "Intercept");
|
||||||
SOCKET_OUT_FLOAT(thickness, "Thickness");
|
SOCKET_OUT_FLOAT(thickness, "Thickness");
|
||||||
SOCKET_OUT_NORMAL(tangent_normal, "Tangent Normal");
|
SOCKET_OUT_NORMAL(tangent_normal, "Tangent Normal");
|
||||||
#if 0 /* Output for minimum hair width transparency - deactivated. */
|
#if 0 /*output for minimum hair width transparency - deactivated */
|
||||||
SOCKET_OUT_FLOAT(fade, "Fade");
|
SOCKET_OUT_FLOAT(fade, "Fade");
|
||||||
#endif
|
#endif
|
||||||
SOCKET_OUT_FLOAT(index, "Random");
|
SOCKET_OUT_FLOAT(index, "Random");
|
||||||
@@ -4425,12 +4425,12 @@ void HairInfoNode::compile(SVMCompiler &compiler)
|
|||||||
if (!out->links.empty()) {
|
if (!out->links.empty()) {
|
||||||
compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_TANGENT_NORMAL, compiler.stack_assign(out));
|
compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_TANGENT_NORMAL, compiler.stack_assign(out));
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
out = output("Fade");
|
/*out = output("Fade");
|
||||||
if(!out->links.empty()) {
|
if(!out->links.empty()) {
|
||||||
compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_FADE, compiler.stack_assign(out));
|
compiler.add_node(NODE_HAIR_INFO, NODE_INFO_CURVE_FADE, compiler.stack_assign(out));
|
||||||
}
|
}*/
|
||||||
#endif
|
|
||||||
out = output("Random");
|
out = output("Random");
|
||||||
if (!out->links.empty()) {
|
if (!out->links.empty()) {
|
||||||
int attr = compiler.attribute(ATTR_STD_CURVE_RANDOM);
|
int attr = compiler.attribute(ATTR_STD_CURVE_RANDOM);
|
||||||
@@ -6093,7 +6093,6 @@ NODE_DEFINE(VectorMathNode)
|
|||||||
type_enum.insert("reflect", NODE_VECTOR_MATH_REFLECT);
|
type_enum.insert("reflect", NODE_VECTOR_MATH_REFLECT);
|
||||||
type_enum.insert("refract", NODE_VECTOR_MATH_REFRACT);
|
type_enum.insert("refract", NODE_VECTOR_MATH_REFRACT);
|
||||||
type_enum.insert("faceforward", NODE_VECTOR_MATH_FACEFORWARD);
|
type_enum.insert("faceforward", NODE_VECTOR_MATH_FACEFORWARD);
|
||||||
type_enum.insert("multiply_add", NODE_VECTOR_MATH_MULTIPLY_ADD);
|
|
||||||
|
|
||||||
type_enum.insert("dot_product", NODE_VECTOR_MATH_DOT_PRODUCT);
|
type_enum.insert("dot_product", NODE_VECTOR_MATH_DOT_PRODUCT);
|
||||||
|
|
||||||
@@ -6166,8 +6165,7 @@ void VectorMathNode::compile(SVMCompiler &compiler)
|
|||||||
int vector_stack_offset = compiler.stack_assign_if_linked(vector_out);
|
int vector_stack_offset = compiler.stack_assign_if_linked(vector_out);
|
||||||
|
|
||||||
/* 3 Vector Operators */
|
/* 3 Vector Operators */
|
||||||
if (math_type == NODE_VECTOR_MATH_WRAP || math_type == NODE_VECTOR_MATH_FACEFORWARD ||
|
if (math_type == NODE_VECTOR_MATH_WRAP || math_type == NODE_VECTOR_MATH_FACEFORWARD) {
|
||||||
math_type == NODE_VECTOR_MATH_MULTIPLY_ADD) {
|
|
||||||
ShaderInput *vector3_in = input("Vector3");
|
ShaderInput *vector3_in = input("Vector3");
|
||||||
int vector3_stack_offset = compiler.stack_assign(vector3_in);
|
int vector3_stack_offset = compiler.stack_assign(vector3_in);
|
||||||
compiler.add_node(
|
compiler.add_node(
|
||||||
|
@@ -93,8 +93,7 @@ NODE_DEFINE(Object)
|
|||||||
SOCKET_POINT(dupli_generated, "Dupli Generated", zero_float3());
|
SOCKET_POINT(dupli_generated, "Dupli Generated", zero_float3());
|
||||||
SOCKET_POINT2(dupli_uv, "Dupli UV", zero_float2());
|
SOCKET_POINT2(dupli_uv, "Dupli UV", zero_float2());
|
||||||
SOCKET_TRANSFORM_ARRAY(motion, "Motion", array<Transform>());
|
SOCKET_TRANSFORM_ARRAY(motion, "Motion", array<Transform>());
|
||||||
SOCKET_FLOAT(shadow_terminator_shading_offset, "Shadow Terminator Shading Offset", 0.0f);
|
SOCKET_FLOAT(shadow_terminator_offset, "Terminator Offset", 0.0f);
|
||||||
SOCKET_FLOAT(shadow_terminator_geometry_offset, "Shadow Terminator Geometry Offset", 0.1f);
|
|
||||||
SOCKET_STRING(asset_name, "Asset Name", ustring());
|
SOCKET_STRING(asset_name, "Asset Name", ustring());
|
||||||
|
|
||||||
SOCKET_BOOLEAN(is_shadow_catcher, "Shadow Catcher", false);
|
SOCKET_BOOLEAN(is_shadow_catcher, "Shadow Catcher", false);
|
||||||
@@ -508,9 +507,7 @@ void ObjectManager::device_update_object_transform(UpdateObjectTransformState *s
|
|||||||
kobject.cryptomatte_asset = util_hash_to_float(hash_asset);
|
kobject.cryptomatte_asset = util_hash_to_float(hash_asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
kobject.shadow_terminator_shading_offset = 1.0f /
|
kobject.shadow_terminator_offset = 1.0f / (1.0f - 0.5f * ob->shadow_terminator_offset);
|
||||||
(1.0f - 0.5f * ob->shadow_terminator_shading_offset);
|
|
||||||
kobject.shadow_terminator_geometry_offset = ob->shadow_terminator_geometry_offset;
|
|
||||||
|
|
||||||
/* Object flag. */
|
/* Object flag. */
|
||||||
if (ob->use_holdout) {
|
if (ob->use_holdout) {
|
||||||
|
@@ -64,8 +64,7 @@ class Object : public Node {
|
|||||||
NODE_SOCKET_API(bool, hide_on_missing_motion)
|
NODE_SOCKET_API(bool, hide_on_missing_motion)
|
||||||
NODE_SOCKET_API(bool, use_holdout)
|
NODE_SOCKET_API(bool, use_holdout)
|
||||||
NODE_SOCKET_API(bool, is_shadow_catcher)
|
NODE_SOCKET_API(bool, is_shadow_catcher)
|
||||||
NODE_SOCKET_API(float, shadow_terminator_shading_offset)
|
NODE_SOCKET_API(float, shadow_terminator_offset)
|
||||||
NODE_SOCKET_API(float, shadow_terminator_geometry_offset)
|
|
||||||
|
|
||||||
NODE_SOCKET_API(float3, dupli_generated)
|
NODE_SOCKET_API(float3, dupli_generated)
|
||||||
NODE_SOCKET_API(float2, dupli_uv)
|
NODE_SOCKET_API(float2, dupli_uv)
|
||||||
|
@@ -195,4 +195,4 @@ class OSLCompiler {
|
|||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
|
||||||
#endif /* __OSL_H__ */
|
#endif /* __OSL_H__ */
|
||||||
|
@@ -1252,7 +1252,7 @@ bool Session::update_progressive_refine(bool cancel)
|
|||||||
double current_time = time_dt();
|
double current_time = time_dt();
|
||||||
|
|
||||||
if (current_time - last_update_time < params.progressive_update_timeout) {
|
if (current_time - last_update_time < params.progressive_update_timeout) {
|
||||||
/* If last sample was processed, we need to write buffers anyway. */
|
/* if last sample was processed, we need to write buffers anyway */
|
||||||
if (!write && sample != 1)
|
if (!write && sample != 1)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -304,7 +304,7 @@ int SVMCompiler::stack_assign(ShaderOutput *output)
|
|||||||
|
|
||||||
int SVMCompiler::stack_assign_if_linked(ShaderInput *input)
|
int SVMCompiler::stack_assign_if_linked(ShaderInput *input)
|
||||||
{
|
{
|
||||||
if (input->link || input->constant_folded_in)
|
if (input->link)
|
||||||
return stack_assign(input);
|
return stack_assign(input);
|
||||||
|
|
||||||
return SVM_STACK_INVALID;
|
return SVM_STACK_INVALID;
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
if(WITH_GTESTS)
|
if(WITH_GTESTS)
|
||||||
Include(GTestTesting)
|
Include(GTestTesting)
|
||||||
|
|
||||||
# Otherwise we get warnings here that we can't fix in external projects
|
# Otherwise we get warnings here that we cant fix in external projects
|
||||||
remove_strict_flags()
|
remove_strict_flags()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -223,14 +223,12 @@ ccl_device_inline ssef fastpow24(const ssef &arg)
|
|||||||
ssef x = fastpow<0x3F4CCCCD, 0x4F55A7FB>(arg); // error max = 0.17 avg = 0.0018 |avg| = 0.05
|
ssef x = fastpow<0x3F4CCCCD, 0x4F55A7FB>(arg); // error max = 0.17 avg = 0.0018 |avg| = 0.05
|
||||||
ssef arg2 = arg * arg;
|
ssef arg2 = arg * arg;
|
||||||
ssef arg4 = arg2 * arg2;
|
ssef arg4 = arg2 * arg2;
|
||||||
|
x = improve_5throot_solution(x,
|
||||||
/* error max = 0.018 avg = 0.0031 |avg| = 0.0031 */
|
arg4); /* error max = 0.018 avg = 0.0031 |avg| = 0.0031 */
|
||||||
x = improve_5throot_solution(x, arg4);
|
x = improve_5throot_solution(x,
|
||||||
/* error max = 0.00021 avg = 1.6e-05 |avg| = 1.6e-05 */
|
arg4); /* error max = 0.00021 avg = 1.6e-05 |avg| = 1.6e-05 */
|
||||||
x = improve_5throot_solution(x, arg4);
|
x = improve_5throot_solution(x,
|
||||||
/* error max = 6.1e-07 avg = 5.2e-08 |avg| = 1.1e-07 */
|
arg4); /* error max = 6.1e-07 avg = 5.2e-08 |avg| = 1.1e-07 */
|
||||||
x = improve_5throot_solution(x, arg4);
|
|
||||||
|
|
||||||
return x * (x * x);
|
return x * (x * x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -129,7 +129,7 @@ class DebugFlags {
|
|||||||
DEVICE_NONE,
|
DEVICE_NONE,
|
||||||
/* All OpenCL devices will be used. */
|
/* All OpenCL devices will be used. */
|
||||||
DEVICE_ALL,
|
DEVICE_ALL,
|
||||||
/* Default system OpenCL device will be used. */
|
/* Default system OpenCL device will be used. */
|
||||||
DEVICE_DEFAULT,
|
DEVICE_DEFAULT,
|
||||||
/* Host processor will be used. */
|
/* Host processor will be used. */
|
||||||
DEVICE_CPU,
|
DEVICE_CPU,
|
||||||
|
@@ -243,7 +243,7 @@ ccl_device float fast_sinpif(float x)
|
|||||||
const float P = 3.584135056f; /* P = 16-4*Q */
|
const float P = 3.584135056f; /* P = 16-4*Q */
|
||||||
return y * (Q + P * fabsf(y));
|
return y * (Q + P * fabsf(y));
|
||||||
|
|
||||||
/* The original article used inferior constants for Q and P and
|
/* The original article used used inferior constants for Q and P and
|
||||||
* so had max error 1.091e-3.
|
* so had max error 1.091e-3.
|
||||||
*
|
*
|
||||||
* The optimal value for Q was determined by exhaustive search, minimizing
|
* The optimal value for Q was determined by exhaustive search, minimizing
|
||||||
|
@@ -282,8 +282,8 @@ static CPUCapabilities &system_cpu_capabilities()
|
|||||||
/* actual opcode for xgetbv */
|
/* actual opcode for xgetbv */
|
||||||
__asm__(".byte 0x0f, 0x01, 0xd0" : "=a"(xcr_feature_mask), "=d"(edx) : "c"(0));
|
__asm__(".byte 0x0f, 0x01, 0xd0" : "=a"(xcr_feature_mask), "=d"(edx) : "c"(0));
|
||||||
# elif defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK)
|
# elif defined(_MSC_VER) && defined(_XCR_XFEATURE_ENABLED_MASK)
|
||||||
/* Minimum VS2010 SP1 compiler is required. */
|
xcr_feature_mask = (uint32_t)_xgetbv(
|
||||||
xcr_feature_mask = (uint32_t)_xgetbv(_XCR_XFEATURE_ENABLED_MASK);
|
_XCR_XFEATURE_ENABLED_MASK); /* min VS2010 SP1 compiler is required */
|
||||||
# else
|
# else
|
||||||
xcr_feature_mask = 0;
|
xcr_feature_mask = 0;
|
||||||
# endif
|
# endif
|
||||||
|
@@ -68,7 +68,7 @@ class TaskPool {
|
|||||||
|
|
||||||
/* ** Statistics ** */
|
/* ** Statistics ** */
|
||||||
|
|
||||||
/* Time stamp of first task pushed. */
|
/* Time time stamp of first task pushed. */
|
||||||
double start_time;
|
double start_time;
|
||||||
|
|
||||||
/* Number of all tasks pushed to the pool. Cleared after wait_work() and cancel(). */
|
/* Number of all tasks pushed to the pool. Cleared after wait_work() and cancel(). */
|
||||||
@@ -88,7 +88,7 @@ class TaskScheduler {
|
|||||||
|
|
||||||
/* Approximate number of threads that will work on task, which may be lower
|
/* Approximate number of threads that will work on task, which may be lower
|
||||||
* or higher than the actual number of threads. Use as little as possible and
|
* or higher than the actual number of threads. Use as little as possible and
|
||||||
* leave splitting up tasks to the scheduler. */
|
* leave splitting up tasks to the scheduler.. */
|
||||||
static int num_threads();
|
static int num_threads();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@@ -93,21 +93,40 @@ void my_guess_pkt_duration(AVFormatContext *s, AVStream *st, AVPacket *pkt)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
FFMPEG_INLINE
|
FFMPEG_INLINE
|
||||||
int64_t timestamp_from_pts_or_dts(int64_t pts, int64_t dts)
|
void my_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
|
||||||
{
|
{
|
||||||
/* Some videos do not have any pts values, use dts instead in those cases if
|
int i;
|
||||||
* possible. Usually when this happens dts can act as pts because as all frames
|
|
||||||
* should then be presented in their decoded in order. IE pts == dts. */
|
for (i = 0; i < s->nb_streams; i++) {
|
||||||
if (pts == AV_NOPTS_VALUE) {
|
AVStream *st = s->streams[i];
|
||||||
return dts;
|
|
||||||
|
st->cur_dts = av_rescale(timestamp,
|
||||||
|
st->time_base.den * (int64_t)ref_st->time_base.num,
|
||||||
|
st->time_base.num * (int64_t)ref_st->time_base.den);
|
||||||
}
|
}
|
||||||
return pts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FFMPEG_INLINE
|
FFMPEG_INLINE
|
||||||
int64_t av_get_pts_from_frame(AVFrame *picture)
|
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
|
||||||
{
|
{
|
||||||
return timestamp_from_pts_or_dts(picture->pts, picture->pkt_dts);
|
my_update_cur_dts(s, ref_st, timestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
FFMPEG_INLINE
|
||||||
|
int64_t av_get_pts_from_frame(AVFormatContext *avctx, AVFrame *picture)
|
||||||
|
{
|
||||||
|
int64_t pts;
|
||||||
|
pts = picture->pts;
|
||||||
|
|
||||||
|
if (pts == AV_NOPTS_VALUE) {
|
||||||
|
pts = picture->pkt_dts;
|
||||||
|
}
|
||||||
|
if (pts == AV_NOPTS_VALUE) {
|
||||||
|
pts = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
(void)avctx;
|
||||||
|
return pts;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
|
@@ -282,7 +282,6 @@ elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND)
|
|||||||
${wayland-egl_INCLUDE_DIRS}
|
${wayland-egl_INCLUDE_DIRS}
|
||||||
${xkbcommon_INCLUDE_DIRS}
|
${xkbcommon_INCLUDE_DIRS}
|
||||||
${wayland-cursor_INCLUDE_DIRS}
|
${wayland-cursor_INCLUDE_DIRS}
|
||||||
${dbus_INCLUDE_DIRS}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND SRC
|
list(APPEND SRC
|
||||||
@@ -322,11 +321,6 @@ elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND)
|
|||||||
xdg-shell
|
xdg-shell
|
||||||
"${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml"
|
"${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml"
|
||||||
)
|
)
|
||||||
# xdg-decoration.
|
|
||||||
generate_protocol_bindings(
|
|
||||||
xdg-decoration
|
|
||||||
"${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml"
|
|
||||||
)
|
|
||||||
# Pointer-constraints.
|
# Pointer-constraints.
|
||||||
generate_protocol_bindings(
|
generate_protocol_bindings(
|
||||||
pointer-constraints
|
pointer-constraints
|
||||||
@@ -370,7 +364,6 @@ elseif(WIN32)
|
|||||||
intern/GHOST_DropTargetWin32.cpp
|
intern/GHOST_DropTargetWin32.cpp
|
||||||
intern/GHOST_SystemWin32.cpp
|
intern/GHOST_SystemWin32.cpp
|
||||||
intern/GHOST_WindowWin32.cpp
|
intern/GHOST_WindowWin32.cpp
|
||||||
intern/GHOST_Wintab.cpp
|
|
||||||
|
|
||||||
intern/GHOST_ContextD3D.h
|
intern/GHOST_ContextD3D.h
|
||||||
intern/GHOST_DisplayManagerWin32.h
|
intern/GHOST_DisplayManagerWin32.h
|
||||||
@@ -378,7 +371,6 @@ elseif(WIN32)
|
|||||||
intern/GHOST_SystemWin32.h
|
intern/GHOST_SystemWin32.h
|
||||||
intern/GHOST_TaskbarWin32.h
|
intern/GHOST_TaskbarWin32.h
|
||||||
intern/GHOST_WindowWin32.h
|
intern/GHOST_WindowWin32.h
|
||||||
intern/GHOST_Wintab.h
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT WITH_GL_EGL)
|
if(NOT WITH_GL_EGL)
|
||||||
@@ -483,17 +475,10 @@ if(WITH_XR_OPENXR)
|
|||||||
shlwapi
|
shlwapi
|
||||||
)
|
)
|
||||||
elseif(UNIX AND NOT APPLE)
|
elseif(UNIX AND NOT APPLE)
|
||||||
list(APPEND XR_PLATFORM_DEFINES -DXR_OS_LINUX)
|
list(APPEND XR_PLATFORM_DEFINES
|
||||||
if (WITH_GHOST_WAYLAND)
|
-DXR_OS_LINUX
|
||||||
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_WAYLAND)
|
-DXR_USE_PLATFORM_XLIB
|
||||||
endif()
|
)
|
||||||
if (WITH_GHOST_X11)
|
|
||||||
if (WITH_GL_EGL)
|
|
||||||
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_EGL)
|
|
||||||
else()
|
|
||||||
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_XLIB)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_definitions(-DWITH_XR_OPENXR ${XR_PLATFORM_DEFINES})
|
add_definitions(-DWITH_XR_OPENXR ${XR_PLATFORM_DEFINES})
|
||||||
|
@@ -95,7 +95,7 @@ class GHOST_ISystemPaths {
|
|||||||
virtual void addToSystemRecentFiles(const char *filename) const = 0;
|
virtual void addToSystemRecentFiles(const char *filename) const = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** The one and only system paths. */
|
/** The one and only system paths*/
|
||||||
static GHOST_ISystemPaths *m_systemPaths;
|
static GHOST_ISystemPaths *m_systemPaths;
|
||||||
|
|
||||||
#ifdef WITH_CXX_GUARDEDALLOC
|
#ifdef WITH_CXX_GUARDEDALLOC
|
||||||
|
@@ -105,9 +105,7 @@ typedef enum {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOST_kTabletAutomatic = 0,
|
GHOST_kTabletAutomatic = 0,
|
||||||
/* Show as Windows Ink to users to match "Use Windows Ink" in tablet utilities,
|
GHOST_kTabletNative,
|
||||||
* but we use the dependent Windows Pointer API. */
|
|
||||||
GHOST_kTabletWinPointer,
|
|
||||||
GHOST_kTabletWintab,
|
GHOST_kTabletWintab,
|
||||||
} GHOST_TTabletAPI;
|
} GHOST_TTabletAPI;
|
||||||
|
|
||||||
@@ -170,7 +168,7 @@ typedef enum {
|
|||||||
GHOST_kButtonMaskRight,
|
GHOST_kButtonMaskRight,
|
||||||
GHOST_kButtonMaskButton4,
|
GHOST_kButtonMaskButton4,
|
||||||
GHOST_kButtonMaskButton5,
|
GHOST_kButtonMaskButton5,
|
||||||
/* Trackballs and programmable buttons. */
|
/* Trackballs and programmable buttons */
|
||||||
GHOST_kButtonMaskButton6,
|
GHOST_kButtonMaskButton6,
|
||||||
GHOST_kButtonMaskButton7,
|
GHOST_kButtonMaskButton7,
|
||||||
GHOST_kButtonNumMasks
|
GHOST_kButtonNumMasks
|
||||||
@@ -179,15 +177,15 @@ typedef enum {
|
|||||||
typedef enum {
|
typedef enum {
|
||||||
GHOST_kEventUnknown = 0,
|
GHOST_kEventUnknown = 0,
|
||||||
|
|
||||||
GHOST_kEventCursorMove, /* Mouse move event. */
|
GHOST_kEventCursorMove, /// Mouse move event
|
||||||
GHOST_kEventButtonDown, /* Mouse button event. */
|
GHOST_kEventButtonDown, /// Mouse button event
|
||||||
GHOST_kEventButtonUp, /* Mouse button event. */
|
GHOST_kEventButtonUp, /// Mouse button event
|
||||||
GHOST_kEventWheel, /* Mouse wheel event. */
|
GHOST_kEventWheel, /// Mouse wheel event
|
||||||
GHOST_kEventTrackpad, /* Trackpad event. */
|
GHOST_kEventTrackpad, /// Trackpad event
|
||||||
|
|
||||||
#ifdef WITH_INPUT_NDOF
|
#ifdef WITH_INPUT_NDOF
|
||||||
GHOST_kEventNDOFMotion, /* N degree of freedom device motion event. */
|
GHOST_kEventNDOFMotion, /// N degree of freedom device motion event
|
||||||
GHOST_kEventNDOFButton, /* N degree of freedom device button event. */
|
GHOST_kEventNDOFButton, /// N degree of freedom device button event
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GHOST_kEventKeyDown,
|
GHOST_kEventKeyDown,
|
||||||
@@ -209,8 +207,8 @@ typedef enum {
|
|||||||
GHOST_kEventDraggingExited,
|
GHOST_kEventDraggingExited,
|
||||||
GHOST_kEventDraggingDropDone,
|
GHOST_kEventDraggingDropDone,
|
||||||
|
|
||||||
GHOST_kEventOpenMainFile, /* Needed for Cocoa to open double-clicked .blend file at startup. */
|
GHOST_kEventOpenMainFile, // Needed for Cocoa to open double-clicked .blend file at startup
|
||||||
GHOST_kEventNativeResolutionChange, /* Needed for Cocoa when window moves to other display. */
|
GHOST_kEventNativeResolutionChange, // Needed for Cocoa when window moves to other display
|
||||||
|
|
||||||
GHOST_kEventTimer,
|
GHOST_kEventTimer,
|
||||||
|
|
||||||
@@ -283,7 +281,7 @@ typedef enum {
|
|||||||
GHOST_kKeyPeriod = '.',
|
GHOST_kKeyPeriod = '.',
|
||||||
GHOST_kKeySlash = '/',
|
GHOST_kKeySlash = '/',
|
||||||
|
|
||||||
/* Number keys. */
|
// Number keys
|
||||||
GHOST_kKey0 = '0',
|
GHOST_kKey0 = '0',
|
||||||
GHOST_kKey1,
|
GHOST_kKey1,
|
||||||
GHOST_kKey2,
|
GHOST_kKey2,
|
||||||
@@ -298,7 +296,7 @@ typedef enum {
|
|||||||
GHOST_kKeySemicolon = ';',
|
GHOST_kKeySemicolon = ';',
|
||||||
GHOST_kKeyEqual = '=',
|
GHOST_kKeyEqual = '=',
|
||||||
|
|
||||||
/* Character keys. */
|
// Character keys
|
||||||
GHOST_kKeyA = 'A',
|
GHOST_kKeyA = 'A',
|
||||||
GHOST_kKeyB,
|
GHOST_kKeyB,
|
||||||
GHOST_kKeyC,
|
GHOST_kKeyC,
|
||||||
@@ -337,9 +335,9 @@ typedef enum {
|
|||||||
GHOST_kKeyRightControl,
|
GHOST_kKeyRightControl,
|
||||||
GHOST_kKeyLeftAlt,
|
GHOST_kKeyLeftAlt,
|
||||||
GHOST_kKeyRightAlt,
|
GHOST_kKeyRightAlt,
|
||||||
GHOST_kKeyOS, /* Command key on Apple, Windows key(s) on Windows. */
|
GHOST_kKeyOS, // Command key on Apple, Windows key(s) on Windows
|
||||||
GHOST_kKeyGrLess, /* German PC only! */
|
GHOST_kKeyGrLess, // German PC only!
|
||||||
GHOST_kKeyApp, /* Also known as menu key. */
|
GHOST_kKeyApp, /* Also known as menu key. */
|
||||||
|
|
||||||
GHOST_kKeyCapsLock,
|
GHOST_kKeyCapsLock,
|
||||||
GHOST_kKeyNumLock,
|
GHOST_kKeyNumLock,
|
||||||
@@ -360,7 +358,7 @@ typedef enum {
|
|||||||
GHOST_kKeyUpPage,
|
GHOST_kKeyUpPage,
|
||||||
GHOST_kKeyDownPage,
|
GHOST_kKeyDownPage,
|
||||||
|
|
||||||
/* Numpad keys. */
|
// Numpad keys
|
||||||
GHOST_kKeyNumpad0,
|
GHOST_kKeyNumpad0,
|
||||||
GHOST_kKeyNumpad1,
|
GHOST_kKeyNumpad1,
|
||||||
GHOST_kKeyNumpad2,
|
GHOST_kKeyNumpad2,
|
||||||
@@ -378,7 +376,7 @@ typedef enum {
|
|||||||
GHOST_kKeyNumpadAsterisk,
|
GHOST_kKeyNumpadAsterisk,
|
||||||
GHOST_kKeyNumpadSlash,
|
GHOST_kKeyNumpadSlash,
|
||||||
|
|
||||||
/* Function keys. */
|
// Function keys
|
||||||
GHOST_kKeyF1,
|
GHOST_kKeyF1,
|
||||||
GHOST_kKeyF2,
|
GHOST_kKeyF2,
|
||||||
GHOST_kKeyF3,
|
GHOST_kKeyF3,
|
||||||
@@ -404,7 +402,7 @@ typedef enum {
|
|||||||
GHOST_kKeyF23,
|
GHOST_kKeyF23,
|
||||||
GHOST_kKeyF24,
|
GHOST_kKeyF24,
|
||||||
|
|
||||||
/* Multimedia keypad buttons. */
|
// Multimedia keypad buttons
|
||||||
GHOST_kKeyMediaPlay,
|
GHOST_kKeyMediaPlay,
|
||||||
GHOST_kKeyMediaStop,
|
GHOST_kKeyMediaStop,
|
||||||
GHOST_kKeyMediaFirst,
|
GHOST_kKeyMediaFirst,
|
||||||
@@ -481,9 +479,9 @@ typedef struct {
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
GHOST_kDragnDropTypeUnknown = 0,
|
GHOST_kDragnDropTypeUnknown = 0,
|
||||||
GHOST_kDragnDropTypeFilenames, /* Array of strings representing file names (full path). */
|
GHOST_kDragnDropTypeFilenames, /*Array of strings representing file names (full path) */
|
||||||
GHOST_kDragnDropTypeString, /* Unformatted text UTF-8 string. */
|
GHOST_kDragnDropTypeString, /* Unformatted text UTF-8 string */
|
||||||
GHOST_kDragnDropTypeBitmap /* Bitmap image data. */
|
GHOST_kDragnDropTypeBitmap /*Bitmap image data */
|
||||||
} GHOST_TDragnDropTypes;
|
} GHOST_TDragnDropTypes;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -529,23 +527,18 @@ typedef enum {
|
|||||||
#ifdef WITH_INPUT_NDOF
|
#ifdef WITH_INPUT_NDOF
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** N-degree of freedom device data v3 [GSoC 2010] */
|
/** N-degree of freedom device data v3 [GSoC 2010] */
|
||||||
/* Each component normally ranges from -1 to +1, but can exceed that.
|
// Each component normally ranges from -1 to +1, but can exceed that.
|
||||||
* These use blender standard view coordinates,
|
// These use blender standard view coordinates, with positive rotations being CCW about the axis.
|
||||||
* with positive rotations being CCW about the axis. */
|
float tx, ty, tz; // translation
|
||||||
/* translation: */
|
float rx, ry, rz; // rotation:
|
||||||
float tx, ty, tz;
|
// axis = (rx,ry,rz).normalized
|
||||||
/* rotation:
|
// amount = (rx,ry,rz).magnitude [in revolutions, 1.0 = 360 deg]
|
||||||
* - `axis = (rx,ry,rz).normalized`
|
float dt; // time since previous NDOF Motion event
|
||||||
* - `amount = (rx,ry,rz).magnitude` [in revolutions, 1.0 = 360 deg]. */
|
GHOST_TProgress progress; // Starting, InProgress or Finishing (for modal handlers)
|
||||||
float rx, ry, rz;
|
|
||||||
/** Time since previous NDOF Motion event */
|
|
||||||
float dt;
|
|
||||||
/** Starting, #GHOST_kInProgress or #GHOST_kFinishing (for modal handlers) */
|
|
||||||
GHOST_TProgress progress;
|
|
||||||
} GHOST_TEventNDOFMotionData;
|
} GHOST_TEventNDOFMotionData;
|
||||||
|
|
||||||
typedef enum { GHOST_kPress, GHOST_kRelease } GHOST_TButtonAction;
|
typedef enum { GHOST_kPress, GHOST_kRelease } GHOST_TButtonAction;
|
||||||
/* Good for mouse or other buttons too, hmmm? */
|
// good for mouse or other buttons too, hmmm?
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GHOST_TButtonAction action;
|
GHOST_TButtonAction action;
|
||||||
@@ -568,7 +561,7 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
/** The ascii code for the key event ('\0' if none). */
|
/** The ascii code for the key event ('\0' if none). */
|
||||||
char ascii;
|
char ascii;
|
||||||
/** The unicode character. if the length is 6, not NULL terminated if all 6 are set. */
|
/** The unicode character. if the length is 6, not NULL terminated if all 6 are set */
|
||||||
char utf8_buf[6];
|
char utf8_buf[6];
|
||||||
|
|
||||||
/** Generated by auto-repeat. */
|
/** Generated by auto-repeat. */
|
||||||
@@ -601,8 +594,7 @@ typedef void *GHOST_TEmbedderWindowID;
|
|||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
/* I can't use "Window" from `X11/Xlib.h`
|
// I can't use "Window" from "<X11/Xlib.h>" because it conflits with Window defined in winlay.h
|
||||||
* because it conflicts with Window defined in `winlay.h`. */
|
|
||||||
typedef int GHOST_TEmbedderWindowID;
|
typedef int GHOST_TEmbedderWindowID;
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
@@ -650,10 +642,8 @@ typedef void *(*GHOST_XrGraphicsContextBindFn)(void);
|
|||||||
typedef void (*GHOST_XrGraphicsContextUnbindFn)(GHOST_ContextHandle graphics_context);
|
typedef void (*GHOST_XrGraphicsContextUnbindFn)(GHOST_ContextHandle graphics_context);
|
||||||
typedef void (*GHOST_XrDrawViewFn)(const struct GHOST_XrDrawViewInfo *draw_view, void *customdata);
|
typedef void (*GHOST_XrDrawViewFn)(const struct GHOST_XrDrawViewInfo *draw_view, void *customdata);
|
||||||
|
|
||||||
/**
|
/* An array of GHOST_TXrGraphicsBinding items defining the candidate bindings to use. The first
|
||||||
* An array of #GHOST_TXrGraphicsBinding items defining the candidate bindings to use.
|
* available candidate will be chosen, so order defines priority. */
|
||||||
* The first available candidate will be chosen, so order defines priority.
|
|
||||||
*/
|
|
||||||
typedef const GHOST_TXrGraphicsBinding *GHOST_XrGraphicsBindingCandidates;
|
typedef const GHOST_TXrGraphicsBinding *GHOST_XrGraphicsBindingCandidates;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -694,7 +684,7 @@ typedef struct GHOST_XrDrawViewInfo {
|
|||||||
float angle_up, angle_down;
|
float angle_up, angle_down;
|
||||||
} fov;
|
} fov;
|
||||||
|
|
||||||
/** Set if the buffer should be submitted with a SRGB transfer applied. */
|
/** Set if the buffer should be submitted with a srgb transfer applied. */
|
||||||
char expects_srgb_buffer;
|
char expects_srgb_buffer;
|
||||||
} GHOST_XrDrawViewInfo;
|
} GHOST_XrDrawViewInfo;
|
||||||
|
|
||||||
@@ -744,7 +734,7 @@ typedef struct GHOST_XrActionSpaceInfo {
|
|||||||
typedef struct GHOST_XrActionBindingInfo {
|
typedef struct GHOST_XrActionBindingInfo {
|
||||||
const char *action_name;
|
const char *action_name;
|
||||||
GHOST_TUns32 count_interaction_paths;
|
GHOST_TUns32 count_interaction_paths;
|
||||||
/** Interaction path: User (sub-action) path + component path. */
|
/** Interaction path: User (subaction) path + component path. */
|
||||||
const char **interaction_paths;
|
const char **interaction_paths;
|
||||||
} GHOST_XrActionBindingInfo;
|
} GHOST_XrActionBindingInfo;
|
||||||
|
|
||||||
|
@@ -149,9 +149,6 @@ static bool egl_chk(bool result, const char *file = NULL, int line = 0, const ch
|
|||||||
static_cast<unsigned int>(error),
|
static_cast<unsigned int>(error),
|
||||||
code ? code : "<Unknown>",
|
code ? code : "<Unknown>",
|
||||||
msg ? msg : "<Unknown>");
|
msg ? msg : "<Unknown>");
|
||||||
(void)(file);
|
|
||||||
(void)(line);
|
|
||||||
(void)(text);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,8 +199,7 @@ template<typename T> T &choose_api(EGLenum api, T &a, T &b, T &c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GHOST_ContextEGL::GHOST_ContextEGL(const GHOST_System *const system,
|
GHOST_ContextEGL::GHOST_ContextEGL(bool stereoVisual,
|
||||||
bool stereoVisual,
|
|
||||||
EGLNativeWindowType nativeWindow,
|
EGLNativeWindowType nativeWindow,
|
||||||
EGLNativeDisplayType nativeDisplay,
|
EGLNativeDisplayType nativeDisplay,
|
||||||
EGLint contextProfileMask,
|
EGLint contextProfileMask,
|
||||||
@@ -213,7 +209,6 @@ GHOST_ContextEGL::GHOST_ContextEGL(const GHOST_System *const system,
|
|||||||
EGLint contextResetNotificationStrategy,
|
EGLint contextResetNotificationStrategy,
|
||||||
EGLenum api)
|
EGLenum api)
|
||||||
: GHOST_Context(stereoVisual),
|
: GHOST_Context(stereoVisual),
|
||||||
m_system(system),
|
|
||||||
m_nativeDisplay(nativeDisplay),
|
m_nativeDisplay(nativeDisplay),
|
||||||
m_nativeWindow(nativeWindow),
|
m_nativeWindow(nativeWindow),
|
||||||
m_contextProfileMask(contextProfileMask),
|
m_contextProfileMask(contextProfileMask),
|
||||||
@@ -290,21 +285,6 @@ GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int &intervalOut)
|
|||||||
return GHOST_kSuccess;
|
return GHOST_kSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
EGLDisplay GHOST_ContextEGL::getDisplay() const
|
|
||||||
{
|
|
||||||
return m_display;
|
|
||||||
}
|
|
||||||
|
|
||||||
EGLConfig GHOST_ContextEGL::getConfig() const
|
|
||||||
{
|
|
||||||
return m_config;
|
|
||||||
}
|
|
||||||
|
|
||||||
EGLContext GHOST_ContextEGL::getContext() const
|
|
||||||
{
|
|
||||||
return m_context;
|
|
||||||
}
|
|
||||||
|
|
||||||
GHOST_TSuccess GHOST_ContextEGL::activateDrawingContext()
|
GHOST_TSuccess GHOST_ContextEGL::activateDrawingContext()
|
||||||
{
|
{
|
||||||
if (m_display) {
|
if (m_display) {
|
||||||
@@ -476,7 +456,9 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
|
|
||||||
attrib_list.push_back(EGL_NONE);
|
attrib_list.push_back(EGL_NONE);
|
||||||
|
|
||||||
if (!EGL_CHK(::eglChooseConfig(m_display, &(attrib_list[0]), &m_config, 1, &num_config)))
|
EGLConfig config;
|
||||||
|
|
||||||
|
if (!EGL_CHK(::eglChooseConfig(m_display, &(attrib_list[0]), &config, 1, &num_config)))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
// A common error is to assume that ChooseConfig worked because it returned EGL_TRUE
|
// A common error is to assume that ChooseConfig worked because it returned EGL_TRUE
|
||||||
@@ -484,7 +466,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (m_nativeWindow != 0) {
|
if (m_nativeWindow != 0) {
|
||||||
m_surface = ::eglCreateWindowSurface(m_display, m_config, m_nativeWindow, NULL);
|
m_surface = ::eglCreateWindowSurface(m_display, config, m_nativeWindow, NULL);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
static const EGLint pb_attrib_list[] = {
|
static const EGLint pb_attrib_list[] = {
|
||||||
@@ -494,7 +476,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
1,
|
1,
|
||||||
EGL_NONE,
|
EGL_NONE,
|
||||||
};
|
};
|
||||||
m_surface = ::eglCreatePbufferSurface(m_display, m_config, pb_attrib_list);
|
m_surface = ::eglCreatePbufferSurface(m_display, config, pb_attrib_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EGL_CHK(m_surface != EGL_NO_SURFACE))
|
if (!EGL_CHK(m_surface != EGL_NO_SURFACE))
|
||||||
@@ -595,7 +577,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||||||
|
|
||||||
attrib_list.push_back(EGL_NONE);
|
attrib_list.push_back(EGL_NONE);
|
||||||
|
|
||||||
m_context = ::eglCreateContext(m_display, m_config, m_sharedContext, &(attrib_list[0]));
|
m_context = ::eglCreateContext(m_display, config, m_sharedContext, &(attrib_list[0]));
|
||||||
|
|
||||||
if (!EGL_CHK(m_context != EGL_NO_CONTEXT))
|
if (!EGL_CHK(m_context != EGL_NO_CONTEXT))
|
||||||
goto error;
|
goto error;
|
||||||
|
@@ -24,7 +24,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "GHOST_Context.h"
|
#include "GHOST_Context.h"
|
||||||
#include "GHOST_System.h"
|
|
||||||
|
|
||||||
#include <GL/eglew.h>
|
#include <GL/eglew.h>
|
||||||
|
|
||||||
@@ -37,15 +36,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
class GHOST_ContextEGL : public GHOST_Context {
|
class GHOST_ContextEGL : public GHOST_Context {
|
||||||
/* XR code needs low level graphics data to send to OpenXR. */
|
|
||||||
friend class GHOST_XrGraphicsBindingOpenGL;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*/
|
*/
|
||||||
GHOST_ContextEGL(const GHOST_System *const system,
|
GHOST_ContextEGL(bool stereoVisual,
|
||||||
bool stereoVisual,
|
|
||||||
EGLNativeWindowType nativeWindow,
|
EGLNativeWindowType nativeWindow,
|
||||||
EGLNativeDisplayType nativeDisplay,
|
EGLNativeDisplayType nativeDisplay,
|
||||||
EGLint contextProfileMask,
|
EGLint contextProfileMask,
|
||||||
@@ -105,17 +100,9 @@ class GHOST_ContextEGL : public GHOST_Context {
|
|||||||
*/
|
*/
|
||||||
GHOST_TSuccess getSwapInterval(int &intervalOut);
|
GHOST_TSuccess getSwapInterval(int &intervalOut);
|
||||||
|
|
||||||
EGLDisplay getDisplay() const;
|
|
||||||
|
|
||||||
EGLConfig getConfig() const;
|
|
||||||
|
|
||||||
EGLContext getContext() const;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool initContextEGLEW();
|
bool initContextEGLEW();
|
||||||
|
|
||||||
const GHOST_System *const m_system;
|
|
||||||
|
|
||||||
EGLNativeDisplayType m_nativeDisplay;
|
EGLNativeDisplayType m_nativeDisplay;
|
||||||
EGLNativeWindowType m_nativeWindow;
|
EGLNativeWindowType m_nativeWindow;
|
||||||
|
|
||||||
@@ -130,7 +117,6 @@ class GHOST_ContextEGL : public GHOST_Context {
|
|||||||
EGLContext m_context;
|
EGLContext m_context;
|
||||||
EGLSurface m_surface;
|
EGLSurface m_surface;
|
||||||
EGLDisplay m_display;
|
EGLDisplay m_display;
|
||||||
EGLConfig m_config;
|
|
||||||
|
|
||||||
EGLint m_swap_interval;
|
EGLint m_swap_interval;
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user