Compare commits
1 Commits
node-group
...
tmp-buildb
Author | SHA1 | Date | |
---|---|---|---|
aa75e383ba |
@@ -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
|
||||||
|
@@ -217,7 +217,7 @@ if(UNIX AND NOT (APPLE OR HAIKU))
|
|||||||
option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
|
option(WITH_GHOST_X11 "Enable building Blender against X11 for windowing" ON)
|
||||||
mark_as_advanced(WITH_GHOST_X11)
|
mark_as_advanced(WITH_GHOST_X11)
|
||||||
|
|
||||||
option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for windowing" ON)
|
option(WITH_GHOST_WAYLAND "Enable building Blender against Wayland for windowing (under development)" OFF)
|
||||||
mark_as_advanced(WITH_GHOST_WAYLAND)
|
mark_as_advanced(WITH_GHOST_WAYLAND)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -349,7 +349,7 @@ mark_as_advanced(WITH_SYSTEM_GLOG)
|
|||||||
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
option(WITH_FREESTYLE "Enable Freestyle (advanced edges rendering)" ON)
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
if(WIN32 OR APPLE)
|
if(WIN32)
|
||||||
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
option(WITH_INPUT_IME "Enable Input Method Editor (IME) for complex Asian character input" ON)
|
||||||
endif()
|
endif()
|
||||||
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
option(WITH_INPUT_NDOF "Enable NDOF input devices (SpaceNavigator and friends)" ON)
|
||||||
@@ -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")
|
||||||
@@ -1705,18 +1705,22 @@ if(WITH_PYTHON)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Select C++17 as the standard for C++ projects.
|
if(MSVC)
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
string(APPEND CMAKE_CXX_FLAGS " /std:c++17")
|
||||||
# If C++17 is not available, downgrading to an earlier standard is NOT OK.
|
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
||||||
# Do not enable compiler specific language extentions.
|
# of the C++ standard chosen above
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
if(MSVC_VERSION GREATER 1913)
|
||||||
|
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
||||||
# Make MSVC properly report the value of the __cplusplus preprocessor macro
|
endif()
|
||||||
# Available MSVC 15.7 (1914) and up, without this it reports 199711L regardless
|
elseif(
|
||||||
# of the C++ standard chosen above.
|
CMAKE_COMPILER_IS_GNUCC OR
|
||||||
if(MSVC AND MSVC_VERSION GREATER 1913)
|
CMAKE_C_COMPILER_ID MATCHES "Clang" OR
|
||||||
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus")
|
CMAKE_C_COMPILER_ID MATCHES "Intel"
|
||||||
|
)
|
||||||
|
string(APPEND CMAKE_CXX_FLAGS " -std=c++17")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Unknown compiler ${CMAKE_C_COMPILER_ID}, can't enable C++17 build")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Visual Studio has all standards it supports available by default
|
# Visual Studio has all standards it supports available by default
|
||||||
@@ -1911,7 +1915,6 @@ if(FIRST_RUN)
|
|||||||
info_cfg_option(WITH_IK_ITASC)
|
info_cfg_option(WITH_IK_ITASC)
|
||||||
info_cfg_option(WITH_IK_SOLVER)
|
info_cfg_option(WITH_IK_SOLVER)
|
||||||
info_cfg_option(WITH_INPUT_NDOF)
|
info_cfg_option(WITH_INPUT_NDOF)
|
||||||
info_cfg_option(WITH_INPUT_IME)
|
|
||||||
info_cfg_option(WITH_INTERNATIONAL)
|
info_cfg_option(WITH_INTERNATIONAL)
|
||||||
info_cfg_option(WITH_OPENCOLLADA)
|
info_cfg_option(WITH_OPENCOLLADA)
|
||||||
info_cfg_option(WITH_OPENCOLORIO)
|
info_cfg_option(WITH_OPENCOLORIO)
|
||||||
|
@@ -56,7 +56,6 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/zlib.cmake)
|
include(cmake/zlib.cmake)
|
||||||
include(cmake/zstd.cmake)
|
|
||||||
include(cmake/openal.cmake)
|
include(cmake/openal.cmake)
|
||||||
include(cmake/png.cmake)
|
include(cmake/png.cmake)
|
||||||
include(cmake/jpeg.cmake)
|
include(cmake/jpeg.cmake)
|
||||||
@@ -165,7 +164,6 @@ endif()
|
|||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
include(cmake/libglu.cmake)
|
include(cmake/libglu.cmake)
|
||||||
include(cmake/mesa.cmake)
|
include(cmake/mesa.cmake)
|
||||||
include(cmake/wayland_protocols.cmake)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(cmake/harvest.cmake)
|
include(cmake/harvest.cmake)
|
||||||
|
@@ -87,9 +87,7 @@ download_source(LIBGLU)
|
|||||||
download_source(MESA)
|
download_source(MESA)
|
||||||
download_source(NASM)
|
download_source(NASM)
|
||||||
download_source(XR_OPENXR_SDK)
|
download_source(XR_OPENXR_SDK)
|
||||||
download_source(WL_PROTOCOLS)
|
|
||||||
download_source(ISPC)
|
download_source(ISPC)
|
||||||
download_source(GMP)
|
download_source(GMP)
|
||||||
download_source(POTRACE)
|
download_source(POTRACE)
|
||||||
download_source(HARU)
|
download_source(HARU)
|
||||||
download_source(ZSTD)
|
|
||||||
|
@@ -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()
|
||||||
|
@@ -126,8 +126,6 @@ if(UNIX AND NOT APPLE)
|
|||||||
|
|
||||||
harvest(xml2/include xml2/include "*.h")
|
harvest(xml2/include xml2/include "*.h")
|
||||||
harvest(xml2/lib xml2/lib "*.a")
|
harvest(xml2/lib xml2/lib "*.a")
|
||||||
|
|
||||||
harvest(wayland-protocols/share/wayland-protocols wayland-protocols/share/wayland-protocols/ "*.xml")
|
|
||||||
else()
|
else()
|
||||||
harvest(blosc/lib openvdb/lib "*.a")
|
harvest(blosc/lib openvdb/lib "*.a")
|
||||||
harvest(xml2/lib opencollada/lib "*.a")
|
harvest(xml2/lib opencollada/lib "*.a")
|
||||||
@@ -192,8 +190,6 @@ harvest(potrace/include potrace/include "*.h")
|
|||||||
harvest(potrace/lib potrace/lib "*.a")
|
harvest(potrace/lib potrace/lib "*.a")
|
||||||
harvest(haru/include haru/include "*.h")
|
harvest(haru/include haru/include "*.h")
|
||||||
harvest(haru/lib haru/lib "*.a")
|
harvest(haru/lib haru/lib "*.a")
|
||||||
harvest(zstd/include zstd/include "*.h")
|
|
||||||
harvest(zstd/lib zstd/lib "*.a")
|
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
harvest(libglu/lib mesa/lib "*.so*")
|
harvest(libglu/lib mesa/lib "*.so*")
|
||||||
|
@@ -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()
|
||||||
|
@@ -216,9 +216,9 @@ set(OPENVDB_HASH 01b490be16cc0e15c690f9a153c21461)
|
|||||||
set(OPENVDB_HASH_TYPE MD5)
|
set(OPENVDB_HASH_TYPE MD5)
|
||||||
set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
|
set(OPENVDB_FILE openvdb-${OPENVDB_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(NANOVDB_GIT_UID dc37d8a631922e7bef46712947dc19b755f3e841)
|
set(NANOVDB_GIT_UID e62f7a0bf1e27397223c61ddeaaf57edf111b77f)
|
||||||
set(NANOVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_GIT_UID}.tar.gz)
|
set(NANOVDB_URI https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_GIT_UID}.tar.gz)
|
||||||
set(NANOVDB_HASH e7b9e863ec2f3b04ead171dec2322807)
|
set(NANOVDB_HASH 90919510bc6ccd630fedc56f748cb199)
|
||||||
set(NANOVDB_HASH_TYPE MD5)
|
set(NANOVDB_HASH_TYPE MD5)
|
||||||
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
set(NANOVDB_FILE nano-vdb-${NANOVDB_GIT_UID}.tar.gz)
|
||||||
|
|
||||||
@@ -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)
|
||||||
|
|
||||||
@@ -456,18 +456,12 @@ set(NASM_HASH aded8b796c996a486a56e0515c83e414116decc3b184d88043480b32eb0a8589)
|
|||||||
set(NASM_HASH_TYPE SHA256)
|
set(NASM_HASH_TYPE SHA256)
|
||||||
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
set(NASM_FILE nasm-${NASM_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(XR_OPENXR_SDK_VERSION 1.0.17)
|
set(XR_OPENXR_SDK_VERSION 1.0.14)
|
||||||
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_URI https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
set(XR_OPENXR_SDK_HASH bf0fd8828837edff01047474e90013e1)
|
set(XR_OPENXR_SDK_HASH 0df6b2fd6045423451a77ff6bc3e1a75)
|
||||||
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
set(XR_OPENXR_SDK_HASH_TYPE MD5)
|
||||||
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
set(XR_OPENXR_SDK_FILE OpenXR-SDK-${XR_OPENXR_SDK_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(WL_PROTOCOLS_VERSION 1.21)
|
|
||||||
set(WL_PROTOCOLS_FILE wayland-protocols-${WL_PROTOCOLS_VERSION}.tar.gz)
|
|
||||||
set(WL_PROTOCOLS_URI https://gitlab.freedesktop.org/wayland/wayland-protocols/-/archive/${WL_PROTOCOLS_VERSION}/${WL_PROTOCOLS_FILE})
|
|
||||||
set(WL_PROTOCOLS_HASH af5ca07e13517cdbab33504492cef54a)
|
|
||||||
set(WL_PROTOCOLS_HASH_TYPE MD5)
|
|
||||||
|
|
||||||
if(BLENDER_PLATFORM_ARM)
|
if(BLENDER_PLATFORM_ARM)
|
||||||
# Unreleased version with macOS arm support.
|
# Unreleased version with macOS arm support.
|
||||||
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
||||||
@@ -500,11 +494,5 @@ set(HARU_HASH 4f916aa49c3069b3a10850013c507460)
|
|||||||
set(HARU_HASH_TYPE MD5)
|
set(HARU_HASH_TYPE MD5)
|
||||||
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
set(HARU_FILE libharu-${HARU_VERSION}.tar.gz)
|
||||||
|
|
||||||
set(ZSTD_VERSION 1.5.0)
|
|
||||||
set(ZSTD_URI https://github.com/facebook/zstd/releases/download/v${ZSTD_VERSION}/zstd-${ZSTD_VERSION}.tar.gz)
|
|
||||||
set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94)
|
|
||||||
set(ZSTD_HASH_TYPE SHA256)
|
|
||||||
set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz)
|
|
||||||
|
|
||||||
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git)
|
||||||
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525)
|
||||||
|
@@ -1,27 +0,0 @@
|
|||||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
|
||||||
|
|
||||||
ExternalProject_Add(external_wayland_protocols
|
|
||||||
URL file://${PACKAGE_DIR}/${WL_PROTOCOLS_FILE}
|
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
|
||||||
URL_HASH ${WL_PROTOCOLS_HASH_TYPE}=${WL_PROTOCOLS_HASH}
|
|
||||||
PREFIX ${BUILD_DIR}/wayland-protocols
|
|
||||||
CONFIGURE_COMMAND meson --prefix ${LIBDIR}/wayland-protocols . ../external_wayland_protocols -Dtests=false
|
|
||||||
BUILD_COMMAND ninja
|
|
||||||
INSTALL_COMMAND ninja install
|
|
||||||
)
|
|
@@ -1,51 +0,0 @@
|
|||||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
# ***** END GPL LICENSE BLOCK *****
|
|
||||||
|
|
||||||
set(ZSTD_EXTRA_ARGS
|
|
||||||
-DZSTD_BUILD_PROGRAMS=OFF
|
|
||||||
-DZSTD_BUILD_SHARED=OFF
|
|
||||||
-DZSTD_BUILD_STATIC=ON
|
|
||||||
-DZSTD_BUILD_TESTS=OFF
|
|
||||||
-DZSTD_LEGACY_SUPPORT=OFF
|
|
||||||
-DZSTD_LZ4_SUPPORT=OFF
|
|
||||||
-DZSTD_LZMA_SUPPORT=OFF
|
|
||||||
-DZSTD_MULTITHREAD_SUPPORT=ON
|
|
||||||
-DZSTD_PROGRAMS_LINK_SHARED=OFF
|
|
||||||
-DZSTD_USE_STATIC_RUNTIME=OFF
|
|
||||||
-DZSTD_ZLIB_SUPPORT=OFF
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(external_zstd
|
|
||||||
URL file://${PACKAGE_DIR}/${ZSTD_FILE}
|
|
||||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
|
||||||
URL_HASH ${ZSTD_HASH_TYPE}=${ZSTD_HASH}
|
|
||||||
PREFIX ${BUILD_DIR}/zstd
|
|
||||||
SOURCE_SUBDIR build/cmake
|
|
||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/zstd ${DEFAULT_CMAKE_FLAGS} ${ZSTD_EXTRA_ARGS}
|
|
||||||
INSTALL_DIR ${LIBDIR}/zstd
|
|
||||||
)
|
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
if(BUILD_MODE STREQUAL Release)
|
|
||||||
ExternalProject_Add_Step(external_zstd after_install
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zstd/lib/zstd_static${LIBEXT} ${HARVEST_TARGET}/zstd/lib/zstd_static${LIBEXT}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/zstd/include/ ${HARVEST_TARGET}/zstd/include/
|
|
||||||
DEPENDEES install
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
@@ -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,14 +565,14 @@ 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
|
||||||
FFMPEG_SKIP=false
|
FFMPEG_SKIP=false
|
||||||
_ffmpeg_list_sep=";"
|
_ffmpeg_list_sep=";"
|
||||||
|
|
||||||
XR_OPENXR_VERSION="1.0.17"
|
XR_OPENXR_VERSION="1.0.14"
|
||||||
XR_OPENXR_VERSION_SHORT="1.0"
|
XR_OPENXR_VERSION_SHORT="1.0"
|
||||||
XR_OPENXR_VERSION_MIN="1.0.8"
|
XR_OPENXR_VERSION_MIN="1.0.8"
|
||||||
XR_OPENXR_VERSION_MAX="2.0"
|
XR_OPENXR_VERSION_MAX="2.0"
|
||||||
@@ -1073,7 +1073,7 @@ OPENVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/v
|
|||||||
#~ OPENVDB_SOURCE_REPO_BRANCH="dev"
|
#~ OPENVDB_SOURCE_REPO_BRANCH="dev"
|
||||||
|
|
||||||
NANOVDB_USE_REPO=false
|
NANOVDB_USE_REPO=false
|
||||||
NANOVDB_SOURCE_REPO_UID="dc37d8a631922e7bef46712947dc19b755f3e841"
|
NANOVDB_SOURCE_REPO_UID="e62f7a0bf1e27397223c61ddeaaf57edf111b77f"
|
||||||
NANOVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_SOURCE_REPO_UID}.tar.gz" )
|
NANOVDB_SOURCE=( "https://github.com/AcademySoftwareFoundation/openvdb/archive/${NANOVDB_SOURCE_REPO_UID}.tar.gz" )
|
||||||
|
|
||||||
ALEMBIC_USE_REPO=false
|
ALEMBIC_USE_REPO=false
|
||||||
@@ -1108,9 +1108,9 @@ FFMPEG_SOURCE=( "http://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.bz2" )
|
|||||||
|
|
||||||
XR_OPENXR_USE_REPO=false
|
XR_OPENXR_USE_REPO=false
|
||||||
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
XR_OPENXR_SOURCE=("https://github.com/KhronosGroup/OpenXR-SDK/archive/release-${XR_OPENXR_VERSION}.tar.gz")
|
||||||
XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
#~ XR_OPENXR_SOURCE_REPO=("https://github.com/KhronosGroup/OpenXR-SDK.git")
|
||||||
XR_OPENXR_REPO_UID="bf21ccb1007bb531b45d9978919a56ea5059c245"
|
#~ XR_OPENXR_REPO_UID="5900c51562769b03bea699dc0352cae56acb6419d"
|
||||||
XR_OPENXR_REPO_BRANCH="master"
|
#~ XR_OPENXR_REPO_BRANCH="master"
|
||||||
|
|
||||||
# C++11 is required now
|
# C++11 is required now
|
||||||
CXXFLAGS_BACK=$CXXFLAGS
|
CXXFLAGS_BACK=$CXXFLAGS
|
||||||
@@ -1128,7 +1128,6 @@ Those libraries should be available as packages in all recent distributions (opt
|
|||||||
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
* Basics of dev environment (cmake, gcc, svn , git, ...).
|
||||||
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
||||||
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
||||||
* libwayland-client0, libwayland-cursor0, libwayland-egl1, libxkbcommon0, libdbus-1-3, libegl1 (Wayland)
|
|
||||||
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
||||||
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
||||||
|
|
||||||
@@ -2738,7 +2737,7 @@ _init_openvdb() {
|
|||||||
_git=false
|
_git=false
|
||||||
_inst=$INST/openvdb-$OPENVDB_VERSION_SHORT
|
_inst=$INST/openvdb-$OPENVDB_VERSION_SHORT
|
||||||
_inst_shortcut=$INST/openvdb
|
_inst_shortcut=$INST/openvdb
|
||||||
|
|
||||||
_openvdb_source=$OPENVDB_SOURCE
|
_openvdb_source=$OPENVDB_SOURCE
|
||||||
if [ "$WITH_NANOVDB" = true ]; then
|
if [ "$WITH_NANOVDB" = true ]; then
|
||||||
_openvdb_source=$NANOVDB_SOURCE
|
_openvdb_source=$NANOVDB_SOURCE
|
||||||
@@ -2843,7 +2842,7 @@ compile_OPENVDB() {
|
|||||||
if [ -d $INST/blosc ]; then
|
if [ -d $INST/blosc ]; then
|
||||||
cmake_d="$cmake_d -D Blosc_ROOT=$INST/blosc"
|
cmake_d="$cmake_d -D Blosc_ROOT=$INST/blosc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cmake $cmake_d ..
|
cmake $cmake_d ..
|
||||||
|
|
||||||
make -j$THREADS install
|
make -j$THREADS install
|
||||||
@@ -3840,7 +3839,6 @@ install_DEB() {
|
|||||||
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
_packages="gawk cmake cmake-curses-gui build-essential libjpeg-dev libpng-dev libtiff-dev \
|
||||||
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
git libfreetype6-dev libfontconfig-dev libx11-dev flex bison libxxf86vm-dev \
|
||||||
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
libxcursor-dev libxi-dev wget libsqlite3-dev libxrandr-dev libxinerama-dev \
|
||||||
libwayland-dev wayland-protocols libegl-dev libxkbcommon-dev libdbus-1-dev linux-libc-dev \
|
|
||||||
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
||||||
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
||||||
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
||||||
@@ -4510,7 +4508,6 @@ install_RPM() {
|
|||||||
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
_packages="gcc gcc-c++ git make cmake tar bzip2 xz findutils flex bison fontconfig-devel \
|
||||||
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
libtiff-devel libjpeg-devel libpng-devel sqlite-devel fftw-devel SDL2-devel \
|
||||||
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
libX11-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel \
|
||||||
wayland-devel wayland-protocols-devel mesa-libEGL-devel libxkbcommon-devel dbus-devel kernel-headers \
|
|
||||||
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
||||||
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
||||||
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
||||||
|
@@ -68,32 +68,3 @@
|
|||||||
+
|
+
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
--- a/libavcodec/rl.c
|
|
||||||
+++ b/libavcodec/rl.c
|
|
||||||
@@ -71,7 +71,7 @@ av_cold void ff_rl_init(RLTable *rl,
|
|
||||||
av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
|
||||||
{
|
|
||||||
int i, q;
|
|
||||||
- VLC_TYPE table[1500][2] = {{0}};
|
|
||||||
+ VLC_TYPE (*table)[2] = av_calloc(sizeof(VLC_TYPE), 1500 * 2);
|
|
||||||
VLC vlc = { .table = table, .table_allocated = static_size };
|
|
||||||
av_assert0(static_size <= FF_ARRAY_ELEMS(table));
|
|
||||||
init_vlc(&vlc, 9, rl->n + 1, &rl->table_vlc[0][1], 4, 2, &rl->table_vlc[0][0], 4, 2, INIT_VLC_USE_NEW_STATIC);
|
|
||||||
@@ -80,8 +80,10 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
|
||||||
int qmul = q * 2;
|
|
||||||
int qadd = (q - 1) | 1;
|
|
||||||
|
|
||||||
- if (!rl->rl_vlc[q])
|
|
||||||
+ if (!rl->rl_vlc[q]){
|
|
||||||
+ av_free(table);
|
|
||||||
return;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (q == 0) {
|
|
||||||
qmul = 1;
|
|
||||||
@@ -113,4 +115,5 @@ av_cold void ff_rl_init_vlc(RLTable *rl, unsigned static_size)
|
|
||||||
rl->rl_vlc[q][i].run = run;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ av_free(table);
|
|
||||||
}
|
|
||||||
|
@@ -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):
|
||||||
|
@@ -8,9 +8,6 @@ IGNORE_SOURCE = (
|
|||||||
# specific source files
|
# specific source files
|
||||||
"extern/audaspace/",
|
"extern/audaspace/",
|
||||||
|
|
||||||
# Use for `WIN32` only.
|
|
||||||
"source/creator/blender_launcher_win32.c",
|
|
||||||
|
|
||||||
# specific source files
|
# specific source files
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp",
|
||||||
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
"extern/bullet2/src/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp",
|
||||||
|
@@ -82,7 +82,7 @@ def create_nb_project_main():
|
|||||||
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
||||||
make_exe_basename = os.path.basename(make_exe)
|
make_exe_basename = os.path.basename(make_exe)
|
||||||
|
|
||||||
# --------------- NetBeans specific.
|
# --------------- NB specific
|
||||||
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
defines = [("%s=%s" % cdef) if cdef[1] else cdef[0] for cdef in defines]
|
||||||
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
defines += [cdef.replace("#define", "").strip() for cdef in cmake_compiler_defines()]
|
||||||
|
|
||||||
|
@@ -29,7 +29,6 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -30,7 +30,6 @@ set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
|||||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
set(WITH_IMAGE_TIFF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
set(WITH_INPUT_NDOF ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_INPUT_IME ON CACHE BOOL "" FORCE)
|
|
||||||
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
set(WITH_INTERNATIONAL ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV ON CACHE BOOL "" FORCE)
|
||||||
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
set(WITH_LIBMV_SCHUR_SPECIALIZATIONS ON CACHE BOOL "" FORCE)
|
||||||
|
@@ -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":
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,12 +1,9 @@
|
|||||||
echo No explicit msvc version requested, autodetecting version.
|
echo No explicit msvc version requested, autodetecting version.
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2019.cmd"
|
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2017.cmd"
|
call "%~dp0\detect_msvc2017.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||||
|
|
||||||
call "%~dp0\detect_msvc2022.cmd"
|
call "%~dp0\detect_msvc2019.cmd"
|
||||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
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.
|
||||||
|
@@ -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
|
||||||
|
@@ -122,7 +122,7 @@ is a full-featured 3D application. It supports the entirety of the 3D pipeline -
|
|||||||
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
'''modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
|
||||||
|
|
||||||
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
||||||
r'''architectural and industrial visualizations, and scientific visualizations.
|
r'''architectural and industrial visualizatons, and scientific visualizations.
|
||||||
|
|
||||||
https://www.blender.org''')
|
https://www.blender.org''')
|
||||||
|
|
||||||
|
@@ -12,7 +12,6 @@ such cases, lock the interface (Render → Lock Interface or
|
|||||||
Below is an example of a mesh that is altered from a handler:
|
Below is an example of a mesh that is altered from a handler:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def frame_change_pre(scene):
|
def frame_change_pre(scene):
|
||||||
# A triangle that shifts in the z direction
|
# A triangle that shifts in the z direction
|
||||||
zshift = scene.frame_current * 0.1
|
zshift = scene.frame_current * 0.1
|
||||||
|
@@ -16,12 +16,10 @@ execution_queue = queue.Queue()
|
|||||||
def run_in_main_thread(function):
|
def run_in_main_thread(function):
|
||||||
execution_queue.put(function)
|
execution_queue.put(function)
|
||||||
|
|
||||||
|
|
||||||
def execute_queued_functions():
|
def execute_queued_functions():
|
||||||
while not execution_queue.empty():
|
while not execution_queue.empty():
|
||||||
function = execution_queue.get()
|
function = execution_queue.get()
|
||||||
function()
|
function()
|
||||||
return 1.0
|
return 1.0
|
||||||
|
|
||||||
|
|
||||||
bpy.app.timers.register(execute_queued_functions)
|
bpy.app.timers.register(execute_queued_functions)
|
||||||
|
@@ -31,13 +31,11 @@ owner = object()
|
|||||||
|
|
||||||
subscribe_to = bpy.context.object.location
|
subscribe_to = bpy.context.object.location
|
||||||
|
|
||||||
|
|
||||||
def msgbus_callback(*args):
|
def msgbus_callback(*args):
|
||||||
# This will print:
|
# This will print:
|
||||||
# Something changed! (1, 2, 3)
|
# Something changed! (1, 2, 3)
|
||||||
print("Something changed!", args)
|
print("Something changed!", args)
|
||||||
|
|
||||||
|
|
||||||
bpy.msgbus.subscribe_rna(
|
bpy.msgbus.subscribe_rna(
|
||||||
key=subscribe_to,
|
key=subscribe_to,
|
||||||
owner=owner,
|
owner=owner,
|
||||||
|
@@ -44,7 +44,7 @@ class OBJECT_OT_object_to_curve(bpy.types.Operator):
|
|||||||
# Remove temporary curve.
|
# Remove temporary curve.
|
||||||
obj.to_curve_clear()
|
obj.to_curve_clear()
|
||||||
# Invoke to_curve() with applying modifiers.
|
# Invoke to_curve() with applying modifiers.
|
||||||
curve_with_modifiers = obj.to_curve(depsgraph, apply_modifiers=True)
|
curve_with_modifiers = obj.to_curve(depsgraph, apply_modifiers = True)
|
||||||
self.report({'INFO'}, f"{len(curve_with_modifiers.splines)} splines in new curve with modifiers.")
|
self.report({'INFO'}, f"{len(curve_with_modifiers.splines)} splines in new curve with modifiers.")
|
||||||
# Remove temporary curve.
|
# Remove temporary curve.
|
||||||
obj.to_curve_clear()
|
obj.to_curve_clear()
|
||||||
|
@@ -21,7 +21,6 @@ batch = batch_for_shader(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def draw():
|
def draw():
|
||||||
shader.bind()
|
shader.bind()
|
||||||
shader.uniform_sampler("image", texture)
|
shader.uniform_sampler("image", texture)
|
||||||
|
@@ -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
|
||||||
|
@@ -1047,7 +1047,6 @@ context_type_map = {
|
|||||||
"annotation_data": ("GreasePencil", False),
|
"annotation_data": ("GreasePencil", False),
|
||||||
"annotation_data_owner": ("ID", False),
|
"annotation_data_owner": ("ID", False),
|
||||||
"armature": ("Armature", False),
|
"armature": ("Armature", False),
|
||||||
"asset_library": ("AssetLibraryReference", False),
|
|
||||||
"bone": ("Bone", False),
|
"bone": ("Bone", False),
|
||||||
"brush": ("Brush", False),
|
"brush": ("Brush", False),
|
||||||
"camera": ("Camera", False),
|
"camera": ("Camera", False),
|
||||||
@@ -1114,7 +1113,6 @@ context_type_map = {
|
|||||||
"texture_slot": ("MaterialTextureSlot", False),
|
"texture_slot": ("MaterialTextureSlot", False),
|
||||||
"texture_user": ("ID", False),
|
"texture_user": ("ID", False),
|
||||||
"texture_user_property": ("Property", False),
|
"texture_user_property": ("Property", False),
|
||||||
"ui_list": ("UIList", False),
|
|
||||||
"vertex_paint_object": ("Object", False),
|
"vertex_paint_object": ("Object", False),
|
||||||
"view_layer": ("ViewLayer", False),
|
"view_layer": ("ViewLayer", False),
|
||||||
"visible_bones": ("EditBone", True),
|
"visible_bones": ("EditBone", True),
|
||||||
|
@@ -265,12 +265,6 @@ protected:
|
|||||||
*/
|
*/
|
||||||
void setSpecs(Specs specs);
|
void setSpecs(Specs specs);
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the audio output specification of the device.
|
|
||||||
* \param specs The output specification.
|
|
||||||
*/
|
|
||||||
void setSpecs(DeviceSpecs specs);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Empty default constructor. To setup the device call the function create()
|
* Empty default constructor. To setup the device call the function create()
|
||||||
* and to uninitialize call destroy().
|
* and to uninitialize call destroy().
|
||||||
|
6
extern/audaspace/include/respec/Mixer.h
vendored
6
extern/audaspace/include/respec/Mixer.h
vendored
@@ -87,12 +87,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setSpecs(Specs specs);
|
void setSpecs(Specs specs);
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the target specification for superposing.
|
|
||||||
* \param specs The target specification.
|
|
||||||
*/
|
|
||||||
void setSpecs(DeviceSpecs specs);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mixes a buffer.
|
* Mixes a buffer.
|
||||||
* \param buffer The buffer to superpose.
|
* \param buffer The buffer to superpose.
|
||||||
|
@@ -78,7 +78,6 @@ void PulseAudioDevice::runMixingThread()
|
|||||||
if(shouldStop())
|
if(shouldStop())
|
||||||
{
|
{
|
||||||
AUD_pa_stream_cork(m_stream, 1, nullptr, nullptr);
|
AUD_pa_stream_cork(m_stream, 1, nullptr, nullptr);
|
||||||
AUD_pa_stream_flush(m_stream, nullptr, nullptr);
|
|
||||||
doStop();
|
doStop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -87,10 +86,7 @@ void PulseAudioDevice::runMixingThread()
|
|||||||
if(AUD_pa_stream_is_corked(m_stream))
|
if(AUD_pa_stream_is_corked(m_stream))
|
||||||
AUD_pa_stream_cork(m_stream, 0, nullptr, nullptr);
|
AUD_pa_stream_cork(m_stream, 0, nullptr, nullptr);
|
||||||
|
|
||||||
// similar to AUD_pa_mainloop_iterate(m_mainloop, false, nullptr); except with a longer timeout
|
AUD_pa_mainloop_iterate(m_mainloop, true, nullptr);
|
||||||
AUD_pa_mainloop_prepare(m_mainloop, 1 << 14);
|
|
||||||
AUD_pa_mainloop_poll(m_mainloop);
|
|
||||||
AUD_pa_mainloop_dispatch(m_mainloop);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,7 +24,6 @@ PULSEAUDIO_SYMBOL(pa_context_unref);
|
|||||||
PULSEAUDIO_SYMBOL(pa_stream_begin_write);
|
PULSEAUDIO_SYMBOL(pa_stream_begin_write);
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_connect_playback);
|
PULSEAUDIO_SYMBOL(pa_stream_connect_playback);
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_cork);
|
PULSEAUDIO_SYMBOL(pa_stream_cork);
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_flush);
|
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_is_corked);
|
PULSEAUDIO_SYMBOL(pa_stream_is_corked);
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_new);
|
PULSEAUDIO_SYMBOL(pa_stream_new);
|
||||||
PULSEAUDIO_SYMBOL(pa_stream_set_buffer_attr);
|
PULSEAUDIO_SYMBOL(pa_stream_set_buffer_attr);
|
||||||
@@ -36,6 +35,3 @@ PULSEAUDIO_SYMBOL(pa_mainloop_free);
|
|||||||
PULSEAUDIO_SYMBOL(pa_mainloop_get_api);
|
PULSEAUDIO_SYMBOL(pa_mainloop_get_api);
|
||||||
PULSEAUDIO_SYMBOL(pa_mainloop_new);
|
PULSEAUDIO_SYMBOL(pa_mainloop_new);
|
||||||
PULSEAUDIO_SYMBOL(pa_mainloop_iterate);
|
PULSEAUDIO_SYMBOL(pa_mainloop_iterate);
|
||||||
PULSEAUDIO_SYMBOL(pa_mainloop_prepare);
|
|
||||||
PULSEAUDIO_SYMBOL(pa_mainloop_poll);
|
|
||||||
PULSEAUDIO_SYMBOL(pa_mainloop_dispatch);
|
|
||||||
|
201
extern/audaspace/plugins/wasapi/WASAPIDevice.cpp
vendored
201
extern/audaspace/plugins/wasapi/WASAPIDevice.cpp
vendored
@@ -31,81 +31,65 @@ template <class T> void SafeRelease(T **ppT)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT WASAPIDevice::setupRenderClient(IAudioRenderClient*& render_client, UINT32& buffer_size)
|
void WASAPIDevice::runMixingThread()
|
||||||
{
|
{
|
||||||
const IID IID_IAudioRenderClient = __uuidof(IAudioRenderClient);
|
UINT32 buffer_size;
|
||||||
|
|
||||||
UINT32 padding;
|
UINT32 padding;
|
||||||
UINT32 length;
|
UINT32 length;
|
||||||
data_t* buffer;
|
data_t* buffer;
|
||||||
|
|
||||||
HRESULT result;
|
IAudioRenderClient* render_client = nullptr;
|
||||||
|
|
||||||
if(FAILED(result = m_audio_client->GetBufferSize(&buffer_size)))
|
{
|
||||||
return result;
|
std::lock_guard<ILockable> lock(*this);
|
||||||
|
|
||||||
if(FAILED(result = m_audio_client->GetService(IID_IAudioRenderClient, reinterpret_cast<void**>(&render_client))))
|
const IID IID_IAudioRenderClient = __uuidof(IAudioRenderClient);
|
||||||
return result;
|
|
||||||
|
|
||||||
if(FAILED(result = m_audio_client->GetCurrentPadding(&padding)))
|
if(FAILED(m_audio_client->GetBufferSize(&buffer_size)))
|
||||||
return result;
|
goto init_error;
|
||||||
|
|
||||||
length = buffer_size - padding;
|
if(FAILED(m_audio_client->GetService(IID_IAudioRenderClient, reinterpret_cast<void**>(&render_client))))
|
||||||
|
goto init_error;
|
||||||
|
|
||||||
if(FAILED(result = render_client->GetBuffer(length, &buffer)))
|
if(FAILED(m_audio_client->GetCurrentPadding(&padding)))
|
||||||
return result;
|
goto init_error;
|
||||||
|
|
||||||
mix((data_t*)buffer, length);
|
length = buffer_size - padding;
|
||||||
|
|
||||||
if(FAILED(result = render_client->ReleaseBuffer(length, 0)))
|
if(FAILED(render_client->GetBuffer(length, &buffer)))
|
||||||
return result;
|
goto init_error;
|
||||||
|
|
||||||
|
mix((data_t*)buffer, length);
|
||||||
|
|
||||||
|
if(FAILED(render_client->ReleaseBuffer(length, 0)))
|
||||||
|
{
|
||||||
|
init_error:
|
||||||
|
SafeRelease(&render_client);
|
||||||
|
doStop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_audio_client->Start();
|
m_audio_client->Start();
|
||||||
|
|
||||||
return result;
|
auto sleepDuration = std::chrono::milliseconds(buffer_size * 1000 / int(m_specs.rate) / 2);
|
||||||
}
|
|
||||||
|
|
||||||
void WASAPIDevice::runMixingThread()
|
|
||||||
{
|
|
||||||
UINT32 buffer_size;
|
|
||||||
|
|
||||||
IAudioRenderClient* render_client = nullptr;
|
|
||||||
|
|
||||||
std::chrono::milliseconds sleep_duration;
|
|
||||||
|
|
||||||
bool run_init = true;
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
HRESULT result = S_OK;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
UINT32 padding;
|
|
||||||
UINT32 length;
|
|
||||||
data_t* buffer;
|
|
||||||
std::lock_guard<ILockable> lock(*this);
|
std::lock_guard<ILockable> lock(*this);
|
||||||
|
|
||||||
if(run_init)
|
if(FAILED(m_audio_client->GetCurrentPadding(&padding)))
|
||||||
{
|
|
||||||
result = setupRenderClient(render_client, buffer_size);
|
|
||||||
|
|
||||||
if(FAILED(result))
|
|
||||||
goto stop_thread;
|
|
||||||
|
|
||||||
sleep_duration = std::chrono::milliseconds(buffer_size * 1000 / int(m_specs.rate) / 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(FAILED(result = m_audio_client->GetCurrentPadding(&padding)))
|
|
||||||
goto stop_thread;
|
goto stop_thread;
|
||||||
|
|
||||||
length = buffer_size - padding;
|
length = buffer_size - padding;
|
||||||
|
|
||||||
if(FAILED(result = render_client->GetBuffer(length, &buffer)))
|
if(FAILED(render_client->GetBuffer(length, &buffer)))
|
||||||
goto stop_thread;
|
goto stop_thread;
|
||||||
|
|
||||||
mix((data_t*)buffer, length);
|
mix((data_t*)buffer, length);
|
||||||
|
|
||||||
if(FAILED(result = render_client->ReleaseBuffer(length, 0)))
|
if(FAILED(render_client->ReleaseBuffer(length, 0)))
|
||||||
goto stop_thread;
|
goto stop_thread;
|
||||||
|
|
||||||
// stop thread
|
// stop thread
|
||||||
@@ -114,51 +98,53 @@ void WASAPIDevice::runMixingThread()
|
|||||||
stop_thread:
|
stop_thread:
|
||||||
m_audio_client->Stop();
|
m_audio_client->Stop();
|
||||||
SafeRelease(&render_client);
|
SafeRelease(&render_client);
|
||||||
|
doStop();
|
||||||
if(result == AUDCLNT_E_DEVICE_INVALIDATED)
|
return;
|
||||||
{
|
|
||||||
DeviceSpecs specs = m_specs;
|
|
||||||
if(!setupDevice(specs))
|
|
||||||
result = S_FALSE;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
setSpecs(specs);
|
|
||||||
|
|
||||||
run_init = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(result != AUDCLNT_E_DEVICE_INVALIDATED)
|
|
||||||
{
|
|
||||||
doStop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::this_thread::sleep_for(sleep_duration);
|
std::this_thread::sleep_for(sleepDuration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WASAPIDevice::setupDevice(DeviceSpecs &specs)
|
WASAPIDevice::WASAPIDevice(DeviceSpecs specs, int buffersize) :
|
||||||
|
m_imm_device_enumerator(nullptr),
|
||||||
|
m_imm_device(nullptr),
|
||||||
|
m_audio_client(nullptr),
|
||||||
|
|
||||||
|
m_wave_format_extensible({})
|
||||||
{
|
{
|
||||||
SafeRelease(&m_audio_client);
|
// initialize COM if it hasn't happened yet
|
||||||
SafeRelease(&m_imm_device);
|
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
||||||
|
|
||||||
|
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
|
||||||
|
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
|
||||||
const IID IID_IAudioClient = __uuidof(IAudioClient);
|
const IID IID_IAudioClient = __uuidof(IAudioClient);
|
||||||
|
|
||||||
if(FAILED(m_imm_device_enumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_imm_device)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if(FAILED(m_imm_device->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, reinterpret_cast<void**>(&m_audio_client))))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
WAVEFORMATEXTENSIBLE wave_format_extensible_closest_match;
|
WAVEFORMATEXTENSIBLE wave_format_extensible_closest_match;
|
||||||
WAVEFORMATEXTENSIBLE* closest_match_pointer = &wave_format_extensible_closest_match;
|
WAVEFORMATEXTENSIBLE* closest_match_pointer = &wave_format_extensible_closest_match;
|
||||||
|
|
||||||
|
HRESULT result;
|
||||||
|
|
||||||
REFERENCE_TIME minimum_time = 0;
|
REFERENCE_TIME minimum_time = 0;
|
||||||
REFERENCE_TIME buffer_duration;
|
REFERENCE_TIME buffer_duration;
|
||||||
|
|
||||||
|
if(FAILED(CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, reinterpret_cast<void**>(&m_imm_device_enumerator))))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if(FAILED(m_imm_device_enumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_imm_device)))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if(FAILED(m_imm_device->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, reinterpret_cast<void**>(&m_audio_client))))
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if(specs.channels == CHANNELS_INVALID)
|
||||||
|
specs.channels = CHANNELS_STEREO;
|
||||||
|
if(specs.format == FORMAT_INVALID)
|
||||||
|
specs.format = FORMAT_FLOAT32;
|
||||||
|
if(specs.rate == RATE_INVALID)
|
||||||
|
specs.rate = RATE_48000;
|
||||||
|
|
||||||
switch(specs.format)
|
switch(specs.format)
|
||||||
{
|
{
|
||||||
case FORMAT_U8:
|
case FORMAT_U8:
|
||||||
@@ -217,14 +203,12 @@ bool WASAPIDevice::setupDevice(DeviceSpecs &specs)
|
|||||||
m_wave_format_extensible.Format.cbSize = 22;
|
m_wave_format_extensible.Format.cbSize = 22;
|
||||||
m_wave_format_extensible.Samples.wValidBitsPerSample = m_wave_format_extensible.Format.wBitsPerSample;
|
m_wave_format_extensible.Samples.wValidBitsPerSample = m_wave_format_extensible.Format.wBitsPerSample;
|
||||||
|
|
||||||
HRESULT result = m_audio_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, reinterpret_cast<const WAVEFORMATEX*>(&m_wave_format_extensible), reinterpret_cast<WAVEFORMATEX**>(&closest_match_pointer));
|
result = m_audio_client->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, reinterpret_cast<const WAVEFORMATEX*>(&m_wave_format_extensible), reinterpret_cast<WAVEFORMATEX**>(&closest_match_pointer));
|
||||||
|
|
||||||
if(result == S_FALSE)
|
if(result == S_FALSE)
|
||||||
{
|
{
|
||||||
bool errored = false;
|
|
||||||
|
|
||||||
if(closest_match_pointer->Format.wFormatTag != WAVE_FORMAT_EXTENSIBLE)
|
if(closest_match_pointer->Format.wFormatTag != WAVE_FORMAT_EXTENSIBLE)
|
||||||
goto closest_match_error;
|
goto error;
|
||||||
|
|
||||||
specs.channels = Channels(closest_match_pointer->Format.nChannels);
|
specs.channels = Channels(closest_match_pointer->Format.nChannels);
|
||||||
specs.rate = closest_match_pointer->Format.nSamplesPerSec;
|
specs.rate = closest_match_pointer->Format.nSamplesPerSec;
|
||||||
@@ -236,7 +220,7 @@ bool WASAPIDevice::setupDevice(DeviceSpecs &specs)
|
|||||||
else if(closest_match_pointer->Format.wBitsPerSample == 64)
|
else if(closest_match_pointer->Format.wBitsPerSample == 64)
|
||||||
specs.format = FORMAT_FLOAT64;
|
specs.format = FORMAT_FLOAT64;
|
||||||
else
|
else
|
||||||
goto closest_match_error;
|
goto error;
|
||||||
}
|
}
|
||||||
else if(closest_match_pointer->SubFormat == KSDATAFORMAT_SUBTYPE_PCM)
|
else if(closest_match_pointer->SubFormat == KSDATAFORMAT_SUBTYPE_PCM)
|
||||||
{
|
{
|
||||||
@@ -255,81 +239,44 @@ bool WASAPIDevice::setupDevice(DeviceSpecs &specs)
|
|||||||
specs.format = FORMAT_S32;
|
specs.format = FORMAT_S32;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto closest_match_error;
|
goto error;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
goto closest_match_error;
|
goto error;
|
||||||
|
|
||||||
m_wave_format_extensible = *closest_match_pointer;
|
m_wave_format_extensible = *closest_match_pointer;
|
||||||
|
|
||||||
if(false)
|
|
||||||
{
|
|
||||||
closest_match_error:
|
|
||||||
errored = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(closest_match_pointer != &wave_format_extensible_closest_match)
|
if(closest_match_pointer != &wave_format_extensible_closest_match)
|
||||||
{
|
{
|
||||||
CoTaskMemFree(closest_match_pointer);
|
CoTaskMemFree(closest_match_pointer);
|
||||||
closest_match_pointer = &wave_format_extensible_closest_match;
|
closest_match_pointer = &wave_format_extensible_closest_match;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(errored)
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
else if(FAILED(result))
|
else if(FAILED(result))
|
||||||
return false;
|
goto error;
|
||||||
|
|
||||||
if(FAILED(m_audio_client->GetDevicePeriod(nullptr, &minimum_time)))
|
if(FAILED(m_audio_client->GetDevicePeriod(nullptr, &minimum_time)))
|
||||||
return false;
|
goto error;
|
||||||
|
|
||||||
buffer_duration = REFERENCE_TIME(m_buffersize) * REFERENCE_TIME(10000000) / REFERENCE_TIME(specs.rate);
|
buffer_duration = REFERENCE_TIME(buffersize) * REFERENCE_TIME(10000000) / REFERENCE_TIME(specs.rate);
|
||||||
|
|
||||||
if(minimum_time > buffer_duration)
|
if(minimum_time > buffer_duration)
|
||||||
buffer_duration = minimum_time;
|
buffer_duration = minimum_time;
|
||||||
|
|
||||||
if(FAILED(m_audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, buffer_duration, 0, reinterpret_cast<WAVEFORMATEX*>(&m_wave_format_extensible), nullptr)))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
WASAPIDevice::WASAPIDevice(DeviceSpecs specs, int buffersize) :
|
|
||||||
m_buffersize(buffersize),
|
|
||||||
m_imm_device_enumerator(nullptr),
|
|
||||||
m_imm_device(nullptr),
|
|
||||||
m_audio_client(nullptr),
|
|
||||||
|
|
||||||
m_wave_format_extensible({})
|
|
||||||
{
|
|
||||||
// initialize COM if it hasn't happened yet
|
|
||||||
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
|
||||||
|
|
||||||
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
|
|
||||||
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
|
|
||||||
|
|
||||||
if(specs.channels == CHANNELS_INVALID)
|
|
||||||
specs.channels = CHANNELS_STEREO;
|
|
||||||
if(specs.format == FORMAT_INVALID)
|
|
||||||
specs.format = FORMAT_FLOAT32;
|
|
||||||
if(specs.rate == RATE_INVALID)
|
|
||||||
specs.rate = RATE_48000;
|
|
||||||
|
|
||||||
if(FAILED(CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, reinterpret_cast<void**>(&m_imm_device_enumerator))))
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
if(!setupDevice(specs))
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
m_specs = specs;
|
m_specs = specs;
|
||||||
|
|
||||||
|
if(FAILED(m_audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, buffer_duration, 0, reinterpret_cast<WAVEFORMATEX*>(&m_wave_format_extensible), nullptr)))
|
||||||
|
goto error;
|
||||||
|
|
||||||
create();
|
create();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
if(closest_match_pointer != &wave_format_extensible_closest_match)
|
||||||
|
CoTaskMemFree(closest_match_pointer);
|
||||||
SafeRelease(&m_imm_device);
|
SafeRelease(&m_imm_device);
|
||||||
SafeRelease(&m_imm_device_enumerator);
|
SafeRelease(&m_imm_device_enumerator);
|
||||||
SafeRelease(&m_audio_client);
|
SafeRelease(&m_audio_client);
|
||||||
|
@@ -43,21 +43,16 @@ AUD_NAMESPACE_BEGIN
|
|||||||
class AUD_PLUGIN_API WASAPIDevice : public ThreadedDevice
|
class AUD_PLUGIN_API WASAPIDevice : public ThreadedDevice
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int m_buffersize;
|
|
||||||
IMMDeviceEnumerator* m_imm_device_enumerator;
|
IMMDeviceEnumerator* m_imm_device_enumerator;
|
||||||
IMMDevice* m_imm_device;
|
IMMDevice* m_imm_device;
|
||||||
IAudioClient* m_audio_client;
|
IAudioClient* m_audio_client;
|
||||||
WAVEFORMATEXTENSIBLE m_wave_format_extensible;
|
WAVEFORMATEXTENSIBLE m_wave_format_extensible;
|
||||||
|
|
||||||
AUD_LOCAL HRESULT setupRenderClient(IAudioRenderClient*& render_client, UINT32& buffer_size);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Streaming thread main function.
|
* Streaming thread main function.
|
||||||
*/
|
*/
|
||||||
AUD_LOCAL void runMixingThread();
|
AUD_LOCAL void runMixingThread();
|
||||||
|
|
||||||
AUD_LOCAL bool setupDevice(DeviceSpecs& specs);
|
|
||||||
|
|
||||||
// delete copy constructor and operator=
|
// delete copy constructor and operator=
|
||||||
WASAPIDevice(const WASAPIDevice&) = delete;
|
WASAPIDevice(const WASAPIDevice&) = delete;
|
||||||
WASAPIDevice& operator=(const WASAPIDevice&) = delete;
|
WASAPIDevice& operator=(const WASAPIDevice&) = delete;
|
||||||
|
22
extern/audaspace/src/devices/SoftwareDevice.cpp
vendored
22
extern/audaspace/src/devices/SoftwareDevice.cpp
vendored
@@ -756,7 +756,6 @@ void SoftwareDevice::mix(data_t* buffer, int length)
|
|||||||
// get the buffer from the source
|
// get the buffer from the source
|
||||||
pos = 0;
|
pos = 0;
|
||||||
len = length;
|
len = length;
|
||||||
eos = false;
|
|
||||||
|
|
||||||
// update 3D Info
|
// update 3D Info
|
||||||
sound->update();
|
sound->update();
|
||||||
@@ -843,27 +842,6 @@ void SoftwareDevice::setSpecs(Specs specs)
|
|||||||
{
|
{
|
||||||
sound->setSpecs(specs);
|
sound->setSpecs(specs);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(auto& sound : m_pausedSounds)
|
|
||||||
{
|
|
||||||
sound->setSpecs(specs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SoftwareDevice::setSpecs(DeviceSpecs specs)
|
|
||||||
{
|
|
||||||
m_specs = specs;
|
|
||||||
m_mixer->setSpecs(specs);
|
|
||||||
|
|
||||||
for(auto& sound : m_playingSounds)
|
|
||||||
{
|
|
||||||
sound->setSpecs(specs.specs);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(auto& sound : m_pausedSounds)
|
|
||||||
{
|
|
||||||
sound->setSpecs(specs.specs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SoftwareDevice::SoftwareDevice()
|
SoftwareDevice::SoftwareDevice()
|
||||||
|
30
extern/audaspace/src/respec/Mixer.cpp
vendored
30
extern/audaspace/src/respec/Mixer.cpp
vendored
@@ -21,25 +21,9 @@
|
|||||||
|
|
||||||
AUD_NAMESPACE_BEGIN
|
AUD_NAMESPACE_BEGIN
|
||||||
|
|
||||||
Mixer::Mixer(DeviceSpecs specs)
|
Mixer::Mixer(DeviceSpecs specs) :
|
||||||
|
m_specs(specs)
|
||||||
{
|
{
|
||||||
setSpecs(specs);
|
|
||||||
}
|
|
||||||
|
|
||||||
DeviceSpecs Mixer::getSpecs() const
|
|
||||||
{
|
|
||||||
return m_specs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Mixer::setSpecs(Specs specs)
|
|
||||||
{
|
|
||||||
m_specs.specs = specs;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Mixer::setSpecs(DeviceSpecs specs)
|
|
||||||
{
|
|
||||||
m_specs = specs;
|
|
||||||
|
|
||||||
switch(m_specs.format)
|
switch(m_specs.format)
|
||||||
{
|
{
|
||||||
case FORMAT_U8:
|
case FORMAT_U8:
|
||||||
@@ -70,6 +54,16 @@ void Mixer::setSpecs(DeviceSpecs specs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DeviceSpecs Mixer::getSpecs() const
|
||||||
|
{
|
||||||
|
return m_specs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mixer::setSpecs(Specs specs)
|
||||||
|
{
|
||||||
|
m_specs.specs = specs;
|
||||||
|
}
|
||||||
|
|
||||||
void Mixer::clear(int length)
|
void Mixer::clear(int length)
|
||||||
{
|
{
|
||||||
m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_specs));
|
m_buffer.assureSize(length * AUD_SAMPLE_SIZE(m_specs));
|
||||||
|
1
extern/glog/README.blender
vendored
1
extern/glog/README.blender
vendored
@@ -7,4 +7,3 @@ Local modifications:
|
|||||||
checks for functions and so are needed.
|
checks for functions and so are needed.
|
||||||
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
* Added special definitions of HAVE_SNPRINTF and HAVE_LIB_GFLAGS
|
||||||
in Windows' specific config.h.
|
in Windows' specific config.h.
|
||||||
* Silenced syscall deprecation warnings on macOS >= 10.12.
|
|
||||||
|
2
extern/glog/src/raw_logging.cc
vendored
2
extern/glog/src/raw_logging.cc
vendored
@@ -59,7 +59,7 @@
|
|||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)) && (!(defined OS_MACOSX))
|
#if defined(HAVE_SYSCALL_H) || defined(HAVE_SYS_SYSCALL_H)
|
||||||
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
# define safe_write(fd, s, len) syscall(SYS_write, fd, s, len)
|
||||||
#else
|
#else
|
||||||
// Not so safe, but what can you do?
|
// Not so safe, but what can you do?
|
||||||
|
6
extern/glog/src/utilities.cc
vendored
6
extern/glog/src/utilities.cc
vendored
@@ -259,13 +259,7 @@ pid_t GetTID() {
|
|||||||
#endif
|
#endif
|
||||||
static bool lacks_gettid = false;
|
static bool lacks_gettid = false;
|
||||||
if (!lacks_gettid) {
|
if (!lacks_gettid) {
|
||||||
#ifdef OS_MACOSX
|
|
||||||
uint64_t tid64;
|
|
||||||
const int error = pthread_threadid_np(NULL, &tid64);
|
|
||||||
pid_t tid = error ? -1 : (pid_t)tid64;
|
|
||||||
#else
|
|
||||||
pid_t tid = syscall(__NR_gettid);
|
pid_t tid = syscall(__NR_gettid);
|
||||||
#endif
|
|
||||||
if (tid != -1) {
|
if (tid != -1) {
|
||||||
return tid;
|
return tid;
|
||||||
}
|
}
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
@@ -32,7 +32,7 @@
|
|||||||
* - #TPOOL_STRUCT: Name for pool struct name.
|
* - #TPOOL_STRUCT: Name for pool struct name.
|
||||||
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
* - #TPOOL_CHUNK_SIZE: Chunk size (optional), use 64kb when not defined.
|
||||||
*
|
*
|
||||||
* \note #TPOOL_ALLOC_TYPE must be at least `sizeof(void *)`.
|
* \note #TPOOL_ALLOC_TYPE must be at least ``sizeof(void *)``.
|
||||||
*
|
*
|
||||||
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
* Defines the API, uses #TPOOL_IMPL_PREFIX to prefix each function.
|
||||||
*
|
*
|
||||||
|
@@ -49,9 +49,9 @@
|
|||||||
|
|
||||||
#include "atomic_ops_utils.h"
|
#include "atomic_ops_utils.h"
|
||||||
|
|
||||||
#if defined(__arm__) || defined(__riscv)
|
#if defined(__arm__)
|
||||||
/* Attempt to fix compilation error on Debian armel and RISC-V kernels.
|
/* Attempt to fix compilation error on Debian armel kernel.
|
||||||
* Both architectures do have both 32 and 64bit atomics, however
|
* arm7 architecture does have both 32 and 64bit atomics, however
|
||||||
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
* its gcc doesn't have __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n defined.
|
||||||
*/
|
*/
|
||||||
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
# define JE_FORCE_SYNC_COMPARE_AND_SWAP_1
|
||||||
|
@@ -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()
|
||||||
|
@@ -482,7 +482,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
transparent_max_bounces: IntProperty(
|
transparent_max_bounces: IntProperty(
|
||||||
name="Transparent Max Bounces",
|
name="Transparent Max Bounces",
|
||||||
description="Maximum number of transparent bounces. This is independent of maximum number of other bounces ",
|
description="Maximum number of transparent bounces",
|
||||||
min=0, max=1024,
|
min=0, max=1024,
|
||||||
default=8,
|
default=8,
|
||||||
)
|
)
|
||||||
@@ -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",
|
||||||
|
@@ -485,12 +485,10 @@ class CYCLES_RENDER_PT_light_paths_max_bounces(CyclesButtonsPanel, Panel):
|
|||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.prop(cscene, "diffuse_bounces", text="Diffuse")
|
col.prop(cscene, "diffuse_bounces", text="Diffuse")
|
||||||
col.prop(cscene, "glossy_bounces", text="Glossy")
|
col.prop(cscene, "glossy_bounces", text="Glossy")
|
||||||
|
col.prop(cscene, "transparent_max_bounces", text="Transparency")
|
||||||
col.prop(cscene, "transmission_bounces", text="Transmission")
|
col.prop(cscene, "transmission_bounces", text="Transmission")
|
||||||
col.prop(cscene, "volume_bounces", text="Volume")
|
col.prop(cscene, "volume_bounces", text="Volume")
|
||||||
|
|
||||||
col = layout.column(align=True)
|
|
||||||
col.prop(cscene, "transparent_max_bounces", text="Transparent")
|
|
||||||
|
|
||||||
|
|
||||||
class CYCLES_RENDER_PT_light_paths_clamping(CyclesButtonsPanel, Panel):
|
class CYCLES_RENDER_PT_light_paths_clamping(CyclesButtonsPanel, Panel):
|
||||||
bl_label = "Clamping"
|
bl_label = "Clamping"
|
||||||
@@ -823,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"
|
||||||
@@ -1136,7 +1129,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
col = row.column(align=True)
|
col = row.column(align=True)
|
||||||
col.operator("object.material_slot_add", icon='ADD', text="")
|
col.operator("object.material_slot_add", icon='ADD', text="")
|
||||||
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
||||||
col.separator()
|
|
||||||
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
||||||
|
|
||||||
if is_sortable:
|
if is_sortable:
|
||||||
@@ -1151,15 +1144,16 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||||||
row.operator("object.material_slot_select", text="Select")
|
row.operator("object.material_slot_select", text="Select")
|
||||||
row.operator("object.material_slot_deselect", text="Deselect")
|
row.operator("object.material_slot_deselect", text="Deselect")
|
||||||
|
|
||||||
row = layout.row()
|
split = layout.split(factor=0.65)
|
||||||
|
|
||||||
if ob:
|
if ob:
|
||||||
row.template_ID(ob, "active_material", new="material.new")
|
split.template_ID(ob, "active_material", new="material.new")
|
||||||
|
row = split.row()
|
||||||
|
|
||||||
if slot:
|
if slot:
|
||||||
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
row.prop(slot, "link", text="")
|
||||||
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
else:
|
||||||
|
row.label()
|
||||||
elif mat:
|
elif mat:
|
||||||
split.template_ID(space, "pin_id")
|
split.template_ID(space, "pin_id")
|
||||||
split.separator()
|
split.separator()
|
||||||
@@ -1224,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):
|
||||||
@@ -2328,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;
|
||||||
|
|
||||||
|
@@ -137,9 +137,9 @@ bool BlenderImageLoader::load_pixels(const ImageMetaData &metadata,
|
|||||||
/* Premultiply, byte images are always straight for Blender. */
|
/* Premultiply, byte images are always straight for Blender. */
|
||||||
unsigned char *cp = (unsigned char *)pixels;
|
unsigned char *cp = (unsigned char *)pixels;
|
||||||
for (size_t i = 0; i < num_pixels; i++, cp += channels) {
|
for (size_t i = 0; i < num_pixels; i++, cp += channels) {
|
||||||
cp[0] = (cp[0] * cp[3]) / 255;
|
cp[0] = (cp[0] * cp[3]) >> 8;
|
||||||
cp[1] = (cp[1] * cp[3]) / 255;
|
cp[1] = (cp[1] * cp[3]) >> 8;
|
||||||
cp[2] = (cp[2] * cp[3]) / 255;
|
cp[2] = (cp[2] * cp[3]) >> 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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())
|
||||||
|
@@ -109,23 +109,23 @@ void BlenderSync::sync_object_motion_init(BL::Object &b_parent, BL::Object &b_ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
Geometry *geom = object->get_geometry();
|
Geometry *geom = object->get_geometry();
|
||||||
|
geom->set_use_motion_blur(false);
|
||||||
|
geom->set_motion_steps(0);
|
||||||
|
|
||||||
int motion_steps = 0;
|
uint motion_steps;
|
||||||
bool use_motion_blur = false;
|
|
||||||
|
|
||||||
if (need_motion == Scene::MOTION_BLUR) {
|
if (need_motion == Scene::MOTION_BLUR) {
|
||||||
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
motion_steps = object_motion_steps(b_parent, b_ob, Object::MAX_MOTION_STEPS);
|
||||||
|
geom->set_motion_steps(motion_steps);
|
||||||
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
if (motion_steps && object_use_deform_motion(b_parent, b_ob)) {
|
||||||
use_motion_blur = true;
|
geom->set_use_motion_blur(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
motion_steps = 3;
|
motion_steps = 3;
|
||||||
|
geom->set_motion_steps(motion_steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
geom->set_use_motion_blur(use_motion_blur);
|
|
||||||
geom->set_motion_steps(motion_steps);
|
|
||||||
|
|
||||||
motion.resize(motion_steps, transform_empty());
|
motion.resize(motion_steps, transform_empty());
|
||||||
|
|
||||||
if (motion_steps) {
|
if (motion_steps) {
|
||||||
@@ -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(
|
||||||
@@ -404,6 +405,8 @@ void BlenderSync::sync_film(BL::SpaceView3D &b_v3d)
|
|||||||
|
|
||||||
Film *film = scene->film;
|
Film *film = scene->film;
|
||||||
|
|
||||||
|
vector<Pass> prevpasses = scene->passes;
|
||||||
|
|
||||||
if (b_v3d) {
|
if (b_v3d) {
|
||||||
film->set_display_pass(update_viewport_display_passes(b_v3d, scene->passes));
|
film->set_display_pass(update_viewport_display_passes(b_v3d, scene->passes));
|
||||||
}
|
}
|
||||||
@@ -433,6 +436,11 @@ void BlenderSync::sync_film(BL::SpaceView3D &b_v3d)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Pass::equals(prevpasses, scene->passes)) {
|
||||||
|
film->tag_passes_update(scene, prevpasses, false);
|
||||||
|
film->tag_modified();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Render Layer */
|
/* Render Layer */
|
||||||
@@ -448,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();
|
||||||
@@ -596,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());
|
||||||
}
|
}
|
||||||
@@ -742,13 +746,10 @@ vector<Pass> BlenderSync::sync_render_passes(BL::Scene &b_scene,
|
|||||||
DENOISING_CLEAN_ALL_PASSES);
|
DENOISING_CLEAN_ALL_PASSES);
|
||||||
scene->film->set_denoising_prefiltered_pass(denoising.store_passes &&
|
scene->film->set_denoising_prefiltered_pass(denoising.store_passes &&
|
||||||
denoising.type == DENOISER_NLM);
|
denoising.type == DENOISER_NLM);
|
||||||
scene->film->set_pass_alpha_threshold(b_view_layer.pass_alpha_threshold());
|
|
||||||
|
|
||||||
if (!Pass::equals(passes, scene->passes)) {
|
scene->film->set_pass_alpha_threshold(b_view_layer.pass_alpha_threshold());
|
||||||
scene->film->tag_passes_update(scene, passes);
|
scene->film->tag_passes_update(scene, passes);
|
||||||
scene->film->tag_modified();
|
scene->integrator->tag_update(scene, Integrator::UPDATE_ALL);
|
||||||
scene->integrator->tag_update(scene, Integrator::UPDATE_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return passes;
|
return passes;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
|
@@ -40,8 +40,8 @@ BlenderViewportParameters::BlenderViewportParameters(BL::SpaceView3D &b_v3d)
|
|||||||
BL::View3DShading shading = b_v3d.shading();
|
BL::View3DShading shading = b_v3d.shading();
|
||||||
PointerRNA cshading = RNA_pointer_get(&shading.ptr, "cycles");
|
PointerRNA cshading = RNA_pointer_get(&shading.ptr, "cycles");
|
||||||
|
|
||||||
/* We only copy the shading parameters if we are in look-dev mode.
|
/* We only copy the shading parameters if we are in look dev mode. otherwise
|
||||||
* Otherwise defaults are being used. These defaults mimic normal render settings. */
|
* defaults are being used. These defaults mimic normal render settings */
|
||||||
if (shading.type() == BL::View3DShading::type_RENDERED) {
|
if (shading.type() == BL::View3DShading::type_RENDERED) {
|
||||||
use_scene_world = shading.use_scene_world_render();
|
use_scene_world = shading.use_scene_world_render();
|
||||||
use_scene_lights = shading.use_scene_lights_render();
|
use_scene_lights = shading.use_scene_lights_render();
|
||||||
|
@@ -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,86 +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 */
|
|
||||||
|
|
||||||
object_normal_transform(kg, sd, &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;
|
||||||
|
|
||||||
|
@@ -237,7 +237,7 @@ ccl_device bool curve_intersect_iterative(const float3 ray_dir,
|
|||||||
return false; /* Rejects NaNs */
|
return false; /* Rejects NaNs */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Back-face culling. */
|
/* Backface culling. */
|
||||||
const float3 R = normalize(Q - P);
|
const float3 R = normalize(Q - P);
|
||||||
const float3 U = dradiusdu * R + dPdu;
|
const float3 U = dradiusdu * R + dPdu;
|
||||||
const float3 V = cross(dPdu, R);
|
const float3 V = cross(dPdu, R);
|
||||||
@@ -458,12 +458,10 @@ ccl_device_inline bool cylinder_culling_test(const float2 p1, const float2 p2, c
|
|||||||
return num * num <= r * r * den2;
|
return num * num <= r * r * den2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*! Intersects a ray with a quad with backface culling
|
||||||
* Intersects a ray with a quad with back-face culling
|
* enabled. The quad v0,v1,v2,v3 is split into two triangles
|
||||||
* enabled. The quad v0,v1,v2,v3 is split into two triangles
|
* v0,v1,v3 and v2,v3,v1. The edge v1,v2 decides which of the two
|
||||||
* v0,v1,v3 and v2,v3,v1. The edge v1,v2 decides which of the two
|
* triangles gets intersected. */
|
||||||
* triangles gets intersected.
|
|
||||||
*/
|
|
||||||
ccl_device_inline bool ribbon_intersect_quad(const float ray_tfar,
|
ccl_device_inline bool ribbon_intersect_quad(const float ray_tfar,
|
||||||
const float3 quad_v0,
|
const float3 quad_v0,
|
||||||
const float3 quad_v1,
|
const float3 quad_v1,
|
||||||
|
@@ -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
|
||||||
|
@@ -40,7 +40,7 @@ ccl_device_noinline void compute_light_pass(
|
|||||||
/* Evaluate surface shader. */
|
/* Evaluate surface shader. */
|
||||||
shader_eval_surface(kg, sd, &state, NULL, state.flag);
|
shader_eval_surface(kg, sd, &state, NULL, state.flag);
|
||||||
|
|
||||||
/* TODO: disable more closures we don't need besides transparent. */
|
/* TODO, disable more closures we don't need besides transparent */
|
||||||
shader_bsdf_disable_transparency(kg, sd);
|
shader_bsdf_disable_transparency(kg, sd);
|
||||||
|
|
||||||
/* Init ray. */
|
/* Init ray. */
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user