Merge branch 'master' into temp_bmesh_multires
Also: * added BMLog function to save mesh IDs. - Used by SCULPT_UNDO_DYNTOPO_BEGIN/END instead of saving the whole mesh, which was the previous behavior. * SCULPT_UNDO_DYNTOPO_BEGIN no longer pushes a non-dyntopo geomtry undo node, as this is no longer necassary. This greatly speeds up going into/out of sculpt mode with dyntopo enabled, as before it was copying the mesh twice.
This commit is contained in:
commit
b243eb2646
|
@ -403,14 +403,14 @@ set(CYCLES_TEST_DEVICES CPU CACHE STRING "Run regression tests on the specified
|
|||
set(CYCLES_CUDA_BINARIES_ARCH sm_30 sm_35 sm_37 sm_50 sm_52 sm_60 sm_61 sm_70 sm_75 sm_86 compute_75 CACHE STRING "CUDA architectures to build binaries for")
|
||||
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
|
||||
unset(PLATFORM_DEFAULT)
|
||||
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
||||
option(WITH_CYCLES_DEBUG "Build Cycles with extra debug capabilities" OFF)
|
||||
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
||||
option(WITH_CYCLES_DEBUG_NAN "Build Cycles with additional asserts for detecting NaNs and invalid values" OFF)
|
||||
option(WITH_CYCLES_NATIVE_ONLY "Build Cycles with native kernel only (which fits current CPU, use for development only)" OFF)
|
||||
option(WITH_CYCLES_KERNEL_ASAN "Build Cycles kernels with address sanitizer when WITH_COMPILER_ASAN is on, even if it's very slow" OFF)
|
||||
mark_as_advanced(WITH_CYCLES_KERNEL_ASAN)
|
||||
mark_as_advanced(WITH_CYCLES_CUBIN_COMPILER)
|
||||
mark_as_advanced(WITH_CYCLES_LOGGING)
|
||||
mark_as_advanced(WITH_CYCLES_DEBUG)
|
||||
mark_as_advanced(WITH_CYCLES_DEBUG_NAN)
|
||||
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
||||
|
||||
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles CUDA compute support" ON)
|
||||
|
|
|
@ -82,7 +82,11 @@ if(UNIX)
|
|||
endif()
|
||||
include(cmake/openimageio.cmake)
|
||||
include(cmake/tiff.cmake)
|
||||
include(cmake/flexbison.cmake)
|
||||
if(WIN32)
|
||||
include(cmake/flexbison.cmake)
|
||||
else()
|
||||
include(cmake/flex.cmake)
|
||||
endif()
|
||||
include(cmake/osl.cmake)
|
||||
include(cmake/tbb.cmake)
|
||||
include(cmake/openvdb.cmake)
|
||||
|
|
|
@ -93,3 +93,4 @@ download_source(GMP)
|
|||
download_source(POTRACE)
|
||||
download_source(HARU)
|
||||
download_source(ZSTD)
|
||||
download_source(FLEX)
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# ***** 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_flex
|
||||
URL file://${PACKAGE_DIR}/${FLEX_FILE}
|
||||
URL_HASH ${FLEX_HASH_TYPE}=${FLEX_HASH}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
PREFIX ${BUILD_DIR}/flex
|
||||
CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/flex
|
||||
BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && make -j${MAKE_THREADS}
|
||||
INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/flex/src/external_flex/ && make install
|
||||
INSTALL_DIR ${LIBDIR}/flex
|
||||
)
|
|
@ -106,6 +106,7 @@ harvest(llvm/include llvm/include "*")
|
|||
harvest(llvm/bin llvm/bin "llvm-config")
|
||||
harvest(llvm/lib llvm/lib "libLLVM*.a")
|
||||
harvest(llvm/lib llvm/lib "libclang*.a")
|
||||
harvest(llvm/lib/clang llvm/lib/clang "*.h")
|
||||
if(APPLE)
|
||||
harvest(openmp/lib openmp/lib "*")
|
||||
harvest(openmp/include openmp/include "*.h")
|
||||
|
|
|
@ -29,12 +29,13 @@ elseif(APPLE)
|
|||
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
|
||||
set(ISPC_EXTRA_ARGS_APPLE
|
||||
-DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison
|
||||
-DFLEX_EXECUTABLE=/opt/homebrew/opt/flex/bin/flex
|
||||
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
|
||||
-DARM_ENABLED=On
|
||||
)
|
||||
else()
|
||||
set(ISPC_EXTRA_ARGS_APPLE
|
||||
-DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
|
||||
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
|
||||
-DARM_ENABLED=Off
|
||||
)
|
||||
endif()
|
||||
|
@ -43,6 +44,7 @@ elseif(UNIX)
|
|||
-DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang
|
||||
-DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang++
|
||||
-DARM_ENABLED=Off
|
||||
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
|
||||
)
|
||||
endif()
|
||||
|
||||
|
@ -82,4 +84,9 @@ if(WIN32)
|
|||
external_ispc
|
||||
external_flexbison
|
||||
)
|
||||
else()
|
||||
add_dependencies(
|
||||
external_ispc
|
||||
external_flex
|
||||
)
|
||||
endif()
|
||||
|
|
|
@ -66,7 +66,11 @@ ExternalProject_Add(ll
|
|||
|
||||
if(MSVC)
|
||||
if(BUILD_MODE STREQUAL Release)
|
||||
set(LLVM_HARVEST_COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/ ${HARVEST_TARGET}/llvm/ )
|
||||
set(LLVM_HARVEST_COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib ${HARVEST_TARGET}/llvm/lib &&
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/include ${HARVEST_TARGET}/llvm/include &&
|
||||
${CMAKE_COMMAND} -E copy ${LIBDIR}/llvm/bin/clang-format.exe ${HARVEST_TARGET}/llvm/bin/clang-format.exe
|
||||
)
|
||||
else()
|
||||
set(LLVM_HARVEST_COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib/ ${HARVEST_TARGET}/llvm/debug/lib/ &&
|
||||
|
|
|
@ -45,7 +45,6 @@ ExternalProject_Add(external_openimagedenoise
|
|||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
URL_HASH ${OIDN_HASH_TYPE}=${OIDN_HASH}
|
||||
PREFIX ${BUILD_DIR}/openimagedenoise
|
||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d ${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise < ${PATCH_DIR}/oidn.diff
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise ${DEFAULT_CMAKE_FLAGS} ${OIDN_EXTRA_ARGS}
|
||||
INSTALL_DIR ${LIBDIR}/openimagedenoise
|
||||
)
|
||||
|
|
|
@ -22,9 +22,8 @@ ExternalProject_Add(external_openmp
|
|||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
URL_HASH ${OPENMP_HASH_TYPE}=${OPENMP_HASH}
|
||||
PREFIX ${BUILD_DIR}/openmp
|
||||
PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openmp/src/external_openmp < ${PATCH_DIR}/openmp.diff
|
||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/openmp ${DEFAULT_CMAKE_FLAGS}
|
||||
INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id @executable_path/../Resources/lib/libomp.dylib runtime/src/libomp.dylib && make install
|
||||
INSTALL_COMMAND cd ${BUILD_DIR}/openmp/src/external_openmp-build && install_name_tool -id @rpath/libomp.dylib runtime/src/libomp.dylib && make install
|
||||
INSTALL_DIR ${LIBDIR}/openmp
|
||||
)
|
||||
|
||||
|
|
|
@ -20,12 +20,10 @@ if(WIN32)
|
|||
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
|
||||
set(OSL_FLEX_BISON -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe)
|
||||
set(OSL_SIMD_FLAGS -DOIIO_NOSIMD=1 -DOIIO_SIMD=sse2)
|
||||
SET(OSL_PLATFORM_FLAGS -DLINKSTATIC=ON)
|
||||
else()
|
||||
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES)
|
||||
set(OSL_FLEX_BISON)
|
||||
set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO${LIBEXT};${LIBDIR}/openimageio/lib/${LIBPREFIX}OpenImageIO_Util${LIBEXT};${LIBDIR}/png/lib/${LIBPREFIX}png16${LIBEXT};${LIBDIR}/jpg/lib/${LIBPREFIX}jpeg${LIBEXT};${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${LIBEXT};${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${LIBEXT}")
|
||||
SET(OSL_PLATFORM_FLAGS)
|
||||
endif()
|
||||
|
||||
set(OSL_ILMBASE_CUSTOM_LIBRARIES "${LIBDIR}/openexr/lib/Imath${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Half{OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/IlmThread${OPENEXR_VERSION_POSTFIX}.lib^^${LIBDIR}/openexr/lib/Iex${OPENEXR_VERSION_POSTFIX}.lib")
|
||||
|
@ -51,12 +49,13 @@ set(OSL_EXTRA_ARGS
|
|||
-DOpenImageIO_ROOT=${LIBDIR}/openimageio/
|
||||
-DOSL_BUILD_TESTS=OFF
|
||||
-DOSL_BUILD_MATERIALX=OFF
|
||||
-DPNG_ROOT=${LIBDIR}/png
|
||||
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
|
||||
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
|
||||
${OSL_FLEX_BISON}
|
||||
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
${OSL_PLATFORM_FLAGS}
|
||||
-DLINKSTATIC=ON
|
||||
-DOSL_BUILD_PLUGINS=OFF
|
||||
-DSTOP_ON_WARNING=OFF
|
||||
-DUSE_LLVM_BITCODE=OFF
|
||||
|
@ -69,13 +68,9 @@ set(OSL_EXTRA_ARGS
|
|||
${OSL_SIMD_FLAGS}
|
||||
-Dpugixml_ROOT=${LIBDIR}/pugixml
|
||||
-DUSE_PYTHON=OFF
|
||||
-DCMAKE_CXX_STANDARD=14
|
||||
)
|
||||
|
||||
# Apple arm64 uses LLVM 11, LLVM 10+ requires C++14
|
||||
if (APPLE AND "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
|
||||
list(APPEND OSL_EXTRA_ARGS -DCMAKE_CXX_STANDARD=14)
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(external_osl
|
||||
URL file://${PACKAGE_DIR}/${OSL_FILE}
|
||||
DOWNLOAD_DIR ${DOWNLOAD_DIR}
|
||||
|
@ -93,10 +88,20 @@ add_dependencies(
|
|||
ll
|
||||
external_openexr
|
||||
external_zlib
|
||||
external_flexbison
|
||||
external_openimageio
|
||||
external_pugixml
|
||||
)
|
||||
if(WIN32)
|
||||
add_dependencies(
|
||||
external_osl
|
||||
external_flexbison
|
||||
)
|
||||
else()
|
||||
add_dependencies(
|
||||
external_osl
|
||||
external_flex
|
||||
)
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
if(BUILD_MODE STREQUAL Release)
|
||||
|
|
|
@ -152,35 +152,20 @@ set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
|
|||
set(OPENCOLORIO_HASH_TYPE MD5)
|
||||
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
||||
|
||||
if(BLENDER_PLATFORM_ARM)
|
||||
# Newer version required by ISPC with arm support.
|
||||
set(LLVM_VERSION 11.0.1)
|
||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||
set(LLVM_HASH e700af40ab83463e4e9ab0ba3708312e)
|
||||
set(LLVM_HASH_TYPE MD5)
|
||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||
set(LLVM_VERSION 12.0.0)
|
||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||
set(LLVM_HASH 5a4fab4d7fc84aefffb118ac2c8a4fc0)
|
||||
set(LLVM_HASH_TYPE MD5)
|
||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.src.tar.xz)
|
||||
|
||||
set(OPENMP_VERSION 9.0.1)
|
||||
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${OPENMP_VERSION}/openmp-${OPENMP_VERSION}.src.tar.xz)
|
||||
set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
|
||||
set(OPENMP_HASH_TYPE MD5)
|
||||
set(OPENMP_FILE openmp-${OPENMP_VERSION}.src.tar.xz)
|
||||
else()
|
||||
set(LLVM_VERSION 9.0.1)
|
||||
set(LLVM_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/llvm-project-${LLVM_VERSION}.tar.xz)
|
||||
set(LLVM_HASH b4268e733dfe352960140dc07ef2efcb)
|
||||
set(LLVM_HASH_TYPE MD5)
|
||||
set(LLVM_FILE llvm-project-${LLVM_VERSION}.tar.xz)
|
||||
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz)
|
||||
set(OPENMP_HASH ac48ce3e4582ccb82f81ab59eb3fc9dc)
|
||||
set(OPENMP_HASH_TYPE MD5)
|
||||
set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz)
|
||||
|
||||
set(OPENMP_URI https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/openmp-${LLVM_VERSION}.src.tar.xz)
|
||||
set(OPENMP_HASH 6eade16057edbdecb3c4eef9daa2bfcf)
|
||||
set(OPENMP_HASH_TYPE MD5)
|
||||
set(OPENMP_FILE openmp-${LLVM_VERSION}.src.tar.xz)
|
||||
endif()
|
||||
|
||||
set(OPENIMAGEIO_VERSION 2.1.15.0)
|
||||
set(OPENIMAGEIO_VERSION 2.2.15.1)
|
||||
set(OPENIMAGEIO_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||
set(OPENIMAGEIO_HASH f03aa5e3ac4795af04771ee4146e9832)
|
||||
set(OPENIMAGEIO_HASH 3db5c5f0b3dc91597c75e5df09eb9072)
|
||||
set(OPENIMAGEIO_HASH_TYPE MD5)
|
||||
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||
|
||||
|
@ -190,9 +175,9 @@ set(TIFF_HASH 2165e7aba557463acc0664e71a3ed424)
|
|||
set(TIFF_HASH_TYPE MD5)
|
||||
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
||||
|
||||
set(OSL_VERSION 1.11.10.0)
|
||||
set(OSL_VERSION 1.11.14.1)
|
||||
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
||||
set(OSL_HASH dfdc23597aeef083832cbada62211756)
|
||||
set(OSL_HASH 1abd7ce40481771a9fa937f19595d2f2)
|
||||
set(OSL_HASH_TYPE MD5)
|
||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||
|
||||
|
@ -370,12 +355,18 @@ set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
|||
set(PUGIXML_HASH_TYPE MD5)
|
||||
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
||||
|
||||
set(FLEXBISON_VERSION 2.5.5)
|
||||
set(FLEXBISON_VERSION 2.5.24)
|
||||
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||
set(FLEXBISON_HASH d87a3938194520d904013abef3df10ce)
|
||||
set(FLEXBISON_HASH 6b549d43e34ece0e8ed05af92daa31c4)
|
||||
set(FLEXBISON_HASH_TYPE MD5)
|
||||
set(FLEXBISON_FILE win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||
|
||||
set(FLEX_VERSION 2.6.4)
|
||||
set(FLEX_URI https://github.com/westes/flex/releases/download/v${FLEX_VERSION}/flex-${FLEX_VERSION}.tar.gz)
|
||||
set(FLEX_HASH 2882e3179748cc9f9c23ec593d6adc8d)
|
||||
set(FLEX_HASH_TYPE MD5)
|
||||
set(FLEX_FILE flex-${FLEX_VERSION}.tar.gz)
|
||||
|
||||
# Libraries to keep Python modules static on Linux.
|
||||
|
||||
# NOTE: bzip.org domain does no longer belong to BZip 2 project, so we download
|
||||
|
@ -432,9 +423,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
|
|||
set(USD_HASH_TYPE MD5)
|
||||
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
||||
|
||||
set(OIDN_VERSION 1.4.0)
|
||||
set(OIDN_VERSION 1.4.1)
|
||||
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 df4007b0ab93b1c41cdf223b075d01c0)
|
||||
set(OIDN_HASH_TYPE MD5)
|
||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||
|
||||
|
@ -444,10 +435,10 @@ set(LIBGLU_HASH 151aef599b8259efe9acd599c96ea2a3)
|
|||
set(LIBGLU_HASH_TYPE MD5)
|
||||
set(LIBGLU_FILE glu-${LIBGLU_VERSION}.tar.xz)
|
||||
|
||||
set(MESA_VERSION 20.3.4)
|
||||
set(MESA_VERSION 21.1.5)
|
||||
set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
||||
set(MESA_HASH 556338446aef8ae947a789b3e0b5e056)
|
||||
set(MESA_HASH_TYPE MD5)
|
||||
set(MESA_HASH 022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d)
|
||||
set(MESA_HASH_TYPE SHA256)
|
||||
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
||||
|
||||
set(NASM_VERSION 2.15.02)
|
||||
|
@ -468,19 +459,11 @@ set(WL_PROTOCOLS_URI https://gitlab.freedesktop.org/wayland/wayland-protocols/-/
|
|||
set(WL_PROTOCOLS_HASH af5ca07e13517cdbab33504492cef54a)
|
||||
set(WL_PROTOCOLS_HASH_TYPE MD5)
|
||||
|
||||
if(BLENDER_PLATFORM_ARM)
|
||||
# Unreleased version with macOS arm support.
|
||||
set(ISPC_URI https://github.com/ispc/ispc/archive/f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
||||
set(ISPC_HASH d382fea18d01dbd0cd05d9e1ede36d7d)
|
||||
set(ISPC_HASH_TYPE MD5)
|
||||
set(ISPC_FILE f5949c055eb9eeb93696978a3da4bfb3a6a30b35.zip)
|
||||
else()
|
||||
set(ISPC_VERSION v1.14.1)
|
||||
set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
|
||||
set(ISPC_HASH 968fbc8dfd16a60ba4e32d2e0e03ea7a)
|
||||
set(ISPC_HASH_TYPE MD5)
|
||||
set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz)
|
||||
endif()
|
||||
set(ISPC_VERSION v1.16.0)
|
||||
set(ISPC_URI https://github.com/ispc/ispc/archive/${ISPC_VERSION}.tar.gz)
|
||||
set(ISPC_HASH 2e3abedbc0ea9aaec17d6562c632454d)
|
||||
set(ISPC_HASH_TYPE MD5)
|
||||
set(ISPC_FILE ispc-${ISPC_VERSION}.tar.gz)
|
||||
|
||||
set(GMP_VERSION 6.2.0)
|
||||
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
--- 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
|
||||
@@ -98,7 +98,7 @@
|
||||
elseif(OIDN_ARCH STREQUAL "ARM64")
|
||||
set(ISPC_ARCHITECTURE "aarch64")
|
||||
if(APPLE)
|
||||
- set(ISPC_TARGET_OS "--target-os=ios")
|
||||
+ set(ISPC_TARGET_OS "--target-os=macos")
|
||||
endif()
|
||||
endif()
|
|
@ -34,24 +34,3 @@ diff -Naur orig/src/include/OpenImageIO/platform.h external_openimageio/src/incl
|
|||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
diff -Naur orig/src/libutil/ustring.cpp external_openimageio/src/libutil/ustring.cpp
|
||||
--- orig/src/libutil/ustring.cpp 2020-05-11 05:43:52.000000000 +0200
|
||||
+++ external_openimageio/src/libutil/ustring.cpp 2020-11-26 12:06:08.000000000 +0100
|
||||
@@ -337,6 +337,8 @@
|
||||
// the std::string to make it point to our chars! In such a case, the
|
||||
// destructor will be careful not to allow a deallocation.
|
||||
|
||||
+ // Disable internal std::string for Apple silicon based Macs
|
||||
+#if !(defined(__APPLE__) && defined(__arm64__))
|
||||
#if defined(__GNUC__) && !defined(_LIBCPP_VERSION) \
|
||||
&& defined(_GLIBCXX_USE_CXX11_ABI) && _GLIBCXX_USE_CXX11_ABI
|
||||
// NEW gcc ABI
|
||||
@@ -382,7 +384,7 @@
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
-
|
||||
+#endif
|
||||
// Remaining cases - just assign the internal string. This may result
|
||||
// in double allocation for the chars. If you care about that, do
|
||||
// something special for your platform, much like we did for gcc and
|
|
@ -1,23 +0,0 @@
|
|||
diff --git a/runtime/src/z_Linux_asm.S b/runtime/src/z_Linux_asm.S
|
||||
index 0d8885e..42aa5ad 100644
|
||||
--- a/runtime/src/z_Linux_asm.S
|
||||
+++ b/runtime/src/z_Linux_asm.S
|
||||
@@ -1540,10 +1540,12 @@ __kmp_unnamed_critical_addr:
|
||||
.comm .gomp_critical_user_,32,8
|
||||
.data
|
||||
.align 8
|
||||
- .global __kmp_unnamed_critical_addr
|
||||
-__kmp_unnamed_critical_addr:
|
||||
+ .global ___kmp_unnamed_critical_addr
|
||||
+___kmp_unnamed_critical_addr:
|
||||
.8byte .gomp_critical_user_
|
||||
- .size __kmp_unnamed_critical_addr,8
|
||||
+# if !(KMP_OS_DARWIN)
|
||||
+ .size ___kmp_unnamed_critical_addr,8
|
||||
+# endif
|
||||
#endif /* KMP_ARCH_PPC64 || KMP_ARCH_AARCH64 */
|
||||
|
||||
#if KMP_OS_LINUX
|
||||
|
||||
|
||||
|
|
@ -63,19 +63,50 @@ diff -Naur org/CMakeLists.txt external_osl/CMakeLists.txt
|
|||
|
||||
set (OSL_NO_DEFAULT_TEXTURESYSTEM OFF CACHE BOOL "Do not use create a raw OIIO::TextureSystem")
|
||||
if (OSL_NO_DEFAULT_TEXTURESYSTEM)
|
||||
diff --git a/src/liboslexec/llvm_util.cpp b/src/liboslexec/llvm_util.cpp
|
||||
index 445f6400..3d468de2 100644
|
||||
--- a/src/liboslexec/llvm_util.cpp
|
||||
+++ b/src/liboslexec/llvm_util.cpp
|
||||
@@ -3430,8 +3430,9 @@ LLVM_Util::call_function (llvm::Value *func, cspan<llvm::Value *> args)
|
||||
#endif
|
||||
//llvm_gen_debug_printf (std::string("start ") + std::string(name));
|
||||
#if OSL_LLVM_VERSION >= 110
|
||||
- OSL_DASSERT(llvm::isa<llvm::Function>(func));
|
||||
- llvm::Value *r = builder().CreateCall(llvm::cast<llvm::Function>(func), llvm::ArrayRef<llvm::Value *>(args.data(), args.size()));
|
||||
+ llvm::Value* r = builder().CreateCall(
|
||||
+ llvm::cast<llvm::FunctionType>(func->getType()->getPointerElementType()), func,
|
||||
+ llvm::ArrayRef<llvm::Value*>(args.data(), args.size()));
|
||||
#else
|
||||
llvm::Value *r = builder().CreateCall (func, llvm::ArrayRef<llvm::Value *>(args.data(), args.size()));
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 990f50d69..46ef7351d 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -252,11 +252,9 @@ install (EXPORT OSL_EXPORTED_TARGETS
|
||||
FILE ${OSL_TARGETS_EXPORT_NAME}
|
||||
NAMESPACE ${PROJECT_NAME}::)
|
||||
|
||||
-
|
||||
-
|
||||
-
|
||||
-osl_add_all_tests()
|
||||
-
|
||||
+if (${PROJECT_NAME}_BUILD_TESTS AND NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||
+ osl_add_all_tests()
|
||||
+endif ()
|
||||
|
||||
if (NOT ${PROJECT_NAME}_IS_SUBPROJECT)
|
||||
include (packaging)
|
||||
diff -Naur external_osl_orig/src/cmake/externalpackages.cmake external_osl/src/cmake/externalpackages.cmake
|
||||
--- external_osl_orig/src/cmake/externalpackages.cmake 2021-06-01 13:44:18 -0600
|
||||
+++ external_osl/src/cmake/externalpackages.cmake 2021-06-28 07:44:32 -0600
|
||||
@@ -80,6 +80,7 @@
|
||||
|
||||
|
||||
checked_find_package (ZLIB REQUIRED) # Needed by several packages
|
||||
+checked_find_package (PNG REQUIRED) # Needed since OIIO needs it
|
||||
|
||||
# IlmBase & OpenEXR
|
||||
checked_find_package (OpenEXR REQUIRED
|
||||
diff -Naur external_osl_orig/src/liboslcomp/oslcomp.cpp external_osl/src/liboslcomp/oslcomp.cpp
|
||||
--- external_osl_orig/src/liboslcomp/oslcomp.cpp 2021-06-01 13:44:18 -0600
|
||||
+++ external_osl/src/liboslcomp/oslcomp.cpp 2021-06-28 09:11:06 -0600
|
||||
@@ -21,6 +21,13 @@
|
||||
#if !defined(__STDC_CONSTANT_MACROS)
|
||||
# define __STDC_CONSTANT_MACROS 1
|
||||
#endif
|
||||
+
|
||||
+// clang uses CALLBACK in its templates which causes issues if it is already defined
|
||||
+#ifdef _WIN32 && defined(CALLBACK)
|
||||
+# undef CALLBACK
|
||||
+#endif
|
||||
+
|
||||
+//
|
||||
#include <clang/Basic/TargetInfo.h>
|
||||
#include <clang/Frontend/CompilerInstance.h>
|
||||
#include <clang/Frontend/TextDiagnosticPrinter.h>
|
||||
|
|
|
@ -82,7 +82,7 @@ def create_nb_project_main():
|
|||
make_exe = cmake_cache_var("CMAKE_MAKE_PROGRAM")
|
||||
make_exe_basename = os.path.basename(make_exe)
|
||||
|
||||
# --------------- NB specific
|
||||
# --------------- NetBeans specific.
|
||||
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()]
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
set(WITH_ASSERT_ABORT ON CACHE BOOL "" FORCE)
|
||||
set(WITH_BUILDINFO OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_COMPILER_ASAN ON CACHE BOOL "" FORCE)
|
||||
set(WITH_CYCLES_DEBUG ON CACHE BOOL "" FORCE)
|
||||
set(WITH_CYCLES_NATIVE_ONLY ON CACHE BOOL "" FORCE)
|
||||
set(WITH_DOC_MANPAGE OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_GTESTS ON CACHE BOOL "" FORCE)
|
||||
|
|
|
@ -404,7 +404,7 @@ endif()
|
|||
|
||||
# CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
|
||||
if(WITH_OPENMP)
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
# Use OpenMP from our precompiled libraries.
|
||||
message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
|
||||
set(OPENMP_CUSTOM ON)
|
||||
|
@ -480,10 +480,8 @@ else()
|
|||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic")
|
||||
endif()
|
||||
|
||||
if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
|
||||
# Xcode 5 is always using CLANG, which has too low template depth of 128 for libmv
|
||||
string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
|
||||
endif()
|
||||
# Clang has too low template depth of 128 for libmv.
|
||||
string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
|
||||
|
||||
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
|
||||
# libraries as Blender with a different version or build options.
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
},
|
||||
"cuda11":
|
||||
{
|
||||
"version": "11.3"
|
||||
"version": "11.4"
|
||||
}
|
||||
},
|
||||
"cmake":
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
#
|
||||
# Used by Buildbot build pipeline make_update.py script only for now
|
||||
# We intended to update the make_update.py in the branches to use this file eventually
|
||||
#
|
||||
update-code:
|
||||
git:
|
||||
submodules:
|
||||
- branch: master
|
||||
commit_id: HEAD
|
||||
path: release/scripts/addons
|
||||
- branch: master
|
||||
commit_id: HEAD
|
||||
path: release/scripts/addons_contrib
|
||||
- branch: master
|
||||
commit_id: HEAD
|
||||
path: release/datafiles/locale
|
||||
- branch: master
|
||||
commit_id: HEAD
|
||||
path: source/tools
|
||||
svn:
|
||||
libraries:
|
||||
darwin-arm64:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/darwin_arm64
|
||||
darwin-x86_64:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/darwin
|
||||
linux-x86_64:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/linux_centos7_x86_64
|
||||
windows-amd64:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/win64_vc15
|
||||
tests:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/tests
|
||||
benchmarks:
|
||||
branch: trunk
|
||||
commit_id: HEAD
|
||||
path: lib/benchmarks
|
||||
|
||||
#
|
||||
# Buildbot only configs
|
||||
#
|
||||
buildbot:
|
||||
gcc:
|
||||
version: '9.0.0'
|
||||
cuda10:
|
||||
version: '10.1.0'
|
||||
cuda11:
|
||||
version: '11.4.0'
|
||||
optix:
|
||||
version: '7.1.0'
|
||||
cmake:
|
||||
default:
|
||||
version: any
|
||||
overrides: {}
|
||||
darwin-arm64:
|
||||
overrides: {}
|
||||
darwin-x86_64:
|
||||
overrides: {}
|
||||
linux-x86_64:
|
||||
overrides: {}
|
||||
windows-amd64:
|
||||
overrides: {}
|
|
@ -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.
|
||||
|
||||
Use Blender to create 3D images and animations, films and commercials, content for games, '''
|
||||
r'''architectural and industrial visualizatons, and scientific visualizations.
|
||||
r'''architectural and industrial visualizations, and scientific visualizations.
|
||||
|
||||
https://www.blender.org''')
|
||||
|
||||
|
|
|
@ -1047,6 +1047,7 @@ context_type_map = {
|
|||
"annotation_data": ("GreasePencil", False),
|
||||
"annotation_data_owner": ("ID", False),
|
||||
"armature": ("Armature", False),
|
||||
"asset_library": ("AssetLibraryReference", False),
|
||||
"bone": ("Bone", False),
|
||||
"brush": ("Brush", False),
|
||||
"camera": ("Camera", False),
|
||||
|
@ -1113,6 +1114,7 @@ context_type_map = {
|
|||
"texture_slot": ("MaterialTextureSlot", False),
|
||||
"texture_user": ("ID", False),
|
||||
"texture_user_property": ("Property", False),
|
||||
"ui_list": ("UIList", False),
|
||||
"vertex_paint_object": ("Object", False),
|
||||
"view_layer": ("ViewLayer", False),
|
||||
"visible_bones": ("EditBone", True),
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
* - #TPOOL_STRUCT: Name for pool struct name.
|
||||
* - #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.
|
||||
*
|
||||
|
|
|
@ -307,9 +307,9 @@ if(WITH_CYCLES_LOGGING)
|
|||
)
|
||||
endif()
|
||||
|
||||
# Debugging capabilities (debug passes etc).
|
||||
if(WITH_CYCLES_DEBUG)
|
||||
add_definitions(-DWITH_CYCLES_DEBUG)
|
||||
# NaN debugging
|
||||
if(WITH_CYCLES_DEBUG_NAN)
|
||||
add_definitions(-DWITH_CYCLES_DEBUG_NAN)
|
||||
endif()
|
||||
|
||||
if(NOT OPENIMAGEIO_PUGIXML_FOUND)
|
||||
|
|
|
@ -262,10 +262,6 @@ def list_render_passes(scene, srl):
|
|||
# Cycles specific passes.
|
||||
crl = srl.cycles
|
||||
if crl.pass_debug_render_time: yield ("Debug Render Time", "X", 'VALUE')
|
||||
if crl.pass_debug_bvh_traversed_nodes: yield ("Debug BVH Traversed Nodes", "X", 'VALUE')
|
||||
if crl.pass_debug_bvh_traversed_instances: yield ("Debug BVH Traversed Instances", "X", 'VALUE')
|
||||
if crl.pass_debug_bvh_intersections: yield ("Debug BVH Intersections", "X", 'VALUE')
|
||||
if crl.pass_debug_ray_bounces: yield ("Debug Ray Bounces", "X", 'VALUE')
|
||||
if crl.pass_debug_sample_count: yield ("Debug Sample Count", "X", 'VALUE')
|
||||
if crl.use_pass_volume_direct: yield ("VolumeDir", "RGB", 'COLOR')
|
||||
if crl.use_pass_volume_indirect: yield ("VolumeInd", "RGB", 'COLOR')
|
||||
|
|
|
@ -263,6 +263,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
|
|||
name="Use Denoising",
|
||||
description="Denoise the rendered image",
|
||||
default=False,
|
||||
update=update_render_passes,
|
||||
)
|
||||
use_preview_denoising: BoolProperty(
|
||||
name="Use Viewport Denoising",
|
||||
|
@ -1324,30 +1325,6 @@ class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
|
|||
|
||||
class CyclesRenderLayerSettings(bpy.types.PropertyGroup):
|
||||
|
||||
pass_debug_bvh_traversed_nodes: BoolProperty(
|
||||
name="Debug BVH Traversed Nodes",
|
||||
description="Store Debug BVH Traversed Nodes pass",
|
||||
default=False,
|
||||
update=update_render_passes,
|
||||
)
|
||||
pass_debug_bvh_traversed_instances: BoolProperty(
|
||||
name="Debug BVH Traversed Instances",
|
||||
description="Store Debug BVH Traversed Instances pass",
|
||||
default=False,
|
||||
update=update_render_passes,
|
||||
)
|
||||
pass_debug_bvh_intersections: BoolProperty(
|
||||
name="Debug BVH Intersections",
|
||||
description="Store Debug BVH Intersections",
|
||||
default=False,
|
||||
update=update_render_passes,
|
||||
)
|
||||
pass_debug_ray_bounces: BoolProperty(
|
||||
name="Debug Ray Bounces",
|
||||
description="Store Debug Ray Bounces pass",
|
||||
default=False,
|
||||
update=update_render_passes,
|
||||
)
|
||||
pass_debug_render_time: BoolProperty(
|
||||
name="Debug Render Time",
|
||||
description="Render time in milliseconds per sample and pixel",
|
||||
|
|
|
@ -936,29 +936,6 @@ class CYCLES_RENDER_PT_passes_crypto(CyclesButtonsPanel, ViewLayerCryptomattePan
|
|||
bl_parent_id = "CYCLES_RENDER_PT_passes"
|
||||
|
||||
|
||||
class CYCLES_RENDER_PT_passes_debug(CyclesButtonsPanel, Panel):
|
||||
bl_label = "Debug"
|
||||
bl_context = "view_layer"
|
||||
bl_parent_id = "CYCLES_RENDER_PT_passes"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
import _cycles
|
||||
return _cycles.with_cycles_debug
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
layout.use_property_decorate = False
|
||||
|
||||
cycles_view_layer = context.view_layer.cycles
|
||||
|
||||
layout.prop(cycles_view_layer, "pass_debug_bvh_traversed_nodes")
|
||||
layout.prop(cycles_view_layer, "pass_debug_bvh_traversed_instances")
|
||||
layout.prop(cycles_view_layer, "pass_debug_bvh_intersections")
|
||||
layout.prop(cycles_view_layer, "pass_debug_ray_bounces")
|
||||
|
||||
|
||||
class CYCLES_RENDER_PT_passes_aov(CyclesButtonsPanel, ViewLayerAOVPanel):
|
||||
bl_label = "Shader AOV"
|
||||
bl_context = "view_layer"
|
||||
|
@ -1136,7 +1113,7 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||
col = row.column(align=True)
|
||||
col.operator("object.material_slot_add", icon='ADD', text="")
|
||||
col.operator("object.material_slot_remove", icon='REMOVE', text="")
|
||||
|
||||
col.separator()
|
||||
col.menu("MATERIAL_MT_context_menu", icon='DOWNARROW_HLT', text="")
|
||||
|
||||
if is_sortable:
|
||||
|
@ -1151,16 +1128,15 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
|||
row.operator("object.material_slot_select", text="Select")
|
||||
row.operator("object.material_slot_deselect", text="Deselect")
|
||||
|
||||
split = layout.split(factor=0.65)
|
||||
row = layout.row()
|
||||
|
||||
if ob:
|
||||
split.template_ID(ob, "active_material", new="material.new")
|
||||
row = split.row()
|
||||
row.template_ID(ob, "active_material", new="material.new")
|
||||
|
||||
if slot:
|
||||
row.prop(slot, "link", text="")
|
||||
else:
|
||||
row.label()
|
||||
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
||||
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
||||
|
||||
elif mat:
|
||||
split.template_ID(space, "pin_id")
|
||||
split.separator()
|
||||
|
@ -2318,7 +2294,6 @@ classes = (
|
|||
CYCLES_RENDER_PT_passes_data,
|
||||
CYCLES_RENDER_PT_passes_light,
|
||||
CYCLES_RENDER_PT_passes_crypto,
|
||||
CYCLES_RENDER_PT_passes_debug,
|
||||
CYCLES_RENDER_PT_passes_aov,
|
||||
CYCLES_RENDER_PT_filter,
|
||||
CYCLES_RENDER_PT_override,
|
||||
|
|
|
@ -1055,10 +1055,45 @@ static BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b_ob)
|
|||
return BL::MeshSequenceCacheModifier(PointerRNA_NULL);
|
||||
}
|
||||
|
||||
/* Check whether some of "built-in" motion-related attributes are needed to be exported (includes
|
||||
* things like velocity from cache modifier, fluid simulation).
|
||||
*
|
||||
* NOTE: This code is run prior to object motion blur initialization. so can not access properties
|
||||
* set by `sync_object_motion_init()`. */
|
||||
static bool mesh_need_motion_attribute(BL::Object &b_ob, Scene *scene)
|
||||
{
|
||||
const Scene::MotionType need_motion = scene->need_motion();
|
||||
if (need_motion == Scene::MOTION_NONE) {
|
||||
/* Simple case: neither motion pass nor motion blur is needed, no need in the motion related
|
||||
* attributes. */
|
||||
return false;
|
||||
}
|
||||
|
||||
if (need_motion == Scene::MOTION_BLUR) {
|
||||
/* A bit tricky and implicit case:
|
||||
* - Motion blur is enabled in the scene, which implies specific number of time steps for
|
||||
* objects.
|
||||
* - If the object has motion blur disabled on it, it will have 0 time steps.
|
||||
* - Motion attribute expects non-zero time steps.
|
||||
*
|
||||
* Avoid adding motion attributes if the motion blur will enforce 0 motion steps. */
|
||||
PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
|
||||
const bool use_motion = get_boolean(cobject, "use_motion_blur");
|
||||
if (!use_motion) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Motion pass which implies 3 motion steps, or motion blur which is not disabled on object
|
||||
* level. */
|
||||
return true;
|
||||
}
|
||||
|
||||
static void sync_mesh_cached_velocities(BL::Object &b_ob, Scene *scene, Mesh *mesh)
|
||||
{
|
||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
||||
if (!mesh_need_motion_attribute(b_ob, scene)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BL::MeshSequenceCacheModifier b_mesh_cache = object_mesh_cache_find(b_ob);
|
||||
|
||||
|
@ -1102,8 +1137,9 @@ static void sync_mesh_cached_velocities(BL::Object &b_ob, Scene *scene, Mesh *me
|
|||
|
||||
static void sync_mesh_fluid_motion(BL::Object &b_ob, Scene *scene, Mesh *mesh)
|
||||
{
|
||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
||||
if (!mesh_need_motion_attribute(b_ob, scene)) {
|
||||
return;
|
||||
}
|
||||
|
||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob);
|
||||
|
||||
|
|
|
@ -1098,14 +1098,6 @@ void *CCL_python_module_init()
|
|||
PyModule_AddStringConstant(mod, "osl_version_string", "unknown");
|
||||
#endif
|
||||
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
PyModule_AddObject(mod, "with_cycles_debug", Py_True);
|
||||
Py_INCREF(Py_True);
|
||||
#else
|
||||
PyModule_AddObject(mod, "with_cycles_debug", Py_False);
|
||||
Py_INCREF(Py_False);
|
||||
#endif
|
||||
|
||||
#ifdef WITH_NETWORK
|
||||
PyModule_AddObject(mod, "with_network", Py_True);
|
||||
Py_INCREF(Py_True);
|
||||
|
|
|
@ -538,12 +538,6 @@ PassType BlenderSync::get_pass_type(BL::RenderPass &b_pass)
|
|||
MAP_PASS("BakePrimitive", PASS_BAKE_PRIMITIVE);
|
||||
MAP_PASS("BakeDifferential", PASS_BAKE_DIFFERENTIAL);
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
MAP_PASS("Debug BVH Traversed Nodes", PASS_BVH_TRAVERSED_NODES);
|
||||
MAP_PASS("Debug BVH Traversed Instances", PASS_BVH_TRAVERSED_INSTANCES);
|
||||
MAP_PASS("Debug BVH Intersections", PASS_BVH_INTERSECTIONS);
|
||||
MAP_PASS("Debug Ray Bounces", PASS_RAY_BOUNCES);
|
||||
#endif
|
||||
MAP_PASS("Debug Render Time", PASS_RENDER_TIME);
|
||||
MAP_PASS("AdaptiveAuxBuffer", PASS_ADAPTIVE_AUX_BUFFER);
|
||||
MAP_PASS("Debug Sample Count", PASS_SAMPLE_COUNT);
|
||||
|
@ -641,24 +635,6 @@ vector<Pass> BlenderSync::sync_render_passes(BL::Scene &b_scene,
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
if (get_boolean(crl, "pass_debug_bvh_traversed_nodes")) {
|
||||
b_engine.add_pass("Debug BVH Traversed Nodes", 1, "X", b_view_layer.name().c_str());
|
||||
Pass::add(PASS_BVH_TRAVERSED_NODES, passes, "Debug BVH Traversed Nodes");
|
||||
}
|
||||
if (get_boolean(crl, "pass_debug_bvh_traversed_instances")) {
|
||||
b_engine.add_pass("Debug BVH Traversed Instances", 1, "X", b_view_layer.name().c_str());
|
||||
Pass::add(PASS_BVH_TRAVERSED_INSTANCES, passes, "Debug BVH Traversed Instances");
|
||||
}
|
||||
if (get_boolean(crl, "pass_debug_bvh_intersections")) {
|
||||
b_engine.add_pass("Debug BVH Intersections", 1, "X", b_view_layer.name().c_str());
|
||||
Pass::add(PASS_BVH_INTERSECTIONS, passes, "Debug BVH Intersections");
|
||||
}
|
||||
if (get_boolean(crl, "pass_debug_ray_bounces")) {
|
||||
b_engine.add_pass("Debug Ray Bounces", 1, "X", b_view_layer.name().c_str());
|
||||
Pass::add(PASS_RAY_BOUNCES, passes, "Debug Ray Bounces");
|
||||
}
|
||||
#endif
|
||||
if (get_boolean(crl, "pass_debug_render_time")) {
|
||||
b_engine.add_pass("Debug Render Time", 1, "X", b_view_layer.name().c_str());
|
||||
Pass::add(PASS_RENDER_TIME, passes, "Debug Render Time");
|
||||
|
|
|
@ -351,9 +351,6 @@ string CUDADevice::compile_kernel_get_common_cflags(
|
|||
if (extra_cflags) {
|
||||
cflags += string(" ") + string(extra_cflags);
|
||||
}
|
||||
# ifdef WITH_CYCLES_DEBUG
|
||||
cflags += " -D__KERNEL_DEBUG__";
|
||||
# endif
|
||||
|
||||
if (split) {
|
||||
cflags += " -D__SPLIT__";
|
||||
|
@ -461,18 +458,19 @@ string CUDADevice::compile_kernel(const DeviceRequestedFeatures &requested_featu
|
|||
|
||||
const int nvcc_cuda_version = cuewCompilerVersion();
|
||||
VLOG(1) << "Found nvcc " << nvcc << ", CUDA version " << nvcc_cuda_version << ".";
|
||||
if (nvcc_cuda_version < 80) {
|
||||
if (nvcc_cuda_version < 101) {
|
||||
printf(
|
||||
"Unsupported CUDA version %d.%d detected, "
|
||||
"you need CUDA 8.0 or newer.\n",
|
||||
"you need CUDA 10.1 or newer.\n",
|
||||
nvcc_cuda_version / 10,
|
||||
nvcc_cuda_version % 10);
|
||||
return string();
|
||||
}
|
||||
else if (!(nvcc_cuda_version == 101 || nvcc_cuda_version == 102)) {
|
||||
else if (!(nvcc_cuda_version == 101 || nvcc_cuda_version == 102 || nvcc_cuda_version == 111 ||
|
||||
nvcc_cuda_version == 112 || nvcc_cuda_version == 113 || nvcc_cuda_version == 114)) {
|
||||
printf(
|
||||
"CUDA version %d.%d detected, build may succeed but only "
|
||||
"CUDA 10.1 and 10.2 are officially supported.\n",
|
||||
"CUDA 10.1 to 11.4 are officially supported.\n",
|
||||
nvcc_cuda_version / 10,
|
||||
nvcc_cuda_version % 10);
|
||||
}
|
||||
|
|
|
@ -233,9 +233,6 @@ class OptiXDevice : public CUDADevice {
|
|||
break;
|
||||
}
|
||||
};
|
||||
# endif
|
||||
# if OPTIX_ABI_VERSION >= 41 && defined(WITH_CYCLES_DEBUG)
|
||||
options.validationMode = OPTIX_DEVICE_CONTEXT_VALIDATION_MODE_ALL;
|
||||
# endif
|
||||
check_result_optix(optixDeviceContextCreate(cuContext, &options, &context));
|
||||
# ifdef WITH_CYCLES_LOGGING
|
||||
|
@ -369,13 +366,8 @@ class OptiXDevice : public CUDADevice {
|
|||
|
||||
OptixModuleCompileOptions module_options = {};
|
||||
module_options.maxRegisterCount = 0; // Do not set an explicit register limit
|
||||
# ifdef WITH_CYCLES_DEBUG
|
||||
module_options.optLevel = OPTIX_COMPILE_OPTIMIZATION_LEVEL_0;
|
||||
module_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_FULL;
|
||||
# else
|
||||
module_options.optLevel = OPTIX_COMPILE_OPTIMIZATION_LEVEL_3;
|
||||
module_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO;
|
||||
# endif
|
||||
|
||||
# if OPTIX_ABI_VERSION >= 41
|
||||
module_options.boundValues = nullptr;
|
||||
|
@ -578,11 +570,7 @@ class OptiXDevice : public CUDADevice {
|
|||
|
||||
OptixPipelineLinkOptions link_options = {};
|
||||
link_options.maxTraceDepth = 1;
|
||||
# ifdef WITH_CYCLES_DEBUG
|
||||
link_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_FULL;
|
||||
# else
|
||||
link_options.debugLevel = OPTIX_COMPILE_DEBUG_LEVEL_LINEINFO;
|
||||
# endif
|
||||
# if OPTIX_ABI_VERSION < 24
|
||||
link_options.overrideUsesMotionBlur = motion_blur;
|
||||
# endif
|
||||
|
|
|
@ -1968,10 +1968,6 @@ string OpenCLDevice::kernel_build_options(const string *debug_src)
|
|||
build_options += "-D__KERNEL_OPENCL_DEBUG__ ";
|
||||
}
|
||||
|
||||
# ifdef WITH_CYCLES_DEBUG
|
||||
build_options += "-D__KERNEL_DEBUG__ ";
|
||||
# endif
|
||||
|
||||
# ifdef WITH_NANOVDB
|
||||
if (info.has_nanovdb) {
|
||||
build_options += "-DWITH_NANOVDB ";
|
||||
|
|
|
@ -380,11 +380,16 @@ if(WITH_CYCLES_CUDA_BINARIES)
|
|||
set(CUDA_VERSION "${CUDA_VERSION_MAJOR}${CUDA_VERSION_MINOR}")
|
||||
|
||||
# warn for other versions
|
||||
if((CUDA_VERSION MATCHES "101") OR (CUDA_VERSION MATCHES "102") OR (CUDA_VERSION MATCHES "111"))
|
||||
if((CUDA_VERSION MATCHES "101") OR
|
||||
(CUDA_VERSION MATCHES "102") OR
|
||||
(CUDA_VERSION MATCHES "111") OR
|
||||
(CUDA_VERSION MATCHES "112") OR
|
||||
(CUDA_VERSION MATCHES "113") OR
|
||||
(CUDA_VERSION MATCHES "114"))
|
||||
else()
|
||||
message(WARNING
|
||||
"CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, "
|
||||
"build may succeed but only CUDA 10.1, 10.2 and 11.1 are officially supported")
|
||||
"build may succeed but only CUDA 10.1 to 11.4 are officially supported")
|
||||
endif()
|
||||
|
||||
# build for each arch
|
||||
|
@ -439,10 +444,6 @@ if(WITH_CYCLES_CUDA_BINARIES)
|
|||
set(name ${name}_experimental)
|
||||
endif()
|
||||
|
||||
if(WITH_CYCLES_DEBUG)
|
||||
set(cuda_flags ${cuda_flags} -D __KERNEL_DEBUG__)
|
||||
endif()
|
||||
|
||||
if(WITH_NANOVDB)
|
||||
set(cuda_flags ${cuda_flags}
|
||||
-D WITH_NANOVDB
|
||||
|
@ -557,11 +558,6 @@ if(WITH_CYCLES_DEVICE_OPTIX AND WITH_CYCLES_CUDA_BINARIES)
|
|||
--use_fast_math
|
||||
-o ${output})
|
||||
|
||||
if(WITH_CYCLES_DEBUG)
|
||||
set(cuda_flags ${cuda_flags}
|
||||
-D __KERNEL_DEBUG__)
|
||||
endif()
|
||||
|
||||
if(WITH_NANOVDB)
|
||||
set(cuda_flags ${cuda_flags}
|
||||
-D WITH_NANOVDB
|
||||
|
|
|
@ -67,8 +67,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
isect->prim = PRIM_NONE;
|
||||
isect->object = OBJECT_NONE;
|
||||
|
||||
BVH_DEBUG_INIT();
|
||||
|
||||
/* traversal loop */
|
||||
do {
|
||||
do {
|
||||
|
@ -118,7 +116,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
--stack_ptr;
|
||||
}
|
||||
}
|
||||
BVH_DEBUG_NEXT_NODE();
|
||||
}
|
||||
|
||||
/* if node is leaf, fetch triangle list */
|
||||
|
@ -138,7 +135,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
switch (type & PRIMITIVE_ALL) {
|
||||
case PRIMITIVE_TRIANGLE: {
|
||||
for (; prim_addr < prim_addr2; prim_addr++) {
|
||||
BVH_DEBUG_NEXT_INTERSECTION();
|
||||
kernel_assert(kernel_tex_fetch(__prim_type, prim_addr) == type);
|
||||
if (triangle_intersect(kg, isect, P, dir, visibility, object, prim_addr)) {
|
||||
/* shadow ray early termination */
|
||||
|
@ -151,7 +147,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
#if BVH_FEATURE(BVH_MOTION)
|
||||
case PRIMITIVE_MOTION_TRIANGLE: {
|
||||
for (; prim_addr < prim_addr2; prim_addr++) {
|
||||
BVH_DEBUG_NEXT_INTERSECTION();
|
||||
kernel_assert(kernel_tex_fetch(__prim_type, prim_addr) == type);
|
||||
if (motion_triangle_intersect(
|
||||
kg, isect, P, dir, ray->time, visibility, object, prim_addr)) {
|
||||
|
@ -169,7 +164,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
case PRIMITIVE_CURVE_RIBBON:
|
||||
case PRIMITIVE_MOTION_CURVE_RIBBON: {
|
||||
for (; prim_addr < prim_addr2; prim_addr++) {
|
||||
BVH_DEBUG_NEXT_INTERSECTION();
|
||||
const uint curve_type = kernel_tex_fetch(__prim_type, prim_addr);
|
||||
kernel_assert((curve_type & PRIMITIVE_ALL) == (type & PRIMITIVE_ALL));
|
||||
const bool hit = curve_intersect(
|
||||
|
@ -201,8 +195,6 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
|||
traversal_stack[stack_ptr] = ENTRYPOINT_SENTINEL;
|
||||
|
||||
node_addr = kernel_tex_fetch(__object_node, object);
|
||||
|
||||
BVH_DEBUG_NEXT_INSTANCE();
|
||||
}
|
||||
}
|
||||
} while (node_addr != ENTRYPOINT_SENTINEL);
|
||||
|
|
|
@ -42,33 +42,6 @@ CCL_NAMESPACE_BEGIN
|
|||
|
||||
#define BVH_FEATURE(f) (((BVH_FUNCTION_FEATURES) & (f)) != 0)
|
||||
|
||||
/* Debugging helpers. */
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
# define BVH_DEBUG_INIT() \
|
||||
do { \
|
||||
isect->num_traversed_nodes = 0; \
|
||||
isect->num_traversed_instances = 0; \
|
||||
isect->num_intersections = 0; \
|
||||
} while (0)
|
||||
# define BVH_DEBUG_NEXT_NODE() \
|
||||
do { \
|
||||
++isect->num_traversed_nodes; \
|
||||
} while (0)
|
||||
# define BVH_DEBUG_NEXT_INTERSECTION() \
|
||||
do { \
|
||||
++isect->num_intersections; \
|
||||
} while (0)
|
||||
# define BVH_DEBUG_NEXT_INSTANCE() \
|
||||
do { \
|
||||
++isect->num_traversed_instances; \
|
||||
} while (0)
|
||||
#else /* __KERNEL_DEBUG__ */
|
||||
# define BVH_DEBUG_INIT()
|
||||
# define BVH_DEBUG_NEXT_NODE()
|
||||
# define BVH_DEBUG_NEXT_INTERSECTION()
|
||||
# define BVH_DEBUG_NEXT_INSTANCE()
|
||||
#endif /* __KERNEL_DEBUG__ */
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
#endif /* __BVH_TYPES__ */
|
||||
|
|
|
@ -225,13 +225,6 @@ ccl_device_inline void path_radiance_init(KernelGlobals *kg, PathRadiance *L)
|
|||
L->denoising_albedo = zero_float3();
|
||||
L->denoising_depth = 0.0f;
|
||||
#endif
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
L->debug_data.num_bvh_traversed_nodes = 0;
|
||||
L->debug_data.num_bvh_traversed_instances = 0;
|
||||
L->debug_data.num_bvh_intersections = 0;
|
||||
L->debug_data.num_ray_bounces = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
ccl_device_inline void path_radiance_bsdf_bounce(KernelGlobals *kg,
|
||||
|
@ -595,7 +588,9 @@ ccl_device_inline void path_radiance_sum_shadowcatcher(KernelGlobals *kg,
|
|||
float shadow;
|
||||
|
||||
if (UNLIKELY(!isfinite_safe(path_total))) {
|
||||
# ifdef __KERNEL_DEBUG_NAN__
|
||||
kernel_assert(!"Non-finite total radiance along the path");
|
||||
# endif
|
||||
shadow = 0.0f;
|
||||
}
|
||||
else if (path_total == 0.0f) {
|
||||
|
@ -641,7 +636,9 @@ ccl_device_inline float3 path_radiance_clamp_and_sum(KernelGlobals *kg,
|
|||
|
||||
/* Reject invalid value */
|
||||
if (!isfinite_safe(sum)) {
|
||||
# ifdef __KERNEL_DEBUG_NAN__
|
||||
kernel_assert(!"Non-finite sum in path_radiance_clamp_and_sum!");
|
||||
# endif
|
||||
L_sum = zero_float3();
|
||||
|
||||
L->direct_diffuse = zero_float3();
|
||||
|
@ -667,7 +664,9 @@ ccl_device_inline float3 path_radiance_clamp_and_sum(KernelGlobals *kg,
|
|||
/* Reject invalid value */
|
||||
float sum = fabsf((L_sum).x) + fabsf((L_sum).y) + fabsf((L_sum).z);
|
||||
if (!isfinite_safe(sum)) {
|
||||
#ifdef __KERNEL_DEBUG_NAN__
|
||||
kernel_assert(!"Non-finite final sum in path_radiance_clamp_and_sum!");
|
||||
#endif
|
||||
L_sum = zero_float3();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -122,31 +122,6 @@ ccl_device_inline void kernel_update_denoising_features(KernelGlobals *kg,
|
|||
}
|
||||
#endif /* __DENOISING_FEATURES__ */
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
ccl_device_inline void kernel_write_debug_passes(KernelGlobals *kg,
|
||||
ccl_global float *buffer,
|
||||
PathRadiance *L)
|
||||
{
|
||||
int flag = kernel_data.film.pass_flag;
|
||||
if (flag & PASSMASK(BVH_TRAVERSED_NODES)) {
|
||||
kernel_write_pass_float(buffer + kernel_data.film.pass_bvh_traversed_nodes,
|
||||
L->debug_data.num_bvh_traversed_nodes);
|
||||
}
|
||||
if (flag & PASSMASK(BVH_TRAVERSED_INSTANCES)) {
|
||||
kernel_write_pass_float(buffer + kernel_data.film.pass_bvh_traversed_instances,
|
||||
L->debug_data.num_bvh_traversed_instances);
|
||||
}
|
||||
if (flag & PASSMASK(BVH_INTERSECTIONS)) {
|
||||
kernel_write_pass_float(buffer + kernel_data.film.pass_bvh_intersections,
|
||||
L->debug_data.num_bvh_intersections);
|
||||
}
|
||||
if (flag & PASSMASK(RAY_BOUNCES)) {
|
||||
kernel_write_pass_float(buffer + kernel_data.film.pass_ray_bounces,
|
||||
L->debug_data.num_ray_bounces);
|
||||
}
|
||||
}
|
||||
#endif /* __KERNEL_DEBUG__ */
|
||||
|
||||
#ifdef __KERNEL_CPU__
|
||||
# define WRITE_ID_SLOT(buffer, depth, id, matte_weight, name) \
|
||||
kernel_write_id_pass_cpu(buffer, depth * 2, id, matte_weight, kg->coverage_##name)
|
||||
|
@ -389,10 +364,6 @@ ccl_device_inline void kernel_write_result(KernelGlobals *kg,
|
|||
}
|
||||
#endif /* __DENOISING_FEATURES__ */
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
kernel_write_debug_passes(kg, buffer, L);
|
||||
#endif
|
||||
|
||||
/* Adaptive Sampling. Fill the additional buffer with the odd samples and calculate our stopping
|
||||
criteria. This is the heuristic from "A hierarchical automatic stopping condition for Monte
|
||||
Carlo global illumination" except that here it is applied per pixel and not in hierarchical
|
||||
|
|
|
@ -70,15 +70,6 @@ ccl_device_forceinline bool kernel_path_scene_intersect(KernelGlobals *kg,
|
|||
|
||||
bool hit = scene_intersect(kg, ray, visibility, isect);
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
if (state->flag & PATH_RAY_CAMERA) {
|
||||
L->debug_data.num_bvh_traversed_nodes += isect->num_traversed_nodes;
|
||||
L->debug_data.num_bvh_traversed_instances += isect->num_traversed_instances;
|
||||
L->debug_data.num_bvh_intersections += isect->num_intersections;
|
||||
}
|
||||
L->debug_data.num_ray_bounces++;
|
||||
#endif /* __KERNEL_DEBUG__ */
|
||||
|
||||
return hit;
|
||||
}
|
||||
|
||||
|
|
|
@ -182,9 +182,8 @@ CCL_NAMESPACE_BEGIN
|
|||
# undef __SHADER_RAYTRACE__
|
||||
#endif
|
||||
|
||||
/* Features that enable others */
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
# define __KERNEL_DEBUG__
|
||||
#ifdef WITH_CYCLES_DEBUG_NAN
|
||||
# define __KERNEL_DEBUG_NAN__
|
||||
#endif
|
||||
|
||||
#if defined(__SUBSURFACE__) || defined(__SHADER_RAYTRACE__)
|
||||
|
@ -356,12 +355,6 @@ typedef enum PassType {
|
|||
PASS_MATERIAL_ID,
|
||||
PASS_MOTION,
|
||||
PASS_MOTION_WEIGHT,
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
PASS_BVH_TRAVERSED_NODES,
|
||||
PASS_BVH_TRAVERSED_INSTANCES,
|
||||
PASS_BVH_INTERSECTIONS,
|
||||
PASS_RAY_BOUNCES,
|
||||
#endif
|
||||
PASS_RENDER_TIME,
|
||||
PASS_CRYPTOMATTE,
|
||||
PASS_AOV_COLOR,
|
||||
|
@ -465,18 +458,6 @@ typedef enum DenoiseFlag {
|
|||
DENOISING_CLEAN_ALL_PASSES = (1 << 6) - 1,
|
||||
} DenoiseFlag;
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
/* NOTE: This is a runtime-only struct, alignment is not
|
||||
* really important here.
|
||||
*/
|
||||
typedef struct DebugData {
|
||||
int num_bvh_traversed_nodes;
|
||||
int num_bvh_traversed_instances;
|
||||
int num_bvh_intersections;
|
||||
int num_ray_bounces;
|
||||
} DebugData;
|
||||
#endif
|
||||
|
||||
typedef ccl_addr_space struct PathRadianceState {
|
||||
#ifdef __PASSES__
|
||||
float3 diffuse;
|
||||
|
@ -552,10 +533,6 @@ typedef ccl_addr_space struct PathRadiance {
|
|||
float3 denoising_albedo;
|
||||
float denoising_depth;
|
||||
#endif /* __DENOISING_FEATURES__ */
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
DebugData debug_data;
|
||||
#endif /* __KERNEL_DEBUG__ */
|
||||
} PathRadiance;
|
||||
|
||||
typedef struct BsdfEval {
|
||||
|
@ -671,12 +648,6 @@ typedef struct Intersection {
|
|||
int prim;
|
||||
int object;
|
||||
int type;
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
int num_traversed_nodes;
|
||||
int num_traversed_instances;
|
||||
int num_intersections;
|
||||
#endif
|
||||
} Intersection;
|
||||
|
||||
/* Primitives */
|
||||
|
@ -1265,13 +1236,6 @@ typedef struct KernelFilm {
|
|||
int pass_bake_differential;
|
||||
int pad;
|
||||
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
int pass_bvh_traversed_nodes;
|
||||
int pass_bvh_traversed_instances;
|
||||
int pass_bvh_intersections;
|
||||
int pass_ray_bounces;
|
||||
#endif
|
||||
|
||||
/* viewport rendering options */
|
||||
int display_pass_stride;
|
||||
int display_pass_components;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "render/mesh.h"
|
||||
|
||||
#include "util/util_foreach.h"
|
||||
#include "util/util_logging.h"
|
||||
#include "util/util_transform.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
@ -208,6 +209,7 @@ size_t Attribute::element_size(Geometry *geom, AttributePrimitive prim) const
|
|||
case ATTR_ELEMENT_VERTEX_MOTION:
|
||||
if (geom->geometry_type == Geometry::MESH) {
|
||||
Mesh *mesh = static_cast<Mesh *>(geom);
|
||||
DCHECK_GT(mesh->get_motion_steps(), 0);
|
||||
size = (mesh->get_verts().size() + mesh->get_num_ngons()) * (mesh->get_motion_steps() - 1);
|
||||
if (prim == ATTR_PRIM_SUBD) {
|
||||
size -= mesh->get_num_subd_verts() * (mesh->get_motion_steps() - 1);
|
||||
|
@ -252,6 +254,7 @@ size_t Attribute::element_size(Geometry *geom, AttributePrimitive prim) const
|
|||
case ATTR_ELEMENT_CURVE_KEY_MOTION:
|
||||
if (geom->geometry_type == Geometry::HAIR) {
|
||||
Hair *hair = static_cast<Hair *>(geom);
|
||||
DCHECK_GT(hair->get_motion_steps(), 0);
|
||||
size = hair->get_curve_keys().size() * (hair->get_motion_steps() - 1);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -322,15 +322,6 @@ bool RenderBuffers::get_pass_rect(
|
|||
pixels[0] = saturate(f * scale_exposure);
|
||||
}
|
||||
}
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
else if (type == PASS_BVH_TRAVERSED_NODES || type == PASS_BVH_TRAVERSED_INSTANCES ||
|
||||
type == PASS_BVH_INTERSECTIONS || type == PASS_RAY_BOUNCES) {
|
||||
for (int i = 0; i < size; i++, in += pass_stride, pixels++) {
|
||||
float f = *in;
|
||||
pixels[0] = f * scale;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
for (int i = 0; i < size; i++, in += pass_stride, pixels++) {
|
||||
float f = *in;
|
||||
|
|
|
@ -385,7 +385,7 @@ void ColorSpaceManager::free_memory()
|
|||
{
|
||||
#ifdef WITH_OCIO
|
||||
map_free_memory(cached_colorspaces);
|
||||
map_free_memory(cached_colorspaces);
|
||||
map_free_memory(cached_processors);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -51,12 +51,6 @@ static NodeEnum *get_pass_type_enum()
|
|||
pass_type_enum.insert("material_id", PASS_MATERIAL_ID);
|
||||
pass_type_enum.insert("motion", PASS_MOTION);
|
||||
pass_type_enum.insert("motion_weight", PASS_MOTION_WEIGHT);
|
||||
#ifdef __KERNEL_DEBUG__
|
||||
pass_type_enum.insert("traversed_nodes", PASS_BVH_TRAVERSED_NODES);
|
||||
pass_type_enum.insert("traverse_instances", PASS_BVH_TRAVERSED_INSTANCES);
|
||||
pass_type_enum.insert("bvh_intersections", PASS_BVH_INTERSECTIONS);
|
||||
pass_type_enum.insert("ray_bounces", PASS_RAY_BOUNCES);
|
||||
#endif
|
||||
pass_type_enum.insert("render_time", PASS_RENDER_TIME);
|
||||
pass_type_enum.insert("cryptomatte", PASS_CRYPTOMATTE);
|
||||
pass_type_enum.insert("aov_color", PASS_AOV_COLOR);
|
||||
|
@ -200,15 +194,6 @@ void Pass::add(PassType type, vector<Pass> &passes, const char *name)
|
|||
*/
|
||||
pass.components = 0;
|
||||
break;
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
case PASS_BVH_TRAVERSED_NODES:
|
||||
case PASS_BVH_TRAVERSED_INSTANCES:
|
||||
case PASS_BVH_INTERSECTIONS:
|
||||
case PASS_RAY_BOUNCES:
|
||||
pass.components = 1;
|
||||
pass.exposure = false;
|
||||
break;
|
||||
#endif
|
||||
case PASS_RENDER_TIME:
|
||||
/* This pass is handled entirely on the host side. */
|
||||
pass.components = 0;
|
||||
|
@ -570,20 +555,6 @@ void Film::device_update(Device *device, DeviceScene *dscene, Scene *scene)
|
|||
kfilm->pass_bake_differential = kfilm->pass_stride;
|
||||
break;
|
||||
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
case PASS_BVH_TRAVERSED_NODES:
|
||||
kfilm->pass_bvh_traversed_nodes = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_BVH_TRAVERSED_INSTANCES:
|
||||
kfilm->pass_bvh_traversed_instances = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_BVH_INTERSECTIONS:
|
||||
kfilm->pass_bvh_intersections = kfilm->pass_stride;
|
||||
break;
|
||||
case PASS_RAY_BOUNCES:
|
||||
kfilm->pass_ray_bounces = kfilm->pass_stride;
|
||||
break;
|
||||
#endif
|
||||
case PASS_RENDER_TIME:
|
||||
break;
|
||||
case PASS_CRYPTOMATTE:
|
||||
|
|
|
@ -993,7 +993,7 @@ void OSLCompiler::parameter_array(const char *name, const float f[], int arrayle
|
|||
|
||||
void OSLCompiler::parameter_color_array(const char *name, const array<float3> &f)
|
||||
{
|
||||
/* NB: cycles float3 type is actually 4 floats! need to use an explicit array */
|
||||
/* NOTE: cycles float3 type is actually 4 floats! need to use an explicit array. */
|
||||
array<float[3]> table(f.size());
|
||||
|
||||
for (int i = 0; i < f.size(); ++i) {
|
||||
|
|
|
@ -26,9 +26,9 @@
|
|||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
#ifdef WITH_CYCLES_LOGGING
|
||||
static bool is_verbosity_set()
|
||||
{
|
||||
#ifdef WITH_CYCLES_LOGGING
|
||||
using CYCLES_GFLAGS_NAMESPACE::GetCommandLineOption;
|
||||
|
||||
std::string verbosity;
|
||||
|
@ -36,10 +36,8 @@ static bool is_verbosity_set()
|
|||
return false;
|
||||
}
|
||||
return verbosity != "0";
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void util_logging_init(const char *argv0)
|
||||
{
|
||||
|
|
|
@ -40,7 +40,7 @@ class LogMessageVoidify {
|
|||
LogMessageVoidify()
|
||||
{
|
||||
}
|
||||
void operator&(StubStream &)
|
||||
void operator&(const StubStream &)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
@ -49,6 +49,36 @@ class LogMessageVoidify {
|
|||
# define LOG(severity) LOG_SUPPRESS()
|
||||
# define VLOG(severity) LOG_SUPPRESS()
|
||||
# define VLOG_IF(severity, condition) LOG_SUPPRESS()
|
||||
|
||||
# define CHECK(expression) LOG_SUPPRESS()
|
||||
|
||||
# define CHECK_NOTNULL(expression) LOG_SUPPRESS()
|
||||
# define CHECK_NULL(expression) LOG_SUPPRESS()
|
||||
|
||||
# define CHECK_NEAR(actual, expected, eps) LOG_SUPPRESS()
|
||||
|
||||
# define CHECK_GE(a, b) LOG_SUPPRESS()
|
||||
# define CHECK_NE(a, b) LOG_SUPPRESS()
|
||||
# define CHECK_EQ(a, b) LOG_SUPPRESS()
|
||||
# define CHECK_GT(a, b) LOG_SUPPRESS()
|
||||
# define CHECK_LT(a, b) LOG_SUPPRESS()
|
||||
# define CHECK_LE(a, b) LOG_SUPPRESS()
|
||||
|
||||
# define DCHECK(expression) LOG_SUPPRESS()
|
||||
|
||||
# define DCHECK_NOTNULL(expression) LOG_SUPPRESS()
|
||||
# define DCHECK_NULL(expression) LOG_SUPPRESS()
|
||||
|
||||
# define DCHECK_NEAR(actual, expected, eps) LOG_SUPPRESS()
|
||||
|
||||
# define DCHECK_GE(a, b) LOG_SUPPRESS()
|
||||
# define DCHECK_NE(a, b) LOG_SUPPRESS()
|
||||
# define DCHECK_EQ(a, b) LOG_SUPPRESS()
|
||||
# define DCHECK_GT(a, b) LOG_SUPPRESS()
|
||||
# define DCHECK_LT(a, b) LOG_SUPPRESS()
|
||||
# define DCHECK_LE(a, b) LOG_SUPPRESS()
|
||||
|
||||
# define LOG_ASSERT(expression) LOG_SUPPRESS()
|
||||
#endif
|
||||
|
||||
#define VLOG_ONCE(level, flag) \
|
||||
|
|
|
@ -103,7 +103,7 @@ ccl_device float fast_sinf(float x)
|
|||
* 1.19209e-07 max error
|
||||
*/
|
||||
int q = fast_rint(x * M_1_PI_F);
|
||||
float qf = q;
|
||||
float qf = (float)q;
|
||||
x = madd(qf, -0.78515625f * 4, x);
|
||||
x = madd(qf, -0.00024187564849853515625f * 4, x);
|
||||
x = madd(qf, -3.7747668102383613586e-08f * 4, x);
|
||||
|
@ -132,7 +132,7 @@ ccl_device float fast_cosf(float x)
|
|||
{
|
||||
/* Same argument reduction as fast_sinf(). */
|
||||
int q = fast_rint(x * M_1_PI_F);
|
||||
float qf = q;
|
||||
float qf = (float)q;
|
||||
x = madd(qf, -0.78515625f * 4, x);
|
||||
x = madd(qf, -0.00024187564849853515625f * 4, x);
|
||||
x = madd(qf, -3.7747668102383613586e-08f * 4, x);
|
||||
|
@ -160,7 +160,7 @@ ccl_device void fast_sincosf(float x, float *sine, float *cosine)
|
|||
{
|
||||
/* Same argument reduction as fast_sin. */
|
||||
int q = fast_rint(x * M_1_PI_F);
|
||||
float qf = q;
|
||||
float qf = (float)q;
|
||||
x = madd(qf, -0.78515625f * 4, x);
|
||||
x = madd(qf, -0.00024187564849853515625f * 4, x);
|
||||
x = madd(qf, -3.7747668102383613586e-08f * 4, x);
|
||||
|
@ -207,7 +207,7 @@ ccl_device float fast_tanf(float x)
|
|||
* we sometimes need to take the reciprocal of the polynomial
|
||||
*/
|
||||
int q = fast_rint(x * 2.0f * M_1_PI_F);
|
||||
float qf = q;
|
||||
float qf = (float)q;
|
||||
x = madd(qf, -0.78515625f * 2, x);
|
||||
x = madd(qf, -0.00024187564849853515625f * 2, x);
|
||||
x = madd(qf, -3.7747668102383613586e-08f * 2, x);
|
||||
|
@ -407,7 +407,7 @@ ccl_device float fast_logb(float x)
|
|||
x = fabsf(x);
|
||||
x = clamp(x, FLT_MIN, FLT_MAX);
|
||||
unsigned bits = __float_as_uint(x);
|
||||
return (int)(bits >> 23) - 127;
|
||||
return (float)((int)(bits >> 23) - 127);
|
||||
}
|
||||
|
||||
ccl_device float fast_exp2f(float x)
|
||||
|
|
|
@ -188,8 +188,8 @@ extern GHOST_WindowHandle GHOST_CreateWindow(GHOST_SystemHandle systemhandle,
|
|||
GHOST_GLSettings glSettings);
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \param systemhandle: The handle to the system.
|
||||
* \param platform_support_callback: An optional callback to check platform support.
|
||||
* \return A handle to the new context ( == NULL if creation failed).
|
||||
|
@ -628,7 +628,7 @@ extern void GHOST_ScreenToClient(
|
|||
GHOST_WindowHandle windowhandle, int32_t inX, int32_t inY, int32_t *outX, int32_t *outY);
|
||||
|
||||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates
|
||||
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||
* \param windowhandle: The handle to the window.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
/**
|
||||
* Interface for GHOST context.
|
||||
*
|
||||
* You can create a offscreen context (windowless) with the system's
|
||||
* GHOST_ISystem::createOffscreenContext method.
|
||||
* You can create a off-screen context (windowless) with the system's
|
||||
* #GHOST_ISystem::createOffscreenContext method.
|
||||
* \see GHOST_ISystem#createOffscreenContext
|
||||
*/
|
||||
class GHOST_IContext {
|
||||
|
|
|
@ -261,8 +261,8 @@ class GHOST_ISystem {
|
|||
virtual GHOST_TSuccess disposeWindow(GHOST_IWindow *window) = 0;
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
virtual GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings) = 0;
|
||||
|
|
|
@ -133,7 +133,7 @@ class GHOST_IWindow {
|
|||
virtual void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const = 0;
|
||||
|
||||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates
|
||||
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
* \param outX: The x-coordinate on the screen.
|
||||
|
|
|
@ -611,9 +611,9 @@ typedef void (*GHOST_TimerProcPtr)(struct GHOST_TimerTaskHandle__ *task, uint64_
|
|||
struct GHOST_XrDrawViewInfo;
|
||||
struct GHOST_XrError;
|
||||
/**
|
||||
* The XR view (i.e. the OpenXR runtime) may require a different graphics library than OpenGL. An
|
||||
* offscreen texture of the viewport will then be drawn into using OpenGL, but the final texture
|
||||
* draw call will happen through another lib (say DirectX).
|
||||
* The XR view (i.e. the OpenXR runtime) may require a different graphics library than OpenGL.
|
||||
* An off-screen texture of the viewport will then be drawn into using OpenGL,
|
||||
* but the final texture draw call will happen through another library (say DirectX).
|
||||
*
|
||||
* This enum defines the possible graphics bindings to attempt to enable.
|
||||
*/
|
||||
|
@ -683,6 +683,10 @@ typedef struct GHOST_XrDrawViewInfo {
|
|||
|
||||
/** Set if the buffer should be submitted with a SRGB transfer applied. */
|
||||
char expects_srgb_buffer;
|
||||
|
||||
/** The view that this info represents. Not necessarily the "eye index" (e.g. for quad view
|
||||
* systems, etc). */
|
||||
char view_idx;
|
||||
} GHOST_XrDrawViewInfo;
|
||||
|
||||
typedef struct GHOST_XrError {
|
||||
|
|
|
@ -217,7 +217,7 @@ static void makeAttribList(std::vector<NSOpenGLPixelFormatAttribute> &attribs,
|
|||
attribs.push_back(NSOpenGLPFAOpenGLProfile);
|
||||
attribs.push_back(coreProfile ? NSOpenGLProfileVersion3_2Core : NSOpenGLProfileVersionLegacy);
|
||||
|
||||
// Pixel Format Attributes for the windowed NSOpenGLContext
|
||||
/* Pixel Format Attributes for the windowed NSOpenGLContext. */
|
||||
attribs.push_back(NSOpenGLPFADoubleBuffer);
|
||||
|
||||
if (softwareGL) {
|
||||
|
@ -250,7 +250,8 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
|||
static const bool needAlpha = false;
|
||||
#endif
|
||||
|
||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL"); // command-line argument would be better
|
||||
/* Command-line argument would be better. */
|
||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL");
|
||||
|
||||
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
||||
attribs.reserve(40);
|
||||
|
@ -287,7 +288,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
|||
|
||||
if (m_metalView) {
|
||||
if (m_defaultFramebuffer == 0) {
|
||||
// Create a virtual framebuffer
|
||||
/* Create a virtual frame-buffer. */
|
||||
[m_openGLContext makeCurrentContext];
|
||||
metalInitFramebuffer();
|
||||
initClearGL();
|
||||
|
@ -342,11 +343,11 @@ void GHOST_ContextCGL::metalInit()
|
|||
/* clang-format on */
|
||||
id<MTLDevice> device = m_metalLayer.device;
|
||||
|
||||
// Create a command queue for blit/present operation
|
||||
/* Create a command queue for blit/present operation. */
|
||||
m_metalCmdQueue = (MTLCommandQueue *)[device newCommandQueue];
|
||||
[m_metalCmdQueue retain];
|
||||
|
||||
// Create shaders for blit operation
|
||||
/* Create shaders for blit operation. */
|
||||
NSString *source = @R"msl(
|
||||
using namespace metal;
|
||||
|
||||
|
@ -387,7 +388,7 @@ void GHOST_ContextCGL::metalInit()
|
|||
"GHOST_ContextCGL::metalInit: newLibraryWithSource:options:error: failed!");
|
||||
}
|
||||
|
||||
// Create a render pipeline for blit operation
|
||||
/* Create a render pipeline for blit operation. */
|
||||
MTLRenderPipelineDescriptor *desc = [[[MTLRenderPipelineDescriptor alloc] init] autorelease];
|
||||
|
||||
desc.fragmentFunction = [library newFunctionWithName:@"fragment_shader"];
|
||||
|
@ -460,7 +461,7 @@ void GHOST_ContextCGL::metalUpdateFramebuffer()
|
|||
"GHOST_ContextCGL::metalUpdateFramebuffer: CVPixelBufferCreate failed!");
|
||||
}
|
||||
|
||||
// Create an OpenGL texture
|
||||
/* Create an OpenGL texture. */
|
||||
CVOpenGLTextureCacheRef cvGLTexCache = nil;
|
||||
cvret = CVOpenGLTextureCacheCreate(kCFAllocatorDefault,
|
||||
nil,
|
||||
|
@ -485,7 +486,7 @@ void GHOST_ContextCGL::metalUpdateFramebuffer()
|
|||
unsigned int glTex;
|
||||
glTex = CVOpenGLTextureGetName(cvGLTex);
|
||||
|
||||
// Create a Metal texture
|
||||
/* Create a Metal texture. */
|
||||
CVMetalTextureCacheRef cvMetalTexCache = nil;
|
||||
cvret = CVMetalTextureCacheCreate(
|
||||
kCFAllocatorDefault, nil, m_metalLayer.device, nil, &cvMetalTexCache);
|
||||
|
|
|
@ -283,8 +283,8 @@ GHOST_TSuccess GHOST_ContextEGL::setSwapInterval(int interval)
|
|||
|
||||
GHOST_TSuccess GHOST_ContextEGL::getSwapInterval(int &intervalOut)
|
||||
{
|
||||
// This is a bit of a kludge because there does not seem to
|
||||
// be a way to query the swap interval with EGL.
|
||||
/* This is a bit of a kludge because there does not seem to
|
||||
* be a way to query the swap interval with EGL. */
|
||||
intervalOut = m_swap_interval;
|
||||
|
||||
return GHOST_kSuccess;
|
||||
|
@ -365,21 +365,21 @@ static const std::string &api_string(EGLenum api)
|
|||
|
||||
GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
||||
{
|
||||
// objects have to be declared here due to the use of goto
|
||||
/* Objects have to be declared here due to the use of `goto`. */
|
||||
std::vector<EGLint> attrib_list;
|
||||
EGLint num_config = 0;
|
||||
|
||||
if (m_stereoVisual)
|
||||
fprintf(stderr, "Warning! Stereo OpenGL ES contexts are not supported.\n");
|
||||
|
||||
m_stereoVisual = false; // It doesn't matter what the Window wants.
|
||||
m_stereoVisual = false; /* It doesn't matter what the Window wants. */
|
||||
|
||||
if (!initContextEGLEW()) {
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
|
||||
#ifdef WITH_GL_ANGLE
|
||||
// d3dcompiler_XX.dll needs to be loaded before ANGLE will work
|
||||
/* `d3dcompiler_XX.dll` needs to be loaded before ANGLE will work. */
|
||||
if (s_d3dcompiler == NULL) {
|
||||
s_d3dcompiler = LoadLibrary(D3DCOMPILER);
|
||||
|
||||
|
@ -410,13 +410,13 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||
if (!bindAPI(m_api))
|
||||
goto error;
|
||||
|
||||
// build attribute list
|
||||
/* Build attribute list. */
|
||||
|
||||
attrib_list.reserve(20);
|
||||
|
||||
if (m_api == EGL_OPENGL_ES_API && EGLEW_VERSION_1_2) {
|
||||
// According to the spec it seems that you are required to set EGL_RENDERABLE_TYPE,
|
||||
// but some implementations (ANGLE) do not seem to care.
|
||||
/* According to the spec it seems that you are required to set EGL_RENDERABLE_TYPE,
|
||||
* but some implementations (ANGLE) do not seem to care. */
|
||||
|
||||
if (m_contextMajorVersion == 1) {
|
||||
attrib_list.push_back(EGL_RENDERABLE_TYPE);
|
||||
|
@ -469,7 +469,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||
#endif
|
||||
|
||||
if (m_nativeWindow == 0) {
|
||||
// off-screen surface
|
||||
/* Off-screen surface. */
|
||||
attrib_list.push_back(EGL_SURFACE_TYPE);
|
||||
attrib_list.push_back(EGL_PBUFFER_BIT);
|
||||
}
|
||||
|
@ -479,8 +479,8 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
|||
if (!EGL_CHK(::eglChooseConfig(m_display, &(attrib_list[0]), &m_config, 1, &num_config)))
|
||||
goto error;
|
||||
|
||||
// A common error is to assume that ChooseConfig worked because it returned EGL_TRUE
|
||||
if (num_config != 1) // num_config should be exactly 1
|
||||
/* A common error is to assume that ChooseConfig worked because it returned EGL_TRUE. */
|
||||
if (num_config != 1) /* `num_config` should be exactly 1. */
|
||||
goto error;
|
||||
|
||||
if (m_nativeWindow != 0) {
|
||||
|
|
|
@ -239,7 +239,7 @@ GHOST_TSuccess GHOST_ContextGLX::initializeDrawingContext()
|
|||
}
|
||||
attribs[i++] = 0;
|
||||
|
||||
/* Some drivers don't like having a true offscreen context.
|
||||
/* Some drivers don't like having a true off-screen context.
|
||||
* Create a pixel buffer instead of a window to render to.
|
||||
* even if it will never be used for drawing. */
|
||||
int pbuffer_attribs[] = {GLX_PBUFFER_WIDTH, 1, GLX_PBUFFER_HEIGHT, 1, None};
|
||||
|
|
|
@ -335,10 +335,11 @@ void GHOST_ContextWGL::initContextWGLEW(PIXELFORMATDESCRIPTOR &preferredPFD)
|
|||
if (!WIN32_CHK(::wglMakeCurrent(dummyHDC, dummyHGLRC)))
|
||||
goto finalize;
|
||||
|
||||
if (GLEW_CHK(glewInit()) != GLEW_OK)
|
||||
if (GLEW_CHK(glewInit()) != GLEW_OK) {
|
||||
fprintf(stderr, "Warning! Dummy GLEW/WGLEW failed to initialize properly.\n");
|
||||
}
|
||||
|
||||
// the following are not technially WGLEW, but they also require a context to work
|
||||
/* The following are not technically WGLEW, but they also require a context to work. */
|
||||
|
||||
#ifndef NDEBUG
|
||||
free((void *)m_dummyRenderer);
|
||||
|
|
|
@ -51,7 +51,7 @@ GHOST_TSuccess GHOST_DisplayManager::initialize(void)
|
|||
|
||||
GHOST_TSuccess GHOST_DisplayManager::getNumDisplays(uint8_t & /*numDisplays*/) const
|
||||
{
|
||||
// Don't know if we have a display...
|
||||
/* Don't know if we have a display. */
|
||||
return GHOST_kFailure;
|
||||
}
|
||||
|
||||
|
@ -120,18 +120,18 @@ GHOST_TSuccess GHOST_DisplayManager::findMatch(uint8_t display,
|
|||
(int)setting.xPixels, (int)setting.yPixels, (int)setting.bpp, (int)setting.frequency};
|
||||
int capabilities[4];
|
||||
double field, score;
|
||||
double best = 1e12; // A big number
|
||||
double best = 1e12; /* A big number. */
|
||||
int found = 0;
|
||||
|
||||
// Look at all the display modes
|
||||
/* Look at all the display modes. */
|
||||
for (int i = 0; (i < (int)m_settings[display].size()); i++) {
|
||||
// Store the capabilities of the display device
|
||||
/* Store the capabilities of the display device. */
|
||||
capabilities[0] = m_settings[display][i].xPixels;
|
||||
capabilities[1] = m_settings[display][i].yPixels;
|
||||
capabilities[2] = m_settings[display][i].bpp;
|
||||
capabilities[3] = m_settings[display][i].frequency;
|
||||
|
||||
// Match against all the fields of the display settings
|
||||
/* Match against all the fields of the display settings. */
|
||||
score = 0;
|
||||
for (int j = 0; j < 4; j++) {
|
||||
field = capabilities[j] - criteria[j];
|
||||
|
|
|
@ -115,8 +115,10 @@ GHOST_DropTargetX11::~GHOST_DropTargetX11()
|
|||
/* Based on: https://stackoverflow.com/a/2766963/432509 */
|
||||
|
||||
typedef enum DecodeState_e {
|
||||
STATE_SEARCH = 0, ///< searching for an ampersand to convert
|
||||
STATE_CONVERTING ///< convert the two proceeding characters from hex
|
||||
/** Searching for an ampersand to convert. */
|
||||
STATE_SEARCH = 0,
|
||||
/** Convert the two proceeding characters from hex. */
|
||||
STATE_CONVERTING
|
||||
} DecodeState_e;
|
||||
|
||||
void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn)
|
||||
|
|
|
@ -90,7 +90,7 @@ class GHOST_EventDragnDrop : public GHOST_Event {
|
|||
|
||||
~GHOST_EventDragnDrop()
|
||||
{
|
||||
// Free the dropped object data
|
||||
/* Free the dropped object data. */
|
||||
if (m_dragnDropEventData.data == NULL)
|
||||
return;
|
||||
|
||||
|
|
|
@ -108,12 +108,12 @@ GHOST_TSuccess GHOST_EventManager::addConsumer(GHOST_IEventConsumer *consumer)
|
|||
GHOST_TSuccess success;
|
||||
GHOST_ASSERT(consumer, "invalid consumer");
|
||||
|
||||
// Check to see whether the consumer is already in our list
|
||||
/* Check to see whether the consumer is already in our list. */
|
||||
TConsumerVector::const_iterator iter = std::find(
|
||||
m_consumers.begin(), m_consumers.end(), consumer);
|
||||
|
||||
if (iter == m_consumers.end()) {
|
||||
// Add the consumer
|
||||
/* Add the consumer. */
|
||||
m_consumers.push_back(consumer);
|
||||
success = GHOST_kSuccess;
|
||||
}
|
||||
|
@ -128,11 +128,11 @@ GHOST_TSuccess GHOST_EventManager::removeConsumer(GHOST_IEventConsumer *consumer
|
|||
GHOST_TSuccess success;
|
||||
GHOST_ASSERT(consumer, "invalid consumer");
|
||||
|
||||
// Check to see whether the consumer is in our list
|
||||
/* Check to see whether the consumer is in our list. */
|
||||
TConsumerVector::iterator iter = std::find(m_consumers.begin(), m_consumers.end(), consumer);
|
||||
|
||||
if (iter != m_consumers.end()) {
|
||||
// Remove the consumer
|
||||
/* Remove the consumer. */
|
||||
m_consumers.erase(iter);
|
||||
success = GHOST_kSuccess;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,8 @@ GHOST_TSuccess GHOST_ISystem::createSystem()
|
|||
}
|
||||
catch (const std::runtime_error &) {
|
||||
/* fallback to X11. */
|
||||
delete m_system;
|
||||
m_system = nullptr;
|
||||
}
|
||||
if (!m_system) {
|
||||
m_system = new GHOST_SystemX11();
|
||||
|
|
|
@ -22,51 +22,51 @@
|
|||
|
||||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h> // for error/info reporting
|
||||
#include <string.h> // for memory functions
|
||||
#include <stdio.h> /* For error/info reporting. */
|
||||
#include <string.h> /* For memory functions. */
|
||||
|
||||
#ifdef DEBUG_NDOF_MOTION
|
||||
// printable version of each GHOST_TProgress value
|
||||
/* Printable version of each GHOST_TProgress value. */
|
||||
static const char *progress_string[] = {
|
||||
"not started", "starting", "in progress", "finishing", "finished"};
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_NDOF_BUTTONS
|
||||
static const char *ndof_button_names[] = {
|
||||
// used internally, never sent
|
||||
/* used internally, never sent */
|
||||
"NDOF_BUTTON_NONE",
|
||||
// these two are available from any 3Dconnexion device
|
||||
/* these two are available from any 3Dconnexion device */
|
||||
"NDOF_BUTTON_MENU",
|
||||
"NDOF_BUTTON_FIT",
|
||||
// standard views
|
||||
/* standard views */
|
||||
"NDOF_BUTTON_TOP",
|
||||
"NDOF_BUTTON_BOTTOM",
|
||||
"NDOF_BUTTON_LEFT",
|
||||
"NDOF_BUTTON_RIGHT",
|
||||
"NDOF_BUTTON_FRONT",
|
||||
"NDOF_BUTTON_BACK",
|
||||
// more views
|
||||
/* more views */
|
||||
"NDOF_BUTTON_ISO1",
|
||||
"NDOF_BUTTON_ISO2",
|
||||
// 90 degree rotations
|
||||
/* 90 degree rotations */
|
||||
"NDOF_BUTTON_ROLL_CW",
|
||||
"NDOF_BUTTON_ROLL_CCW",
|
||||
"NDOF_BUTTON_SPIN_CW",
|
||||
"NDOF_BUTTON_SPIN_CCW",
|
||||
"NDOF_BUTTON_TILT_CW",
|
||||
"NDOF_BUTTON_TILT_CCW",
|
||||
// device control
|
||||
/* device control */
|
||||
"NDOF_BUTTON_ROTATE",
|
||||
"NDOF_BUTTON_PANZOOM",
|
||||
"NDOF_BUTTON_DOMINANT",
|
||||
"NDOF_BUTTON_PLUS",
|
||||
"NDOF_BUTTON_MINUS",
|
||||
// keyboard emulation
|
||||
/* keyboard emulation */
|
||||
"NDOF_BUTTON_ESC",
|
||||
"NDOF_BUTTON_ALT",
|
||||
"NDOF_BUTTON_SHIFT",
|
||||
"NDOF_BUTTON_CTRL",
|
||||
// general-purpose buttons
|
||||
/* general-purpose buttons */
|
||||
"NDOF_BUTTON_1",
|
||||
"NDOF_BUTTON_2",
|
||||
"NDOF_BUTTON_3",
|
||||
|
@ -77,17 +77,17 @@ static const char *ndof_button_names[] = {
|
|||
"NDOF_BUTTON_8",
|
||||
"NDOF_BUTTON_9",
|
||||
"NDOF_BUTTON_10",
|
||||
// more general-purpose buttons
|
||||
/* more general-purpose buttons */
|
||||
"NDOF_BUTTON_A",
|
||||
"NDOF_BUTTON_B",
|
||||
"NDOF_BUTTON_C",
|
||||
// the end
|
||||
/* the end */
|
||||
"NDOF_BUTTON_LAST"};
|
||||
#endif
|
||||
|
||||
// shared by the latest 3Dconnexion hardware
|
||||
// SpacePilotPro uses all of these
|
||||
// smaller devices use only some, based on button mask
|
||||
/* Shared by the latest 3Dconnexion hardware
|
||||
* SpacePilotPro uses all of these
|
||||
* smaller devices use only some, based on button mask. */
|
||||
static const NDOF_ButtonT Modern3Dx_HID_map[] = {
|
||||
NDOF_BUTTON_MENU, NDOF_BUTTON_FIT, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
||||
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_BOTTOM, NDOF_BUTTON_BACK,
|
||||
|
@ -116,15 +116,15 @@ static const NDOF_ButtonT SpaceExplorer_HID_map[] = {
|
|||
NDOF_BUTTON_ROTATE,
|
||||
};
|
||||
|
||||
// this is the older SpacePilot (sans Pro)
|
||||
// thanks to polosson for info about this device
|
||||
/* This is the older SpacePilot (sans Pro)
|
||||
* thanks to polosson for info about this device. */
|
||||
static const NDOF_ButtonT SpacePilot_HID_map[] = {
|
||||
NDOF_BUTTON_1, NDOF_BUTTON_2, NDOF_BUTTON_3, NDOF_BUTTON_4,
|
||||
NDOF_BUTTON_5, NDOF_BUTTON_6, NDOF_BUTTON_TOP, NDOF_BUTTON_LEFT,
|
||||
NDOF_BUTTON_RIGHT, NDOF_BUTTON_FRONT, NDOF_BUTTON_ESC, NDOF_BUTTON_ALT,
|
||||
NDOF_BUTTON_SHIFT, NDOF_BUTTON_CTRL, NDOF_BUTTON_FIT, NDOF_BUTTON_MENU,
|
||||
NDOF_BUTTON_PLUS, NDOF_BUTTON_MINUS, NDOF_BUTTON_DOMINANT, NDOF_BUTTON_ROTATE,
|
||||
NDOF_BUTTON_NONE // the CONFIG button -- what does it do?
|
||||
NDOF_BUTTON_NONE /* the CONFIG button -- what does it do? */
|
||||
};
|
||||
|
||||
static const NDOF_ButtonT Generic_HID_map[] = {
|
||||
|
@ -146,7 +146,7 @@ static const int genericButtonCount = sizeof(Generic_HID_map) / sizeof(NDOF_Butt
|
|||
|
||||
GHOST_NDOFManager::GHOST_NDOFManager(GHOST_System &sys)
|
||||
: m_system(sys),
|
||||
m_deviceType(NDOF_UnknownDevice), // each platform has its own device detection code
|
||||
m_deviceType(NDOF_UnknownDevice), /* Each platform has its own device detection code. */
|
||||
m_buttonCount(genericButtonCount),
|
||||
m_buttonMask(0),
|
||||
m_hidMap(Generic_HID_map),
|
||||
|
@ -157,37 +157,37 @@ GHOST_NDOFManager::GHOST_NDOFManager(GHOST_System &sys)
|
|||
m_motionEventPending(false),
|
||||
m_deadZone(0.0f)
|
||||
{
|
||||
// to avoid the rare situation where one triple is updated and
|
||||
// the other is not, initialize them both here:
|
||||
/* To avoid the rare situation where one triple is updated and
|
||||
* the other is not, initialize them both here: */
|
||||
memset(m_translation, 0, sizeof(m_translation));
|
||||
memset(m_rotation, 0, sizeof(m_rotation));
|
||||
}
|
||||
|
||||
bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short product_id)
|
||||
{
|
||||
// call this function until it returns true
|
||||
// it's a good idea to stop calling it after that, as it will "forget"
|
||||
// whichever device it already found
|
||||
/* Call this function until it returns true
|
||||
* it's a good idea to stop calling it after that, as it will "forget"
|
||||
* whichever device it already found */
|
||||
|
||||
// default to safe generic behavior for "unknown" devices
|
||||
// unidentified devices will emit motion events like normal
|
||||
// rogue buttons do nothing by default, but can be customized by the user
|
||||
/* Default to safe generic behavior for "unknown" devices
|
||||
* unidentified devices will emit motion events like normal
|
||||
* rogue buttons do nothing by default, but can be customized by the user. */
|
||||
|
||||
m_deviceType = NDOF_UnknownDevice;
|
||||
m_hidMap = Generic_HID_map;
|
||||
m_buttonCount = genericButtonCount;
|
||||
m_buttonMask = 0;
|
||||
|
||||
// "mystery device" owners can help build a HID_map for their hardware
|
||||
// A few users have already contributed information about several older devices
|
||||
// that I don't have access to. Thanks!
|
||||
/* "mystery device" owners can help build a HID_map for their hardware
|
||||
* A few users have already contributed information about several older devices
|
||||
* that I don't have access to. Thanks! */
|
||||
|
||||
switch (vendor_id) {
|
||||
case 0x046D: // Logitech (3Dconnexion was a subsidiary)
|
||||
case 0x046D: /* Logitech (3Dconnexion was a subsidiary). */
|
||||
switch (product_id) {
|
||||
// -- current devices --
|
||||
case 0xC626: // full-size SpaceNavigator
|
||||
case 0xC628: // the "for Notebooks" one
|
||||
/* -- current devices -- */
|
||||
case 0xC626: /* full-size SpaceNavigator */
|
||||
case 0xC628: /* the "for Notebooks" one */
|
||||
puts("ndof: using SpaceNavigator");
|
||||
m_deviceType = NDOF_SpaceNavigator;
|
||||
m_buttonCount = 2;
|
||||
|
@ -209,12 +209,12 @@ bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short produ
|
|||
puts("ndof: using SpaceMouse Pro");
|
||||
m_deviceType = NDOF_SpaceMousePro;
|
||||
m_buttonCount = 27;
|
||||
// ^^ actually has 15 buttons, but their HID codes range from 0 to 26
|
||||
/* ^^ actually has 15 buttons, but their HID codes range from 0 to 26 */
|
||||
m_buttonMask = 0x07C0F137;
|
||||
m_hidMap = Modern3Dx_HID_map;
|
||||
break;
|
||||
|
||||
// -- older devices --
|
||||
/* -- older devices -- */
|
||||
case 0xC625:
|
||||
puts("ndof: using SpacePilot");
|
||||
m_deviceType = NDOF_SpacePilot;
|
||||
|
@ -236,21 +236,21 @@ bool GHOST_NDOFManager::setDevice(unsigned short vendor_id, unsigned short produ
|
|||
printf("ndof: unknown Logitech product %04hx\n", product_id);
|
||||
}
|
||||
break;
|
||||
case 0x256F: // 3Dconnexion
|
||||
case 0x256F: /* 3Dconnexion */
|
||||
switch (product_id) {
|
||||
case 0xC62E: // plugged in
|
||||
case 0xC62F: // wireless
|
||||
case 0xC62E: /* Plugged in. */
|
||||
case 0xC62F: /* Wireless. */
|
||||
puts("ndof: using SpaceMouse Wireless");
|
||||
m_deviceType = NDOF_SpaceMouseWireless;
|
||||
m_buttonCount = 2;
|
||||
m_hidMap = Modern3Dx_HID_map;
|
||||
break;
|
||||
case 0xC631: // plugged in
|
||||
case 0xC632: // wireless
|
||||
case 0xC631: /* Plugged in. */
|
||||
case 0xC632: /* Wireless. */
|
||||
puts("ndof: using SpaceMouse Pro Wireless");
|
||||
m_deviceType = NDOF_SpaceMouseProWireless;
|
||||
m_buttonCount = 27;
|
||||
// ^^ actually has 15 buttons, but their HID codes range from 0 to 26
|
||||
/* ^^ actually has 15 buttons, but their HID codes range from 0 to 26. */
|
||||
m_buttonMask = 0x07C0F137;
|
||||
m_hidMap = Modern3Dx_HID_map;
|
||||
break;
|
||||
|
@ -364,16 +364,16 @@ void GHOST_NDOFManager::updateButton(int button_number, bool press, uint64_t tim
|
|||
|
||||
int mask = 1 << button_number;
|
||||
if (press) {
|
||||
m_buttons |= mask; // set this button's bit
|
||||
m_buttons |= mask; /* Set this button's bit. */
|
||||
}
|
||||
else {
|
||||
m_buttons &= ~mask; // clear this button's bit
|
||||
m_buttons &= ~mask; /* Clear this button's bit. */
|
||||
}
|
||||
}
|
||||
|
||||
void GHOST_NDOFManager::updateButtons(int button_bits, uint64_t time)
|
||||
{
|
||||
button_bits &= m_buttonMask; // discard any "garbage" bits
|
||||
button_bits &= m_buttonMask; /* Discard any "garbage" bits. */
|
||||
|
||||
int diff = m_buttons ^ button_bits;
|
||||
|
||||
|
@ -390,11 +390,11 @@ void GHOST_NDOFManager::updateButtons(int button_bits, uint64_t time)
|
|||
void GHOST_NDOFManager::setDeadZone(float dz)
|
||||
{
|
||||
if (dz < 0.0f) {
|
||||
// negative values don't make sense, so clamp at zero
|
||||
/* Negative values don't make sense, so clamp at zero. */
|
||||
dz = 0.0f;
|
||||
}
|
||||
else if (dz > 0.5f) {
|
||||
// warn the rogue user/developer, but allow it
|
||||
/* Warn the rogue user/developer, but allow it. */
|
||||
GHOST_PRINTF("ndof: dead zone of %.2f is rather high...\n", dz);
|
||||
}
|
||||
m_deadZone = dz;
|
||||
|
@ -426,22 +426,22 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||
if (!m_motionEventPending)
|
||||
return false;
|
||||
|
||||
m_motionEventPending = false; // any pending motion is handled right now
|
||||
m_motionEventPending = false; /* Any pending motion is handled right now. */
|
||||
|
||||
GHOST_IWindow *window = m_system.getWindowManager()->getActiveWindow();
|
||||
|
||||
if (window == NULL) {
|
||||
m_motionState = GHOST_kNotStarted; // avoid large 'dt' times when changing windows
|
||||
return false; // delivery will fail, so don't bother sending
|
||||
m_motionState = GHOST_kNotStarted; /* Avoid large `dt` times when changing windows. */
|
||||
return false; /* Delivery will fail, so don't bother sending. */
|
||||
}
|
||||
|
||||
GHOST_EventNDOFMotion *event = new GHOST_EventNDOFMotion(m_motionTime, window);
|
||||
GHOST_TEventNDOFMotionData *data = (GHOST_TEventNDOFMotionData *)event->getData();
|
||||
|
||||
// scale axis values here to normalize them to around +/- 1
|
||||
// they are scaled again for overall sensitivity in the WM based on user prefs
|
||||
/* Scale axis values here to normalize them to around +/- 1
|
||||
* they are scaled again for overall sensitivity in the WM based on user preferences. */
|
||||
|
||||
const float scale = 1.0f / 350.0f; // 3Dconnexion devices send +/- 350 usually
|
||||
const float scale = 1.0f / 350.0f; /* 3Dconnexion devices send +/- 350 usually */
|
||||
|
||||
data->tx = scale * m_translation[0];
|
||||
data->ty = scale * m_translation[1];
|
||||
|
@ -451,24 +451,24 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||
data->ry = scale * m_rotation[1];
|
||||
data->rz = scale * m_rotation[2];
|
||||
|
||||
data->dt = 0.001f * (m_motionTime - m_prevMotionTime); // in seconds
|
||||
data->dt = 0.001f * (m_motionTime - m_prevMotionTime); /* In seconds. */
|
||||
m_prevMotionTime = m_motionTime;
|
||||
|
||||
bool weHaveMotion = !nearHomePosition(data, m_deadZone);
|
||||
|
||||
// determine what kind of motion event to send (Starting, InProgress, Finishing)
|
||||
// and where that leaves this NDOF manager (NotStarted, InProgress, Finished)
|
||||
/* Determine what kind of motion event to send `(Starting, InProgress, Finishing)`
|
||||
* and where that leaves this NDOF manager `(NotStarted, InProgress, Finished)`. */
|
||||
switch (m_motionState) {
|
||||
case GHOST_kNotStarted:
|
||||
case GHOST_kFinished:
|
||||
if (weHaveMotion) {
|
||||
data->progress = GHOST_kStarting;
|
||||
m_motionState = GHOST_kInProgress;
|
||||
// prev motion time will be ancient, so just make up a reasonable time delta
|
||||
/* Previous motion time will be ancient, so just make up a reasonable time delta. */
|
||||
data->dt = 0.0125f;
|
||||
}
|
||||
else {
|
||||
// send no event and keep current state
|
||||
/* Send no event and keep current state. */
|
||||
#ifdef DEBUG_NDOF_MOTION
|
||||
printf("ndof motion ignored -- %s\n", progress_string[data->progress]);
|
||||
#endif
|
||||
|
@ -479,20 +479,22 @@ bool GHOST_NDOFManager::sendMotionEvent()
|
|||
case GHOST_kInProgress:
|
||||
if (weHaveMotion) {
|
||||
data->progress = GHOST_kInProgress;
|
||||
// remain 'InProgress'
|
||||
/* Remain 'InProgress'. */
|
||||
}
|
||||
else {
|
||||
data->progress = GHOST_kFinishing;
|
||||
m_motionState = GHOST_kFinished;
|
||||
}
|
||||
break;
|
||||
default:; // will always be one of the above
|
||||
default:
|
||||
/* Will always be one of the above. */
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_NDOF_MOTION
|
||||
printf("ndof motion sent -- %s\n", progress_string[data->progress]);
|
||||
|
||||
// show details about this motion event
|
||||
/* Show details about this motion event. */
|
||||
printf(" T=(%d,%d,%d) R=(%d,%d,%d) raw\n",
|
||||
m_translation[0],
|
||||
m_translation[1],
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
typedef enum {
|
||||
NDOF_UnknownDevice,
|
||||
|
||||
// current devices
|
||||
/* Current devices. */
|
||||
NDOF_SpaceNavigator,
|
||||
NDOF_SpaceExplorer,
|
||||
NDOF_SpacePilotPro,
|
||||
|
@ -37,51 +37,51 @@ typedef enum {
|
|||
NDOF_SpaceMouseProWireless,
|
||||
NDOF_SpaceMouseEnterprise,
|
||||
|
||||
// older devices
|
||||
/* Older devices. */
|
||||
NDOF_SpacePilot,
|
||||
NDOF_Spaceball5000,
|
||||
NDOF_SpaceTraveler
|
||||
|
||||
} NDOF_DeviceT;
|
||||
|
||||
// NDOF device button event types
|
||||
/* NDOF device button event types */
|
||||
typedef enum {
|
||||
// used internally, never sent
|
||||
/* Used internally, never sent. */
|
||||
NDOF_BUTTON_NONE,
|
||||
// these two are available from any 3Dconnexion device
|
||||
/* These two are available from any 3Dconnexion device. */
|
||||
NDOF_BUTTON_MENU,
|
||||
NDOF_BUTTON_FIT,
|
||||
// standard views
|
||||
/* Standard views. */
|
||||
NDOF_BUTTON_TOP,
|
||||
NDOF_BUTTON_BOTTOM,
|
||||
NDOF_BUTTON_LEFT,
|
||||
NDOF_BUTTON_RIGHT,
|
||||
NDOF_BUTTON_FRONT,
|
||||
NDOF_BUTTON_BACK,
|
||||
// more views
|
||||
/* More views. */
|
||||
NDOF_BUTTON_ISO1,
|
||||
NDOF_BUTTON_ISO2,
|
||||
// 90 degree rotations
|
||||
// these don't all correspond to physical buttons
|
||||
/* 90 degree rotations.
|
||||
* These don't all correspond to physical buttons. */
|
||||
NDOF_BUTTON_ROLL_CW,
|
||||
NDOF_BUTTON_ROLL_CCW,
|
||||
NDOF_BUTTON_SPIN_CW,
|
||||
NDOF_BUTTON_SPIN_CCW,
|
||||
NDOF_BUTTON_TILT_CW,
|
||||
NDOF_BUTTON_TILT_CCW,
|
||||
// device control
|
||||
/* Device control. */
|
||||
NDOF_BUTTON_ROTATE,
|
||||
NDOF_BUTTON_PANZOOM,
|
||||
NDOF_BUTTON_DOMINANT,
|
||||
NDOF_BUTTON_PLUS,
|
||||
NDOF_BUTTON_MINUS,
|
||||
// keyboard emulation
|
||||
/* Keyboard emulation. */
|
||||
NDOF_BUTTON_ESC,
|
||||
NDOF_BUTTON_ALT,
|
||||
NDOF_BUTTON_SHIFT,
|
||||
NDOF_BUTTON_CTRL,
|
||||
// general-purpose buttons
|
||||
// users can assign functions via keymap editor
|
||||
/* General-purpose buttons.
|
||||
* Users can assign functions via keymap editor. */
|
||||
NDOF_BUTTON_1,
|
||||
NDOF_BUTTON_2,
|
||||
NDOF_BUTTON_3,
|
||||
|
@ -92,11 +92,11 @@ typedef enum {
|
|||
NDOF_BUTTON_8,
|
||||
NDOF_BUTTON_9,
|
||||
NDOF_BUTTON_10,
|
||||
// more general-purpose buttons
|
||||
/* More general-purpose buttons. */
|
||||
NDOF_BUTTON_A,
|
||||
NDOF_BUTTON_B,
|
||||
NDOF_BUTTON_C,
|
||||
// the end
|
||||
/* The end. */
|
||||
NDOF_BUTTON_LAST
|
||||
} NDOF_ButtonT;
|
||||
|
||||
|
@ -107,40 +107,53 @@ class GHOST_NDOFManager {
|
|||
{
|
||||
}
|
||||
|
||||
// whether multi-axis functionality is available (via the OS or driver)
|
||||
// does not imply that a device is plugged in or being used
|
||||
/**
|
||||
* Whether multi-axis functionality is available (via the OS or driver)
|
||||
* does not imply that a device is plugged in or being used.
|
||||
*/
|
||||
virtual bool available() = 0;
|
||||
|
||||
// each platform's device detection should call this
|
||||
// use standard USB/HID identifiers
|
||||
/**
|
||||
* Each platform's device detection should call this
|
||||
* use standard USB/HID identifiers.
|
||||
*/
|
||||
bool setDevice(unsigned short vendor_id, unsigned short product_id);
|
||||
|
||||
// filter out small/accidental/uncalibrated motions by
|
||||
// setting up a "dead zone" around home position
|
||||
// set to 0 to disable
|
||||
// 0.1 is a safe and reasonable value
|
||||
/**
|
||||
* Filter out small/accidental/un-calibrated motions by
|
||||
* setting up a "dead zone" around home position
|
||||
* set to 0 to disable
|
||||
* 0.1 is a safe and reasonable value.
|
||||
*/
|
||||
void setDeadZone(float);
|
||||
|
||||
// the latest raw axis data from the device
|
||||
// NOTE: axis data should be in blender view coordinates
|
||||
// +X is to the right
|
||||
// +Y is up
|
||||
// +Z is out of the screen
|
||||
// for rotations, look from origin to each +axis
|
||||
// rotations are + when CCW, - when CW
|
||||
// each platform is responsible for getting axis data into this form
|
||||
// these values should not be scaled (just shuffled or flipped)
|
||||
/**
|
||||
* The latest raw axis data from the device.
|
||||
*
|
||||
* \note axis data should be in blender view coordinates
|
||||
* - +X is to the right.
|
||||
* - +Y is up.
|
||||
* - +Z is out of the screen.
|
||||
* - for rotations, look from origin to each +axis.
|
||||
* - rotations are + when CCW, - when CW.
|
||||
* Each platform is responsible for getting axis data into this form
|
||||
* these values should not be scaled (just shuffled or flipped).
|
||||
*/
|
||||
void updateTranslation(const int t[3], uint64_t time);
|
||||
void updateRotation(const int r[3], uint64_t time);
|
||||
|
||||
// the latest raw button data from the device
|
||||
// use HID button encoding (not NDOF_ButtonT)
|
||||
/**
|
||||
* The latest raw button data from the device
|
||||
* use HID button encoding (not #NDOF_ButtonT).
|
||||
*/
|
||||
void updateButton(int button_number, bool press, uint64_t time);
|
||||
void updateButtons(int button_bits, uint64_t time);
|
||||
// NDOFButton events are sent immediately
|
||||
/* #NDOFButton events are sent immediately */
|
||||
|
||||
// processes and sends most recent raw data as an NDOFMotion event
|
||||
// returns whether an event was sent
|
||||
/**
|
||||
* Processes and sends most recent raw data as an #NDOFMotion event
|
||||
* returns whether an event was sent.
|
||||
*/
|
||||
bool sendMotionEvent();
|
||||
|
||||
protected:
|
||||
|
@ -157,12 +170,12 @@ class GHOST_NDOFManager {
|
|||
|
||||
int m_translation[3];
|
||||
int m_rotation[3];
|
||||
int m_buttons; // bit field
|
||||
int m_buttons; /* Bit field. */
|
||||
|
||||
uint64_t m_motionTime; // in milliseconds
|
||||
uint64_t m_prevMotionTime; // time of most recent Motion event sent
|
||||
uint64_t m_motionTime; /* In milliseconds. */
|
||||
uint64_t m_prevMotionTime; /* Time of most recent motion event sent. */
|
||||
|
||||
GHOST_TProgress m_motionState;
|
||||
bool m_motionEventPending;
|
||||
float m_deadZone; // discard motion with each component < this
|
||||
float m_deadZone; /* Discard motion with each component < this. */
|
||||
};
|
||||
|
|
|
@ -26,14 +26,14 @@
|
|||
void GHOST_Rect::inset(int32_t i)
|
||||
{
|
||||
if (i > 0) {
|
||||
// Grow the rectangle
|
||||
/* Grow the rectangle. */
|
||||
m_l -= i;
|
||||
m_r += i;
|
||||
m_t -= i;
|
||||
m_b += i;
|
||||
}
|
||||
else if (i < 0) {
|
||||
// Shrink the rectangle, check for insets larger than half the size
|
||||
/* Shrink the rectangle, check for insets larger than half the size. */
|
||||
int32_t i2 = i * 2;
|
||||
if (getWidth() > i2) {
|
||||
m_l += i;
|
||||
|
@ -62,12 +62,12 @@ GHOST_TVisibility GHOST_Rect::getVisibility(GHOST_Rect &r) const
|
|||
bool rb = isInside(r.m_r, r.m_b);
|
||||
GHOST_TVisibility v;
|
||||
if (lt && rt && lb && rb) {
|
||||
// All points inside, rectangle is inside this
|
||||
/* All points inside, rectangle is inside this. */
|
||||
v = GHOST_kFullyVisible;
|
||||
}
|
||||
else if (!(lt || rt || lb || rb)) {
|
||||
// None of the points inside
|
||||
// Check to see whether the rectangle is larger than this one
|
||||
/* None of the points inside.
|
||||
* Check to see whether the rectangle is larger than this one. */
|
||||
if ((r.m_l < m_l) && (r.m_t < m_t) && (r.m_r > m_r) && (r.m_b > m_b)) {
|
||||
v = GHOST_kPartiallyVisible;
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ GHOST_TVisibility GHOST_Rect::getVisibility(GHOST_Rect &r) const
|
|||
}
|
||||
}
|
||||
else {
|
||||
// Some of the points inside, rectangle is partially inside
|
||||
/* Some of the points inside, rectangle is partially inside. */
|
||||
v = GHOST_kPartiallyVisible;
|
||||
}
|
||||
return v;
|
||||
|
|
|
@ -72,7 +72,7 @@ GHOST_ITimerTask *GHOST_System::installTimer(uint64_t delay,
|
|||
GHOST_TimerTask *timer = new GHOST_TimerTask(millis + delay, interval, timerProc, userData);
|
||||
if (timer) {
|
||||
if (m_timerManager->addTimer(timer) == GHOST_kSuccess) {
|
||||
// Check to see whether we need to fire the timer right away
|
||||
/* Check to see whether we need to fire the timer right away. */
|
||||
m_timerManager->fireTimers(millis);
|
||||
}
|
||||
else {
|
||||
|
@ -208,7 +208,7 @@ bool GHOST_System::getFullScreen(void)
|
|||
void GHOST_System::dispatchEvents()
|
||||
{
|
||||
#ifdef WITH_INPUT_NDOF
|
||||
// NDOF Motion event is sent only once per dispatch, so do it now:
|
||||
/* NDOF Motion event is sent only once per dispatch, so do it now: */
|
||||
if (m_ndofManager) {
|
||||
m_ndofManager->sendMotionEvent();
|
||||
}
|
||||
|
@ -260,10 +260,10 @@ GHOST_TSuccess GHOST_System::pushEvent(GHOST_IEvent *event)
|
|||
GHOST_TSuccess GHOST_System::getModifierKeyState(GHOST_TModifierKeyMask mask, bool &isDown) const
|
||||
{
|
||||
GHOST_ModifierKeys keys;
|
||||
// Get the state of all modifier keys
|
||||
/* Get the state of all modifier keys. */
|
||||
GHOST_TSuccess success = getModifierKeys(keys);
|
||||
if (success) {
|
||||
// Isolate the state of the key requested
|
||||
/* Isolate the state of the key requested. */
|
||||
isDown = keys.get(mask);
|
||||
}
|
||||
return success;
|
||||
|
@ -272,10 +272,10 @@ GHOST_TSuccess GHOST_System::getModifierKeyState(GHOST_TModifierKeyMask mask, bo
|
|||
GHOST_TSuccess GHOST_System::getButtonState(GHOST_TButtonMask mask, bool &isDown) const
|
||||
{
|
||||
GHOST_Buttons buttons;
|
||||
// Get the state of all mouse buttons
|
||||
/* Get the state of all mouse buttons. */
|
||||
GHOST_TSuccess success = getButtons(buttons);
|
||||
if (success) {
|
||||
// Isolate the state of the mouse button requested
|
||||
/* Isolate the state of the mouse button requested. */
|
||||
isDown = buttons.get(mask);
|
||||
}
|
||||
return success;
|
||||
|
@ -311,7 +311,7 @@ GHOST_TSuccess GHOST_System::init()
|
|||
m_eventPrinter = new GHOST_EventPrinter();
|
||||
m_eventManager->addConsumer(m_eventPrinter);
|
||||
}
|
||||
#endif // WITH_GHOST_DEBUG
|
||||
#endif /* WITH_GHOST_DEBUG */
|
||||
|
||||
if (m_timerManager && m_windowManager && m_eventManager) {
|
||||
return GHOST_kSuccess;
|
||||
|
@ -359,7 +359,7 @@ GHOST_TSuccess GHOST_System::createFullScreenWindow(GHOST_Window **window,
|
|||
if (alphaBackground)
|
||||
glSettings.flags |= GHOST_glAlphaBackground;
|
||||
|
||||
/* note: don't use getCurrentDisplaySetting() because on X11 we may
|
||||
/* NOTE: don't use #getCurrentDisplaySetting() because on X11 we may
|
||||
* be zoomed in and the desktop may be bigger than the viewport. */
|
||||
GHOST_ASSERT(m_displayManager,
|
||||
"GHOST_System::createFullScreenWindow(): invalid display manager");
|
||||
|
|
|
@ -113,8 +113,8 @@ class GHOST_System : public GHOST_ISystem {
|
|||
GHOST_TSuccess disposeWindow(GHOST_IWindow *window);
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
virtual GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings) = 0;
|
||||
|
|
|
@ -112,8 +112,8 @@ class GHOST_SystemCocoa : public GHOST_System {
|
|||
const GHOST_IWindow *parentWindow = NULL);
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings);
|
||||
|
|
|
@ -761,7 +761,7 @@ GHOST_IWindow *GHOST_SystemCocoa::createWindow(const char *title,
|
|||
}
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
|
|
|
@ -143,7 +143,7 @@ GHOST_IContext *GHOST_SystemSDL::createOffscreenContext(GHOST_GLSettings glSetti
|
|||
{
|
||||
GHOST_Context *context = new GHOST_ContextSDL(0,
|
||||
NULL,
|
||||
0, // profile bit
|
||||
0, /* Profile bit. */
|
||||
3,
|
||||
3,
|
||||
GHOST_OPENGL_SDL_CONTEXT_FLAGS,
|
||||
|
@ -279,7 +279,7 @@ static GHOST_TKey convertSDLKey(SDL_Scancode key)
|
|||
GXMAP(type, SDL_SCANCODE_AUDIOPLAY, GHOST_kKeyMediaPlay);
|
||||
GXMAP(type, SDL_SCANCODE_AUDIOSTOP, GHOST_kKeyMediaStop);
|
||||
GXMAP(type, SDL_SCANCODE_AUDIOPREV, GHOST_kKeyMediaFirst);
|
||||
// GXMAP(type,XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
|
||||
// GXMAP(type, XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
|
||||
GXMAP(type, SDL_SCANCODE_AUDIONEXT, GHOST_kKeyMediaLast);
|
||||
|
||||
default:
|
||||
|
@ -315,7 +315,10 @@ void GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
|
|||
SDL_WindowEvent &sdl_sub_evt = sdl_event->window;
|
||||
GHOST_WindowSDL *window = findGhostWindow(
|
||||
SDL_GetWindowFromID_fallback(sdl_sub_evt.windowID));
|
||||
// assert(window != NULL); // can be NULL on close window.
|
||||
/* Can be NULL on close window. */
|
||||
#if 0
|
||||
assert(window != NULL);
|
||||
#endif
|
||||
|
||||
switch (sdl_sub_evt.event) {
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
|
@ -376,14 +379,14 @@ void GHOST_SystemSDL::processEvent(SDL_Event *sdl_event)
|
|||
bounds.wrapPoint(x_new, y_new, 8, window->getCursorGrabAxis());
|
||||
window->getCursorGrabAccum(x_accum, y_accum);
|
||||
|
||||
// can't use setCursorPosition because the mouse may have no focus!
|
||||
/* Can't use #setCursorPosition because the mouse may have no focus! */
|
||||
if (x_new != x_root || y_new != y_root) {
|
||||
if (1) { //xme.time > m_last_warp) {
|
||||
if (1 /* `xme.time > m_last_warp` */ ) {
|
||||
/* when wrapping we don't need to add an event because the
|
||||
* setCursorPosition call will cause a new event after */
|
||||
* #setCursorPosition call will cause a new event after */
|
||||
SDL_WarpMouseInWindow(sdl_win, x_new - x_win, y_new - y_win); /* wrap */
|
||||
window->setCursorGrabAccum(x_accum + (x_root - x_new), y_accum + (y_root - y_new));
|
||||
// m_last_warp= lastEventTime(xme.time);
|
||||
// m_last_warp = lastEventTime(xme.time);
|
||||
}
|
||||
else {
|
||||
// setCursorPosition(x_new, y_new); /* wrap but don't accumulate */
|
||||
|
@ -659,8 +662,8 @@ bool GHOST_SystemSDL::generateWindowExposeEvents()
|
|||
|
||||
bool GHOST_SystemSDL::processEvents(bool waitForEvent)
|
||||
{
|
||||
// Get all the current events -- translate them into
|
||||
// ghost events and call base class pushEvent() method.
|
||||
/* Get all the current events - translate them into
|
||||
* ghost events and call base class #pushEvent() method. */
|
||||
|
||||
bool anyProcessed = false;
|
||||
|
||||
|
@ -679,7 +682,7 @@ bool GHOST_SystemSDL::processEvents(bool waitForEvent)
|
|||
|
||||
if (maxSleep >= 0) {
|
||||
SDL_WaitEventTimeout(NULL, next - getMilliSeconds());
|
||||
// SleepTillEvent(m_display, next - getMilliSeconds()); // X11
|
||||
// SleepTillEvent(m_display, next - getMilliSeconds()); /* X11. */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -707,10 +710,10 @@ GHOST_WindowSDL *GHOST_SystemSDL::findGhostWindow(SDL_Window *sdl_win)
|
|||
if (sdl_win == NULL)
|
||||
return NULL;
|
||||
|
||||
// It is not entirely safe to do this as the backptr may point
|
||||
// to a window that has recently been removed.
|
||||
// We should always check the window manager's list of windows
|
||||
// and only process events on these windows.
|
||||
/* It is not entirely safe to do this as the backptr may point
|
||||
* to a window that has recently been removed.
|
||||
* We should always check the window manager's list of windows
|
||||
* and only process events on these windows. */
|
||||
|
||||
const std::vector<GHOST_IWindow *> &win_vec = m_windowManager->getWindows();
|
||||
|
||||
|
|
|
@ -259,7 +259,7 @@ GHOST_IWindow *GHOST_SystemWin32::createWindow(const char *title,
|
|||
}
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the window, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
|
@ -363,7 +363,7 @@ GHOST_TSuccess GHOST_SystemWin32::disposeContext(GHOST_IContext *context)
|
|||
}
|
||||
|
||||
/**
|
||||
* Create a new offscreen DirectX 11 context.
|
||||
* Create a new off-screen DirectX 11 context.
|
||||
* Never explicitly delete the window, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
|
|
|
@ -138,8 +138,8 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||
const GHOST_IWindow *parentWindow = 0);
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the window, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the window, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings);
|
||||
|
@ -152,8 +152,8 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||
GHOST_TSuccess disposeContext(GHOST_IContext *context);
|
||||
|
||||
/**
|
||||
* Create a new offscreen DirectX context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen DirectX context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* This is for GHOST internal, Win32 specific use, so it can be called statically.
|
||||
*
|
||||
* \return The new context (or 0 if creation failed).
|
||||
|
@ -360,8 +360,8 @@ class GHOST_SystemWin32 : public GHOST_System {
|
|||
static GHOST_EventKey *processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw);
|
||||
|
||||
/**
|
||||
* Process special keys (VK_OEM_*), to see if current key layout
|
||||
* gives us anything special, like ! on french AZERTY.
|
||||
* Process special keys `VK_OEM_*`, to see if current key layout
|
||||
* gives us anything special, like `!` on French AZERTY.
|
||||
* \param vKey: The virtual key from #hardKey.
|
||||
* \param scanCode: The ScanCode of pressed key (similar to PS/2 Set 1).
|
||||
*/
|
||||
|
|
|
@ -390,21 +390,21 @@ GHOST_IWindow *GHOST_SystemX11::createWindow(const char *title,
|
|||
}
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
GHOST_IContext *GHOST_SystemX11::createOffscreenContext(GHOST_GLSettings glSettings)
|
||||
{
|
||||
// During development:
|
||||
// try 4.x compatibility profile
|
||||
// try 3.3 compatibility profile
|
||||
// fall back to 3.0 if needed
|
||||
//
|
||||
// Final Blender 2.8:
|
||||
// try 4.x core profile
|
||||
// try 3.3 core profile
|
||||
// no fallbacks
|
||||
/* During development:
|
||||
* try 4.x compatibility profile
|
||||
* try 3.3 compatibility profile
|
||||
* fall back to 3.0 if needed
|
||||
*
|
||||
* Final Blender 2.8:
|
||||
* try 4.x core profile
|
||||
* try 3.3 core profile
|
||||
* no fall-backs. */
|
||||
|
||||
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
|
||||
|
||||
|
@ -2014,7 +2014,7 @@ void GHOST_SystemX11::getClipboard_xcout(const XEvent *evt,
|
|||
return;
|
||||
}
|
||||
|
||||
// not using INCR mechanism, just read the property
|
||||
/* Not using INCR mechanism, just read the property. */
|
||||
XGetWindowProperty(m_display,
|
||||
win,
|
||||
m_atom.XCLIP_OUT,
|
||||
|
|
|
@ -148,8 +148,8 @@ class GHOST_SystemX11 : public GHOST_System {
|
|||
const GHOST_IWindow *parentWindow = 0);
|
||||
|
||||
/**
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use disposeContext() instead.
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
GHOST_IContext *createOffscreenContext(GHOST_GLSettings glSettings);
|
||||
|
|
|
@ -55,7 +55,7 @@ GHOST_TSuccess GHOST_TimerManager::addTimer(GHOST_TimerTask *timer)
|
|||
{
|
||||
GHOST_TSuccess success;
|
||||
if (!getTimerFound(timer)) {
|
||||
// Add the timer task
|
||||
/* Add the timer task. */
|
||||
m_timers.push_back(timer);
|
||||
success = GHOST_kSuccess;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ GHOST_TSuccess GHOST_TimerManager::removeTimer(GHOST_TimerTask *timer)
|
|||
GHOST_TSuccess success;
|
||||
TTimerVector::iterator iter = std::find(m_timers.begin(), m_timers.end(), timer);
|
||||
if (iter != m_timers.end()) {
|
||||
// Remove the timer task
|
||||
/* Remove the timer task. */
|
||||
m_timers.erase(iter);
|
||||
delete timer;
|
||||
success = GHOST_kSuccess;
|
||||
|
@ -113,14 +113,14 @@ bool GHOST_TimerManager::fireTimer(uint64_t time, GHOST_TimerTask *task)
|
|||
{
|
||||
uint64_t next = task->getNext();
|
||||
|
||||
// Check if the timer should be fired
|
||||
/* Check if the timer should be fired. */
|
||||
if (time > next) {
|
||||
// Fire the timer
|
||||
/* Fire the timer. */
|
||||
GHOST_TimerProcPtr timerProc = task->getTimerProc();
|
||||
uint64_t start = task->getStart();
|
||||
timerProc(task, time - start);
|
||||
|
||||
// Update the time at which we will fire it again
|
||||
/* Update the time at which we will fire it again. */
|
||||
uint64_t interval = task->getInterval();
|
||||
uint64_t numCalls = (next - start) / interval;
|
||||
numCalls++;
|
||||
|
|
|
@ -157,7 +157,7 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||
|
||||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates
|
||||
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
* \param outX: The x-coordinate on the screen.
|
||||
|
@ -166,7 +166,7 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||
void clientToScreen(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||
|
||||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates
|
||||
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||
* but without the y coordinate conversion needed for ghost compatibility.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
|
@ -178,10 +178,10 @@ class GHOST_WindowCocoa : public GHOST_Window {
|
|||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates,
|
||||
* but without the y coordinate conversion needed for ghost compatibility.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
* \param outX: The x-coordinate on the screen.
|
||||
* \param outY: The y-coordinate on the screen.
|
||||
* \param inX: The x-coordinate on the screen.
|
||||
* \param inY: The y-coordinate on the screen.
|
||||
* \param outX: The x-coordinate in the client rectangle.
|
||||
* \param outY: The y-coordinate in the client rectangle.
|
||||
*/
|
||||
void screenToClientIntern(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ GHOST_TSuccess GHOST_WindowManager::addWindow(GHOST_IWindow *window)
|
|||
GHOST_TSuccess success = GHOST_kFailure;
|
||||
if (window) {
|
||||
if (!getWindowFound(window)) {
|
||||
// Store the pointer to the window
|
||||
/* Store the pointer to the window. */
|
||||
m_windows.push_back(window);
|
||||
success = GHOST_kSuccess;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ static constexpr size_t base_dpi = 96;
|
|||
struct window_t {
|
||||
GHOST_WindowWayland *w;
|
||||
wl_surface *surface;
|
||||
// outputs on which the window is currently shown on
|
||||
/* Outputs on which the window is currently shown on. */
|
||||
std::unordered_set<const output_t *> outputs;
|
||||
uint16_t dpi = 0;
|
||||
int scale = 1;
|
||||
|
@ -154,8 +154,8 @@ static bool update_scale(GHOST_WindowWayland *window)
|
|||
|
||||
if (scale > 0 && window->scale() != scale) {
|
||||
window->scale() = scale;
|
||||
// using the real DPI will cause wrong scaling of the UI
|
||||
// use a multiplier for the default DPI as workaround
|
||||
/* Using the real DPI will cause wrong scaling of the UI
|
||||
* use a multiplier for the default DPI as workaround. */
|
||||
window->dpi() = scale * base_dpi;
|
||||
wl_surface_set_buffer_scale(window->surface(), scale);
|
||||
return true;
|
||||
|
|
|
@ -183,7 +183,7 @@ class GHOST_WindowWin32 : public GHOST_Window {
|
|||
void screenToClient(int32_t inX, int32_t inY, int32_t &outX, int32_t &outY) const;
|
||||
|
||||
/**
|
||||
* Converts a point in screen coordinates to client rectangle coordinates
|
||||
* Converts a point in client rectangle coordinates to screen coordinates.
|
||||
* \param inX: The x-coordinate in the client rectangle.
|
||||
* \param inY: The y-coordinate in the client rectangle.
|
||||
* \param outX: The x-coordinate on the screen.
|
||||
|
|
|
@ -120,7 +120,7 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
|||
XrReferenceSpaceCreateInfo create_info = {XR_TYPE_REFERENCE_SPACE_CREATE_INFO};
|
||||
create_info.poseInReferenceSpace.orientation.w = 1.0f;
|
||||
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_STAGE;
|
||||
#if 0
|
||||
/* TODO
|
||||
*
|
||||
|
@ -144,8 +144,47 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
|||
(void)base_pose;
|
||||
#endif
|
||||
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||
"Failed to create reference space.");
|
||||
XrResult result = xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space);
|
||||
|
||||
if (XR_FAILED(result)) {
|
||||
/* One of the rare cases where we don't want to immediately throw an exception on failure,
|
||||
* since run-times are not required to support the stage reference space. Although we need the
|
||||
* stage reference space for absolute tracking, if the runtime doesn't support it then just
|
||||
* fallback to the local space. */
|
||||
if (result == XR_ERROR_REFERENCE_SPACE_UNSUPPORTED) {
|
||||
printf(
|
||||
"Warning: XR runtime does not support stage reference space, disabling absolute "
|
||||
"tracking.\n");
|
||||
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||
"Failed to create local reference space.");
|
||||
}
|
||||
else {
|
||||
throw GHOST_XrException("Failed to create stage reference space.", result);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Check if tracking bounds are valid. Tracking bounds may be invalid if the user did not
|
||||
* define a tracking space via the XR runtime. */
|
||||
XrExtent2Df extents;
|
||||
CHECK_XR(xrGetReferenceSpaceBoundsRect(oxr.session, XR_REFERENCE_SPACE_TYPE_STAGE, &extents),
|
||||
"Failed to get stage reference space bounds.");
|
||||
if (extents.width == 0.0f || extents.height == 0.0f) {
|
||||
printf(
|
||||
"Warning: Invalid stage reference space bounds, disabling absolute tracking. To enable "
|
||||
"absolute tracking, please define a tracking space via the XR runtime.\n");
|
||||
|
||||
/* Fallback to local space. */
|
||||
if (oxr.reference_space != XR_NULL_HANDLE) {
|
||||
CHECK_XR(xrDestroySpace(oxr.reference_space), "Failed to destroy stage reference space.");
|
||||
}
|
||||
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||
"Failed to create local reference space.");
|
||||
}
|
||||
}
|
||||
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_VIEW;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.view_space),
|
||||
|
@ -370,6 +409,7 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
|
|||
XrCompositionLayerProjectionView &r_proj_layer_view,
|
||||
XrSpaceLocation &view_location,
|
||||
XrView &view,
|
||||
uint32_t view_idx,
|
||||
void *draw_customdata)
|
||||
{
|
||||
XrSwapchainImageBaseHeader *swapchain_image = swapchain.acquireDrawableSwapchainImage();
|
||||
|
@ -380,6 +420,8 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
|
|||
r_proj_layer_view.fov = view.fov;
|
||||
swapchain.updateCompositionLayerProjectViewSubImage(r_proj_layer_view.subImage);
|
||||
|
||||
assert(view_idx < 256);
|
||||
draw_view_info.view_idx = (char)view_idx;
|
||||
draw_view_info.expects_srgb_buffer = swapchain.isBufferSRGB();
|
||||
draw_view_info.ofsx = r_proj_layer_view.subImage.imageRect.offset.x;
|
||||
draw_view_info.ofsy = r_proj_layer_view.subImage.imageRect.offset.y;
|
||||
|
@ -429,6 +471,7 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
|||
r_proj_layer_views[view_idx],
|
||||
view_location,
|
||||
m_oxr->views[view_idx],
|
||||
view_idx,
|
||||
draw_customdata);
|
||||
}
|
||||
|
||||
|
|
|
@ -117,6 +117,7 @@ class GHOST_XrSession {
|
|||
XrCompositionLayerProjectionView &r_proj_layer_view,
|
||||
XrSpaceLocation &view_location,
|
||||
XrView &view,
|
||||
uint32_t view_idx,
|
||||
void *draw_customdata);
|
||||
void beginFrameDrawing();
|
||||
void endFrameDrawing(std::vector<XrCompositionLayerBaseHeader *> &layers);
|
||||
|
|
|
@ -67,7 +67,7 @@ const char *(*MEM_name_ptr)(void *vmemh) = MEM_lockfree_name_ptr;
|
|||
|
||||
void *aligned_malloc(size_t size, size_t alignment)
|
||||
{
|
||||
/* posix_memalign requires alignment to be a multiple of sizeof(void *). */
|
||||
/* #posix_memalign requires alignment to be a multiple of `sizeof(void *)`. */
|
||||
assert(alignment >= ALIGNED_MALLOC_MINIMUM_ALIGNMENT);
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
|
@ -217,39 +217,39 @@ if(WITH_LIBMV)
|
|||
if(WITH_GTESTS)
|
||||
include(GTestTesting)
|
||||
|
||||
blender_add_lib(libmv_test_dataset "./libmv/multiview/test_data_sets.cc" "" "" "")
|
||||
blender_add_lib(libmv_test_dataset "./libmv/multiview/test_data_sets.cc" "${INC}" "${INC_SYS}" "")
|
||||
|
||||
BLENDER_SRC_GTEST("libmv_predict_tracks" "./libmv/autotrack/predict_tracks_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_tracks" "./libmv/autotrack/tracks_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_scoped_ptr" "./libmv/base/scoped_ptr_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_vector" "./libmv/base/vector_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_array_nd" "./libmv/image/array_nd_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_convolve" "./libmv/image/convolve_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_image" "./libmv/image/image_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_sample" "./libmv/image/sample_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_tuple" "./libmv/image/tuple_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_euclidean_resection" "./libmv/multiview/euclidean_resection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_fundamental" "./libmv/multiview/fundamental_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_homography" "./libmv/multiview/homography_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_nviewtriangulation" "./libmv/multiview/nviewtriangulation_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_panography" "./libmv/multiview/panography_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_projection" "./libmv/multiview/projection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_resection" "./libmv/multiview/resection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_triangulation" "./libmv/multiview/triangulation_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_dogleg" "./libmv/numeric/dogleg_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_function_derivative" "./libmv/numeric/function_derivative_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_levenberg_marquardt" "./libmv/numeric/levenberg_marquardt_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_numeric" "./libmv/numeric/numeric_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_poly" "./libmv/numeric/poly_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_camera_intrinsics" "./libmv/simple_pipeline/camera_intrinsics_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_detect" "./libmv/simple_pipeline/detect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_intersect" "./libmv/simple_pipeline/intersect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_keyframe_selection" "./libmv/simple_pipeline/keyframe_selection_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_modal_solver" "./libmv/simple_pipeline/modal_solver_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_resect" "./libmv/simple_pipeline/resect_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_brute_region_tracker" "./libmv/tracking/brute_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_klt_region_tracker" "./libmv/tracking/klt_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
BLENDER_SRC_GTEST("libmv_pyramid_region_tracker" "./libmv/tracking/pyramid_region_tracker_test.cc" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_predict_tracks" "./libmv/autotrack/predict_tracks_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_tracks" "./libmv/autotrack/tracks_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_scoped_ptr" "./libmv/base/scoped_ptr_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_vector" "./libmv/base/vector_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_array_nd" "./libmv/image/array_nd_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_convolve" "./libmv/image/convolve_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_image" "./libmv/image/image_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_sample" "./libmv/image/sample_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_tuple" "./libmv/image/tuple_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_euclidean_resection" "./libmv/multiview/euclidean_resection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_fundamental" "./libmv/multiview/fundamental_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_homography" "./libmv/multiview/homography_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_nviewtriangulation" "./libmv/multiview/nviewtriangulation_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_panography" "./libmv/multiview/panography_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_projection" "./libmv/multiview/projection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_resection" "./libmv/multiview/resection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_triangulation" "./libmv/multiview/triangulation_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_dogleg" "./libmv/numeric/dogleg_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_function_derivative" "./libmv/numeric/function_derivative_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_levenberg_marquardt" "./libmv/numeric/levenberg_marquardt_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_numeric" "./libmv/numeric/numeric_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_poly" "./libmv/numeric/poly_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_camera_intrinsics" "./libmv/simple_pipeline/camera_intrinsics_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_detect" "./libmv/simple_pipeline/detect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_intersect" "./libmv/simple_pipeline/intersect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_keyframe_selection" "./libmv/simple_pipeline/keyframe_selection_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_modal_solver" "./libmv/simple_pipeline/modal_solver_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_resect" "./libmv/simple_pipeline/resect_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_brute_region_tracker" "./libmv/tracking/brute_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_klt_region_tracker" "./libmv/tracking/klt_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
blender_add_test_executable("libmv_pyramid_region_tracker" "./libmv/tracking/pyramid_region_tracker_test.cc" "${INC}" "${INC_SYS}" "libmv_test_dataset;bf_intern_libmv;extern_ceres")
|
||||
endif()
|
||||
else()
|
||||
list(APPEND SRC
|
||||
|
|
|
@ -62,8 +62,8 @@ template<typename _Tp> struct MEM_Allocator {
|
|||
return &__x;
|
||||
}
|
||||
|
||||
// NB: __n is permitted to be 0. The C++ standard says nothing
|
||||
// about what the return value is when __n == 0.
|
||||
/* NOTE: `__n` is permitted to be 0.
|
||||
* The C++ standard says nothing about what the return value is when `__n == 0`. */
|
||||
_Tp *allocate(size_type __n, const void * = 0)
|
||||
{
|
||||
_Tp *__ret = NULL;
|
||||
|
|
|
@ -129,5 +129,5 @@ if(WITH_GTESTS AND WITH_OPENSUBDIV)
|
|||
add_definitions(${GLOG_DEFINES})
|
||||
add_definitions(-DBLENDER_GFLAGS_NAMESPACE=${GFLAGS_NAMESPACE})
|
||||
|
||||
BLENDER_SRC_GTEST(opensubdiv_mesh_topology_test "internal/topology/mesh_topology_test.cc" "${LIB};bf_intern_opensubdiv")
|
||||
blender_add_test_executable(opensubdiv_mesh_topology_test "internal/topology/mesh_topology_test.cc" "${INC}" "${INC_SYS}" "${LIB};bf_intern_opensubdiv")
|
||||
endif()
|
||||
|
|
|
@ -64,7 +64,7 @@ typedef struct rbConstraint rbConstraint;
|
|||
/* Setup ---------------------------- */
|
||||
|
||||
/* Create a new dynamics world instance */
|
||||
// TODO: add args to set the type of constraint solvers, etc.
|
||||
/* TODO: add args to set the type of constraint solvers, etc. */
|
||||
rbDynamicsWorld *RB_dworld_new(const float gravity[3]);
|
||||
|
||||
/* Delete the given dynamics world, and free any extra data it may require */
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit f3791fbfdb839860035241ba477bf8872966af93
|
||||
Subproject commit ca39c1459bcd99300afe3591fa5ffe40f5ba5eef
|
|
@ -113,7 +113,7 @@ const UserDef U_default = {
|
|||
.gp_eraser = 25,
|
||||
.gp_settings = 0,
|
||||
|
||||
/** Initialized by: #BKE_studiolight_default . */
|
||||
/** Initialized by: #BKE_studiolight_default. */
|
||||
.light_param = {{0}},
|
||||
.light_ambient = {0, 0, 0},
|
||||
|
||||
|
|
|
@ -638,7 +638,7 @@ const bTheme U_theme_default = {
|
|||
.sub_back = RGBA(0x0000003e),
|
||||
},
|
||||
.shade1 = RGBA(0xa0a0a000),
|
||||
.grid = RGBA(0x404040ff),
|
||||
.grid = RGBA(0x212121ff),
|
||||
.vertex_select = RGBA(0xff8500ff),
|
||||
.bone_pose = RGBA(0x50c8ff50),
|
||||
.cframe = RGBA(0x5680c2ff),
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit e25068ef471c6d6cd5ee64a2eef9b7d672c57029
|
||||
Subproject commit c2c5392e004bb8bafea84d8d69df31ef9f03d46f
|
|
@ -1 +1 @@
|
|||
Subproject commit 7d78c8a63f2f4b146f9327ddc0d567a5921b94ea
|
||||
Subproject commit 788441f2930465bbfba8f0797b12dcef1d46694d
|
|
@ -71,7 +71,7 @@ def rtl_process_po(args, settings):
|
|||
po.write(kind="PO", dest=args.dst)
|
||||
|
||||
|
||||
def language_menu(_args, settings):
|
||||
def language_menu(args, settings):
|
||||
# 'DEFAULT' and en_US are always valid, fully-translated "languages"!
|
||||
stats = {"DEFAULT": 1.0, "en_US": 1.0}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ class NodeItem:
|
|||
else:
|
||||
return bpy.app.translations.contexts.default
|
||||
|
||||
# NB: is a staticmethod because called with an explicit self argument
|
||||
# NOTE: is a staticmethod because called with an explicit self argument
|
||||
# NodeItemCustom sets this as a variable attribute in __init__
|
||||
@staticmethod
|
||||
def draw(self, layout, _context):
|
||||
|
|
|
@ -139,6 +139,7 @@ url_manual_mapping = (
|
|||
("bpy.types.fluiddomainsettings.use_resumable_cache*", "physics/fluid/type/domain/cache.html#bpy-types-fluiddomainsettings-use-resumable-cache"),
|
||||
("bpy.types.fluiddomainsettings.use_spray_particles*", "physics/fluid/type/domain/liquid/particles.html#bpy-types-fluiddomainsettings-use-spray-particles"),
|
||||
("bpy.types.fluiddomainsettings.vector_display_type*", "physics/fluid/type/domain/gas/viewport_display.html#bpy-types-fluiddomainsettings-vector-display-type"),
|
||||
("bpy.types.geometrynodecurveprimitivebeziersegment*", "modeling/geometry_nodes/curve_primitives/bezier_segment.html#bpy-types-geometrynodecurveprimitivebeziersegment"),
|
||||
("bpy.types.linestylegeometrymodifier_perlinnoise1d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_1d.html#bpy-types-linestylegeometrymodifier-perlinnoise1d"),
|
||||
("bpy.types.linestylegeometrymodifier_perlinnoise2d*", "render/freestyle/parameter_editor/line_style/modifiers/geometry/perlin_noise_2d.html#bpy-types-linestylegeometrymodifier-perlinnoise2d"),
|
||||
("bpy.types.materialgpencilstyle.use_stroke_holdout*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-use-stroke-holdout"),
|
||||
|
@ -215,6 +216,7 @@ url_manual_mapping = (
|
|||
("bpy.types.spacesequenceeditor.proxy_render_size*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-proxy-render-size"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_offset*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-offset"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_source*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-source"),
|
||||
("bpy.types.spacespreadsheetrowfilter.column_name*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-column-name"),
|
||||
("bpy.types.toolsettings.gpencil_stroke_placement*", "grease_pencil/modes/draw/stroke_placement.html#bpy-types-toolsettings-gpencil-stroke-placement"),
|
||||
("bpy.types.toolsettings.use_keyframe_cycle_aware*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-cycle-aware"),
|
||||
("bpy.types.toolsettings.use_keyframe_insert_auto*", "editors/timeline.html#bpy-types-toolsettings-use-keyframe-insert-auto"),
|
||||
|
@ -233,6 +235,7 @@ url_manual_mapping = (
|
|||
("bpy.types.rendersettings.resolution_percentage*", "render/output/properties/dimensions.html#bpy-types-rendersettings-resolution-percentage"),
|
||||
("bpy.types.rendersettings_simplify_gpencil_tint*", "render/cycles/render_settings/simplify.html#bpy-types-rendersettings-simplify-gpencil-tint"),
|
||||
("bpy.types.spaceoutliner.use_filter_object_mesh*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-object-mesh"),
|
||||
("bpy.types.spaceoutliner.use_filter_view_layers*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-view-layers"),
|
||||
("bpy.types.spacesequenceeditor.show_overexposed*", "video_editing/preview/sidebar.html#bpy-types-spacesequenceeditor-show-overexposed"),
|
||||
("bpy.types.toolsettings.use_gpencil_draw_onback*", "grease_pencil/modes/draw/introduction.html#bpy-types-toolsettings-use-gpencil-draw-onback"),
|
||||
("bpy.types.toolsettings.use_snap_align_rotation*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-align-rotation"),
|
||||
|
@ -273,6 +276,8 @@ url_manual_mapping = (
|
|||
("bpy.types.spacesequenceeditor.show_safe_areas*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-safe-areas"),
|
||||
("bpy.types.spacesequenceeditor.show_strip_name*", "video_editing/sequencer/navigating.html#bpy-types-spacesequenceeditor-show-strip-name"),
|
||||
("bpy.types.spacespreadsheet.show_only_selected*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-show-only-selected"),
|
||||
("bpy.types.spacespreadsheetrowfilter.operation*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-operation"),
|
||||
("bpy.types.spacespreadsheetrowfilter.threshold*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-threshold"),
|
||||
("bpy.types.toolsettings.use_snap_grid_absolute*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-grid-absolute"),
|
||||
("bpy.types.view3doverlay.show_face_orientation*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-show-face-orientation"),
|
||||
("bpy.ops.object.blenderkit_material_thumbnail*", "addons/3d_view/blenderkit.html#bpy-ops-object-blenderkit-material-thumbnail"),
|
||||
|
@ -343,6 +348,7 @@ url_manual_mapping = (
|
|||
("bpy.types.spaceoutliner.use_filter_complete*", "editors/outliner/interface.html#bpy-types-spaceoutliner-use-filter-complete"),
|
||||
("bpy.types.spacesequenceeditor.show_metadata*", "video_editing/preview/introduction.html#bpy-types-spacesequenceeditor-show-metadata"),
|
||||
("bpy.types.spacespreadsheet.attribute_domain*", "editors/spreadsheet.html#bpy-types-spacespreadsheet-attribute-domain"),
|
||||
("bpy.types.spacespreadsheetrowfilter.enabled*", "editors/spreadsheet.html#bpy-types-spacespreadsheetrowfilter-enabled"),
|
||||
("bpy.types.spaceview3d.transform_orientation*", "editors/3dview/controls/orientation.html#bpy-types-spaceview3d-transform-orientation"),
|
||||
("bpy.types.spaceview3d.use_local_collections*", "editors/3dview/sidebar.html#bpy-types-spaceview3d-use-local-collections"),
|
||||
("bpy.types.toolsettings.use_snap_peel_object*", "editors/3dview/controls/snapping.html#bpy-types-toolsettings-use-snap-peel-object"),
|
||||
|
@ -350,7 +356,6 @@ url_manual_mapping = (
|
|||
("bpy.types.view3doverlay.wireframe_threshold*", "editors/3dview/display/overlays.html#bpy-types-view3doverlay-wireframe-threshold"),
|
||||
("bpy.ops.object.constraint_add_with_targets*", "animation/constraints/interface/adding_removing.html#bpy-ops-object-constraint-add-with-targets"),
|
||||
("bpy.ops.object.material_slot_remove_unused*", "scene_layout/object/editing/cleanup.html#bpy-ops-object-material-slot-remove-unused"),
|
||||
("bpy.ops.object.vertex_group_copy_to_linked*", "modeling/meshes/properties/vertex_groups/vertex_groups.html#bpy-ops-object-vertex-group-copy-to-linked"),
|
||||
("bpy.ops.outliner.collection_disable_render*", "editors/outliner/editing.html#bpy-ops-outliner-collection-disable-render"),
|
||||
("bpy.types.brush.cloth_simulation_area_type*", "sculpt_paint/sculpting/tools/cloth.html#bpy-types-brush-cloth-simulation-area-type"),
|
||||
("bpy.types.brushgpencilsettings.fill_factor*", "grease_pencil/modes/draw/tools/fill.html#bpy-types-brushgpencilsettings-fill-factor"),
|
||||
|
@ -372,6 +377,7 @@ url_manual_mapping = (
|
|||
("bpy.types.fluidflowsettings.use_plane_init*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-use-plane-init"),
|
||||
("bpy.types.fluidflowsettings.velocity_coord*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-velocity-coord"),
|
||||
("bpy.types.fluidflowsettings.volume_density*", "physics/fluid/type/flow.html#bpy-types-fluidflowsettings-volume-density"),
|
||||
("bpy.types.geometrynodecurvequadraticbezier*", "modeling/geometry_nodes/curve_primitives/quadratic_bezier.html#bpy-types-geometrynodecurvequadraticbezier"),
|
||||
("bpy.types.materialgpencilstyle.show_stroke*", "grease_pencil/materials/properties.html#bpy-types-materialgpencilstyle-show-stroke"),
|
||||
("bpy.types.movietrackingcamera.focal_length*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-focal-length"),
|
||||
("bpy.types.movietrackingcamera.pixel_aspect*", "movie_clip/tracking/clip/sidebar/track/camera.html#bpy-types-movietrackingcamera-pixel-aspect"),
|
||||
|
@ -471,6 +477,7 @@ url_manual_mapping = (
|
|||
("bpy.types.geometrynodeattributecolorramp*", "modeling/geometry_nodes/attribute/attribute_color_ramp.html#bpy-types-geometrynodeattributecolorramp"),
|
||||
("bpy.types.geometrynodeattributeproximity*", "modeling/geometry_nodes/attribute/attribute_proximity.html#bpy-types-geometrynodeattributeproximity"),
|
||||
("bpy.types.geometrynodeattributerandomize*", "modeling/geometry_nodes/attribute/attribute_randomize.html#bpy-types-geometrynodeattributerandomize"),
|
||||
("bpy.types.geometrynodecurvequadrilateral*", "modeling/geometry_nodes/curve_primitives/quadrilateral.html#bpy-types-geometrynodecurvequadrilateral"),
|
||||
("bpy.types.geometrynodeseparatecomponents*", "modeling/geometry_nodes/geometry/separate_components.html#bpy-types-geometrynodeseparatecomponents"),
|
||||
("bpy.types.geometrynodesubdivisionsurface*", "modeling/geometry_nodes/mesh/subdivision_surface.html#bpy-types-geometrynodesubdivisionsurface"),
|
||||
("bpy.types.imageformatsettings.color_mode*", "render/output/properties/output.html#bpy-types-imageformatsettings-color-mode"),
|
||||
|
@ -490,7 +497,7 @@ url_manual_mapping = (
|
|||
("bpy.types.rendersettings.use_compositing*", "render/output/properties/post_processing.html#bpy-types-rendersettings-use-compositing"),
|
||||
("bpy.types.rendersettings.use_placeholder*", "render/output/properties/output.html#bpy-types-rendersettings-use-placeholder"),
|
||||
("bpy.types.shadernodesubsurfacescattering*", "render/shader_nodes/shader/sss.html#bpy-types-shadernodesubsurfacescattering"),
|
||||
("bpy.types.spaceclipeditor.lock_selection*", "editors/clip/display/clip_display.html#bpy-types-spaceclipeditor-lock-selection"),
|
||||
("bpy.types.spaceclipeditor.lock_selection*", "editors/clip/introduction.html#bpy-types-spaceclipeditor-lock-selection"),
|
||||
("bpy.types.spacedopesheeteditor.auto_snap*", "editors/dope_sheet/editing.html#bpy-types-spacedopesheeteditor-auto-snap"),
|
||||
("bpy.types.spaceoutliner.show_mode_column*", "editors/outliner/interface.html#bpy-types-spaceoutliner-show-mode-column"),
|
||||
("bpy.types.spacetexteditor.use_match_case*", "editors/text_editor.html#bpy-types-spacetexteditor-use-match-case"),
|
||||
|
@ -508,6 +515,7 @@ url_manual_mapping = (
|
|||
("bpy.ops.outliner.collection_show_inside*", "editors/outliner/editing.html#bpy-ops-outliner-collection-show-inside"),
|
||||
("bpy.ops.preferences.reset_default_theme*", "editors/preferences/themes.html#bpy-ops-preferences-reset-default-theme"),
|
||||
("bpy.ops.sequencer.strip_transform_clear*", "video_editing/sequencer/editing.html#bpy-ops-sequencer-strip-transform-clear"),
|
||||
("bpy.ops.spreadsheet.add_row_filter_rule*", "editors/spreadsheet.html#bpy-ops-spreadsheet-add-row-filter-rule"),
|
||||
("bpy.types.animdata.action_extrapolation*", "editors/nla/sidebar.html#bpy-types-animdata-action-extrapolation"),
|
||||
("bpy.types.bakesettings.max_ray_distance*", "render/cycles/baking.html#bpy-types-bakesettings-max-ray-distance"),
|
||||
("bpy.types.brush.multiplane_scrape_angle*", "sculpt_paint/sculpting/tools/multiplane_scrape.html#bpy-types-brush-multiplane-scrape-angle"),
|
||||
|
@ -695,6 +703,7 @@ url_manual_mapping = (
|
|||
("bpy.types.fmodifierfunctiongenerator*", "editors/graph_editor/fcurves/sidebar/modifiers.html#bpy-types-fmodifierfunctiongenerator"),
|
||||
("bpy.types.geometrynodeattributeclamp*", "modeling/geometry_nodes/attribute/attribute_clamp.html#bpy-types-geometrynodeattributeclamp"),
|
||||
("bpy.types.geometrynodecollectioninfo*", "modeling/geometry_nodes/input/collection_info.html#bpy-types-geometrynodecollectioninfo"),
|
||||
("bpy.types.geometrynodecurveendpoints*", "modeling/geometry_nodes/curve/curve_endpoints.html#bpy-types-geometrynodecurveendpoints"),
|
||||
("bpy.types.geometrynodecurvesubdivide*", "modeling/geometry_nodes/curve/curve_subdivide.html#bpy-types-geometrynodecurvesubdivide"),
|
||||
("bpy.types.geometrynodedeletegeometry*", "modeling/geometry_nodes/geometry/delete_geometry.html#bpy-types-geometrynodedeletegeometry"),
|
||||
("bpy.types.geometrynodematerialassign*", "modeling/geometry_nodes/material/assign.html#bpy-types-geometrynodematerialassign"),
|
||||
|
@ -765,6 +774,7 @@ url_manual_mapping = (
|
|||
("bpy.types.geometrynodecurvetopoints*", "modeling/geometry_nodes/curve/curve_to_points.html#bpy-types-geometrynodecurvetopoints"),
|
||||
("bpy.types.geometrynodeinputmaterial*", "modeling/geometry_nodes/input/material.html#bpy-types-geometrynodeinputmaterial"),
|
||||
("bpy.types.geometrynodemeshicosphere*", "modeling/geometry_nodes/mesh_primitives/icosphere.html#bpy-types-geometrynodemeshicosphere"),
|
||||
("bpy.types.geometrynodemeshsubdivide*", "modeling/geometry_nodes/mesh/subdivide.html#bpy-types-geometrynodemeshsubdivide"),
|
||||
("bpy.types.geometrynodepointinstance*", "modeling/geometry_nodes/point/point_instance.html#bpy-types-geometrynodepointinstance"),
|
||||
("bpy.types.geometrynodepointseparate*", "modeling/geometry_nodes/point/point_separate.html#bpy-types-geometrynodepointseparate"),
|
||||
("bpy.types.geometrynoderesamplecurve*", "modeling/geometry_nodes/curve/resample_curve.html#bpy-types-geometrynoderesamplecurve"),
|
||||
|
@ -795,6 +805,7 @@ url_manual_mapping = (
|
|||
("bpy.types.spline.tilt_interpolation*", "modeling/curves/properties/active_spline.html#bpy-types-spline-tilt-interpolation"),
|
||||
("bpy.types.transformorientation.name*", "editors/3dview/controls/orientation.html#bpy-types-transformorientation-name"),
|
||||
("bpy.types.volumedisplay.slice_depth*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-depth"),
|
||||
("bpy.ops.clip.lock_selection_toggle*", "editors/clip/introduction.html#bpy-ops-clip-lock-selection-toggle"),
|
||||
("bpy.ops.mesh.customdata_mask_clear*", "sculpt_paint/sculpting/editing/mask.html#bpy-ops-mesh-customdata-mask-clear"),
|
||||
("bpy.ops.mesh.extrude_vertices_move*", "modeling/meshes/editing/vertex/extrude_vertices.html#bpy-ops-mesh-extrude-vertices-move"),
|
||||
("bpy.ops.mesh.mod_weighted_strength*", "modeling/meshes/editing/mesh/normals.html#bpy-ops-mesh-mod-weighted-strength"),
|
||||
|
@ -802,7 +813,6 @@ url_manual_mapping = (
|
|||
("bpy.ops.mesh.select_interior_faces*", "modeling/meshes/selecting/all_by_trait.html#bpy-ops-mesh-select-interior-faces"),
|
||||
("bpy.ops.mesh.select_similar_region*", "modeling/meshes/selecting/similar.html#bpy-ops-mesh-select-similar-region"),
|
||||
("bpy.ops.mesh.tris_convert_to_quads*", "modeling/meshes/editing/face/triangles_quads.html#bpy-ops-mesh-tris-convert-to-quads"),
|
||||
("bpy.ops.node.active_preview_toggle*", "modeling/geometry_nodes/introduction.html#bpy-ops-node-active-preview-toggle"),
|
||||
("bpy.ops.object.datalayout_transfer*", "scene_layout/object/editing/link_transfer/transfer_mesh_data_layout.html#bpy-ops-object-datalayout-transfer"),
|
||||
("bpy.ops.object.multires_base_apply*", "modeling/modifiers/generate/multiresolution.html#bpy-ops-object-multires-base-apply"),
|
||||
("bpy.ops.object.randomize_transform*", "scene_layout/object/editing/transform/randomize.html#bpy-ops-object-randomize-transform"),
|
||||
|
@ -872,6 +882,7 @@ url_manual_mapping = (
|
|||
("bpy.types.volumedisplay.slice_axis*", "modeling/volumes/properties.html#bpy-types-volumedisplay-slice-axis"),
|
||||
("bpy.ops.anim.channels_clean_empty*", "editors/nla/editing.html#bpy-ops-anim-channels-clean-empty"),
|
||||
("bpy.ops.armature.select_hierarchy*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-hierarchy"),
|
||||
("bpy.ops.armature.switch_direction*", "animation/armatures/bones/editing/switch_direction.html#bpy-ops-armature-switch-direction"),
|
||||
("bpy.ops.clip.apply_solution_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-apply-solution-scale"),
|
||||
("bpy.ops.clip.set_center_principal*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-center-principal"),
|
||||
("bpy.ops.clip.setup_tracking_scene*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-setup-tracking-scene"),
|
||||
|
@ -925,7 +936,9 @@ url_manual_mapping = (
|
|||
("bpy.types.functionnodeinputstring*", "modeling/geometry_nodes/input/string.html#bpy-types-functionnodeinputstring"),
|
||||
("bpy.types.functionnodeinputvector*", "modeling/geometry_nodes/input/vector.html#bpy-types-functionnodeinputvector"),
|
||||
("bpy.types.functionnoderandomfloat*", "modeling/geometry_nodes/input/random_float.html#bpy-types-functionnoderandomfloat"),
|
||||
("bpy.types.geometrynodecurvecircle*", "modeling/geometry_nodes/curve_primitives/circle.html#bpy-types-geometrynodecurvecircle"),
|
||||
("bpy.types.geometrynodecurvelength*", "modeling/geometry_nodes/curve/curve_length.html#bpy-types-geometrynodecurvelength"),
|
||||
("bpy.types.geometrynodecurvespiral*", "modeling/geometry_nodes/curve_primitives/spiral.html#bpy-types-geometrynodecurvespiral"),
|
||||
("bpy.types.geometrynodecurvetomesh*", "modeling/geometry_nodes/curve/curve_to_mesh.html#bpy-types-geometrynodecurvetomesh"),
|
||||
("bpy.types.geometrynodemeshtocurve*", "modeling/geometry_nodes/curve/mesh_to_curve.html#bpy-types-geometrynodemeshtocurve"),
|
||||
("bpy.types.geometrynodepointrotate*", "modeling/geometry_nodes/point/point_rotate.html#bpy-types-geometrynodepointrotate"),
|
||||
|
@ -989,6 +1002,7 @@ url_manual_mapping = (
|
|||
("bpy.ops.sequencer.select_handles*", "video_editing/sequencer/selecting.html#bpy-ops-sequencer-select-handles"),
|
||||
("bpy.ops.uv.average_islands_scale*", "modeling/meshes/uv/editing.html#bpy-ops-uv-average-islands-scale"),
|
||||
("bpy.ops.view3d.blenderkit_search*", "addons/3d_view/blenderkit.html#bpy-ops-view3d-blenderkit-search"),
|
||||
("bpy.types.armature.axes_position*", "animation/armatures/properties/display.html#bpy-types-armature-axes-position"),
|
||||
("bpy.types.armature.pose_position*", "animation/armatures/properties/skeleton.html#bpy-types-armature-pose-position"),
|
||||
("bpy.types.bakesettings.use_clear*", "render/cycles/baking.html#bpy-types-bakesettings-use-clear"),
|
||||
("bpy.types.bone.envelope_distance*", "animation/armatures/bones/properties/deform.html#bpy-types-bone-envelope-distance"),
|
||||
|
@ -1024,6 +1038,7 @@ url_manual_mapping = (
|
|||
("bpy.types.editbone.bbone_scalein*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-scalein"),
|
||||
("bpy.types.editbone.inherit_scale*", "animation/armatures/bones/properties/relations.html#bpy-types-editbone-inherit-scale"),
|
||||
("bpy.types.geometrynodeconvexhull*", "modeling/geometry_nodes/geometry/convex_hull.html#bpy-types-geometrynodeconvexhull"),
|
||||
("bpy.types.geometrynodefloattoint*", "modeling/geometry_nodes/utilities/float_to_int.html#bpy-types-geometrynodefloattoint"),
|
||||
("bpy.types.geometrynodeisviewport*", "modeling/geometry_nodes/input/is_viewport.html#bpy-types-geometrynodeisviewport"),
|
||||
("bpy.types.geometrynodemeshcircle*", "modeling/geometry_nodes/mesh_primitives/circle.html#bpy-types-geometrynodemeshcircle"),
|
||||
("bpy.types.geometrynodeobjectinfo*", "modeling/geometry_nodes/input/object_info.html#bpy-types-geometrynodeobjectinfo"),
|
||||
|
@ -1051,6 +1066,8 @@ url_manual_mapping = (
|
|||
("bpy.types.volumerender.step_size*", "modeling/volumes/properties.html#bpy-types-volumerender-step-size"),
|
||||
("bpy.types.weightednormalmodifier*", "modeling/modifiers/modify/weighted_normal.html#bpy-types-weightednormalmodifier"),
|
||||
("bpy.ops.armature.autoside_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-autoside-names"),
|
||||
("bpy.ops.armature.calculate_roll*", "animation/armatures/bones/editing/bone_roll.html#bpy-ops-armature-calculate-roll"),
|
||||
("bpy.ops.armature.duplicate_move*", "animation/armatures/bones/editing/duplicate.html#bpy-ops-armature-duplicate-move"),
|
||||
("bpy.ops.armature.select_similar*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-similar"),
|
||||
("bpy.ops.clip.create_plane_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-create-plane-track"),
|
||||
("bpy.ops.curve.spline_weight_set*", "modeling/curves/editing/other.html#bpy-ops-curve-spline-weight-set"),
|
||||
|
@ -1099,6 +1116,7 @@ url_manual_mapping = (
|
|||
("bpy.ops.wm.operator_cheat_sheet*", "advanced/operators.html#bpy-ops-wm-operator-cheat-sheet"),
|
||||
("bpy.ops.wm.previews_batch_clear*", "files/blend/previews.html#bpy-ops-wm-previews-batch-clear"),
|
||||
("bpy.ops.wm.recover_last_session*", "files/blend/open_save.html#bpy-ops-wm-recover-last-session"),
|
||||
("bpy.types.armature.display_type*", "animation/armatures/properties/display.html#bpy-types-armature-display-type"),
|
||||
("bpy.types.armature.use_mirror_x*", "animation/armatures/bones/tools/tool_settings.html#bpy-types-armature-use-mirror-x"),
|
||||
("bpy.types.bakesettings.normal_b*", "render/cycles/baking.html#bpy-types-bakesettings-normal-b"),
|
||||
("bpy.types.bakesettings.normal_g*", "render/cycles/baking.html#bpy-types-bakesettings-normal-g"),
|
||||
|
@ -1127,8 +1145,10 @@ url_manual_mapping = (
|
|||
("bpy.types.editbone.bbone_rollin*", "animation/armatures/bones/properties/bendy_bones.html#bpy-types-editbone-bbone-rollin"),
|
||||
("bpy.types.fluideffectorsettings*", "physics/fluid/type/effector.html#bpy-types-fluideffectorsettings"),
|
||||
("bpy.types.followtrackconstraint*", "animation/constraints/motion_tracking/follow_track.html#bpy-types-followtrackconstraint"),
|
||||
("bpy.types.geometrynodecurveline*", "modeling/geometry_nodes/curve_primitives/line.html#bpy-types-geometrynodecurveline"),
|
||||
("bpy.types.geometrynodecurvestar*", "modeling/geometry_nodes/curve_primitives/star.html#bpy-types-geometrynodecurvestar"),
|
||||
("bpy.types.geometrynodecurvetrim*", "modeling/geometry_nodes/curve/curve_trim.html#bpy-types-geometrynodecurvetrim"),
|
||||
("bpy.types.geometrynodeedgesplit*", "modeling/geometry_nodes/mesh/edge_split.html#bpy-types-geometrynodeedgesplit"),
|
||||
("bpy.types.geometrynodesubdivide*", "modeling/geometry_nodes/mesh/subdivide.html#bpy-types-geometrynodesubdivide"),
|
||||
("bpy.types.geometrynodetransform*", "modeling/geometry_nodes/geometry/transform.html#bpy-types-geometrynodetransform"),
|
||||
("bpy.types.gpencilsculptsettings*", "grease_pencil/properties/index.html#bpy-types-gpencilsculptsettings"),
|
||||
("bpy.types.light.cutoff_distance*", "render/eevee/lighting.html#bpy-types-light-cutoff-distance"),
|
||||
|
@ -1247,6 +1267,8 @@ url_manual_mapping = (
|
|||
("bpy.types.volumetomeshmodifier*", "modeling/modifiers/generate/volume_to_mesh.html#bpy-types-volumetomeshmodifier"),
|
||||
("bpy.types.whitebalancemodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-whitebalancemodifier"),
|
||||
("bpy.ops.anim.channels_ungroup*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-ungroup"),
|
||||
("bpy.ops.armature.extrude_move*", "animation/armatures/bones/editing/extrude.html#bpy-ops-armature-extrude-move"),
|
||||
("bpy.ops.armature.parent_clear*", "animation/armatures/bones/editing/parenting.html#bpy-ops-armature-parent-clear"),
|
||||
("bpy.ops.clip.clear_track_path*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clear-track-path"),
|
||||
("bpy.ops.clip.set_scene_frames*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-set-scene-frames"),
|
||||
("bpy.ops.curve.handle_type_set*", "modeling/curves/editing/control_points.html#bpy-ops-curve-handle-type-set"),
|
||||
|
@ -1424,6 +1446,7 @@ url_manual_mapping = (
|
|||
("bpy.types.freestylelinestyle*", "render/freestyle/parameter_editor/line_style/index.html#bpy-types-freestylelinestyle"),
|
||||
("bpy.types.gammacrosssequence*", "video_editing/sequencer/strips/transitions/gamma_cross.html#bpy-types-gammacrosssequence"),
|
||||
("bpy.types.geometrynodeswitch*", "modeling/geometry_nodes/utilities/switch.html#bpy-types-geometrynodeswitch"),
|
||||
("bpy.types.geometrynodeviewer*", "modeling/geometry_nodes/output/viewer.html#bpy-types-geometrynodeviewer"),
|
||||
("bpy.types.gpencilsculptguide*", "grease_pencil/modes/draw/guides.html#bpy-types-gpencilsculptguide"),
|
||||
("bpy.types.huecorrectmodifier*", "video_editing/sequencer/sidebar/modifiers.html#bpy-types-huecorrectmodifier"),
|
||||
("bpy.types.imagepaint.stencil*", "sculpt_paint/texture_paint/tool_settings/mask.html#bpy-types-imagepaint-stencil"),
|
||||
|
@ -1462,7 +1485,9 @@ url_manual_mapping = (
|
|||
("bpy.ops.anim.channels_group*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-group"),
|
||||
("bpy.ops.anim.keyframe_clear*", "animation/keyframes/editing.html#bpy-ops-anim-keyframe-clear"),
|
||||
("bpy.ops.armature.flip_names*", "animation/armatures/bones/editing/naming.html#bpy-ops-armature-flip-names"),
|
||||
("bpy.ops.armature.parent_set*", "animation/armatures/bones/editing/parenting.html#bpy-ops-armature-parent-set"),
|
||||
("bpy.ops.armature.select_all*", "animation/armatures/bones/selecting.html#bpy-ops-armature-select-all"),
|
||||
("bpy.ops.armature.symmetrize*", "animation/armatures/bones/editing/symmetrize.html#bpy-ops-armature-symmetrize"),
|
||||
("bpy.ops.clip.average_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-average-tracks"),
|
||||
("bpy.ops.clip.refine_markers*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-refine-markers"),
|
||||
("bpy.ops.clip.select_grouped*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-grouped"),
|
||||
|
@ -1501,6 +1526,8 @@ url_manual_mapping = (
|
|||
("bpy.ops.object.shade_smooth*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-smooth"),
|
||||
("bpy.ops.object.voxel_remesh*", "modeling/meshes/retopology.html#bpy-ops-object-voxel-remesh"),
|
||||
("bpy.ops.pose.armature_apply*", "animation/armatures/posing/editing/apply.html#bpy-ops-pose-armature-apply"),
|
||||
("bpy.ops.pose.group_deselect*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-deselect"),
|
||||
("bpy.ops.pose.group_unassign*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-unassign"),
|
||||
("bpy.ops.pose.select_grouped*", "animation/armatures/posing/selecting.html#bpy-ops-pose-select-grouped"),
|
||||
("bpy.ops.poselib.pose_remove*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-remove"),
|
||||
("bpy.ops.poselib.pose_rename*", "animation/armatures/posing/editing/pose_library.html#bpy-ops-poselib-pose-rename"),
|
||||
|
@ -1574,6 +1601,7 @@ url_manual_mapping = (
|
|||
("bpy.types.wireframemodifier*", "modeling/modifiers/generate/wireframe.html#bpy-types-wireframemodifier"),
|
||||
("bpy.types.worldmistsettings*", "render/cycles/world_settings.html#bpy-types-worldmistsettings"),
|
||||
("bpy.ops.anim.channels_move*", "editors/graph_editor/channels.html#bpy-ops-anim-channels-move"),
|
||||
("bpy.ops.armature.subdivide*", "animation/armatures/bones/editing/subdivide.html#bpy-ops-armature-subdivide"),
|
||||
("bpy.ops.buttons.toggle_pin*", "editors/properties_editor.html#bpy-ops-buttons-toggle-pin"),
|
||||
("bpy.ops.clip.filter_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-filter-tracks"),
|
||||
("bpy.ops.clip.select_circle*", "movie_clip/tracking/clip/selecting.html#bpy-ops-clip-select-circle"),
|
||||
|
@ -1675,6 +1703,8 @@ url_manual_mapping = (
|
|||
("bpy.types.texturenodegroup*", "editors/texture_node/types/groups.html#bpy-types-texturenodegroup"),
|
||||
("bpy.types.texturenodeimage*", "editors/texture_node/types/input/image.html#bpy-types-texturenodeimage"),
|
||||
("bpy.types.viewlayer.use_ao*", "render/layers/introduction.html#bpy-types-viewlayer-use-ao"),
|
||||
("bpy.ops.armature.dissolve*", "animation/armatures/bones/editing/delete.html#bpy-ops-armature-dissolve"),
|
||||
("bpy.ops.armature.separate*", "animation/armatures/bones/editing/separate_bones.html#bpy-ops-armature-separate"),
|
||||
("bpy.ops.clip.clean_tracks*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-clean-tracks"),
|
||||
("bpy.ops.clip.delete_track*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-delete-track"),
|
||||
("bpy.ops.clip.solve_camera*", "movie_clip/tracking/clip/editing/track.html#bpy-ops-clip-solve-camera"),
|
||||
|
@ -1703,6 +1733,8 @@ url_manual_mapping = (
|
|||
("bpy.ops.object.proxy_make*", "files/linked_libraries/library_proxies.html#bpy-ops-object-proxy-make"),
|
||||
("bpy.ops.object.select_all*", "scene_layout/object/selecting.html#bpy-ops-object-select-all"),
|
||||
("bpy.ops.object.shade_flat*", "scene_layout/object/editing/shading.html#bpy-ops-object-shade-flat"),
|
||||
("bpy.ops.pose.group_assign*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-assign"),
|
||||
("bpy.ops.pose.group_select*", "animation/armatures/properties/bone_groups.html#bpy-ops-pose-group-select"),
|
||||
("bpy.ops.poselib.pose_move*", "animation/armatures/properties/pose_library.html#bpy-ops-poselib-pose-move"),
|
||||
("bpy.ops.preferences.addon*", "editors/preferences/addons.html#bpy-ops-preferences-addon"),
|
||||
("bpy.ops.scene.light_cache*", "render/eevee/render_settings/indirect_lighting.html#bpy-ops-scene-light-cache"),
|
||||
|
@ -1872,6 +1904,7 @@ url_manual_mapping = (
|
|||
("bpy.ops.wm.owner_enable*", "interface/window_system/workspaces.html#bpy-ops-wm-owner-enable"),
|
||||
("bpy.ops.wm.redraw_timer*", "advanced/operators.html#bpy-ops-wm-redraw-timer"),
|
||||
("bpy.types.*light.shadow*", "render/eevee/lighting.html#bpy-types-light-shadow"),
|
||||
("bpy.types.armature.show*", "animation/armatures/properties/display.html#bpy-types-armature-show"),
|
||||
("bpy.types.armaturebones*", "animation/armatures/bones/index.html#bpy-types-armaturebones"),
|
||||
("bpy.types.arraymodifier*", "modeling/modifiers/generate/array.html#bpy-types-arraymodifier"),
|
||||
("bpy.types.bevelmodifier*", "modeling/modifiers/generate/bevel.html#bpy-types-bevelmodifier"),
|
||||
|
@ -1919,6 +1952,8 @@ url_manual_mapping = (
|
|||
("bpy.types.volumedisplay*", "modeling/volumes/properties.html#bpy-types-volumedisplay"),
|
||||
("bpy.types.windowmanager*", "interface/index.html#bpy-types-windowmanager"),
|
||||
("bpy.ops.*.select_lasso*", "interface/selecting.html#bpy-ops-select-lasso"),
|
||||
("bpy.ops.armature.align*", "animation/armatures/bones/editing/transform.html#bpy-ops-armature-align"),
|
||||
("bpy.ops.armature.split*", "animation/armatures/bones/editing/split.html#bpy-ops-armature-split"),
|
||||
("bpy.ops.clip.set_plane*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-plane"),
|
||||
("bpy.ops.clip.set_scale*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-scale"),
|
||||
("bpy.ops.curve.decimate*", "modeling/curves/editing/curve.html#bpy-ops-curve-decimate"),
|
||||
|
@ -1993,6 +2028,7 @@ url_manual_mapping = (
|
|||
("bpy.types.wavemodifier*", "modeling/modifiers/deform/wave.html#bpy-types-wavemodifier"),
|
||||
("bpy.types.weldmodifier*", "modeling/modifiers/generate/weld.html#bpy-types-weldmodifier"),
|
||||
("bpy.types.wipesequence*", "video_editing/sequencer/strips/transitions/wipe.html#bpy-types-wipesequence"),
|
||||
("bpy.ops.armature.fill*", "animation/armatures/bones/editing/fill_between_joints.html#bpy-ops-armature-fill"),
|
||||
("bpy.ops.clip.prefetch*", "movie_clip/tracking/clip/editing/clip.html#bpy-ops-clip-prefetch"),
|
||||
("bpy.ops.clip.set_axis*", "movie_clip/tracking/clip/editing/reconstruction.html#bpy-ops-clip-set-axis"),
|
||||
("bpy.ops.file.pack_all*", "files/blend/packed_data.html#bpy-ops-file-pack-all"),
|
||||
|
@ -2064,6 +2100,7 @@ url_manual_mapping = (
|
|||
("bpy.ops.uv.mark_seam*", "modeling/meshes/uv/unwrapping/seams.html#bpy-ops-uv-mark-seam"),
|
||||
("bpy.ops.view3d.ruler*", "editors/3dview/toolbar/measure.html#bpy-ops-view3d-ruler"),
|
||||
("bpy.types.areaspaces*", "interface/window_system/areas.html#bpy-types-areaspaces"),
|
||||
("bpy.types.bonegroups*", "animation/armatures/properties/bone_groups.html#bpy-types-bonegroups"),
|
||||
("bpy.types.bpy_struct*", "files/data_blocks.html#bpy-types-bpy-struct"),
|
||||
("bpy.types.collection*", "scene_layout/collections/collections.html#bpy-types-collection"),
|
||||
("bpy.types.compositor*", "compositing/index.html#bpy-types-compositor"),
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
|
||||
# <pep8 compliant>
|
||||
from __future__ import annotations
|
||||
from pathlib import Path
|
||||
|
||||
import bpy
|
||||
from bpy.types import Operator
|
||||
|
|
|
@ -81,7 +81,10 @@ class NewGeometryNodeTreeAssign(Operator):
|
|||
return geometry_modifier_poll(context)
|
||||
|
||||
def execute(self, context):
|
||||
modifier = context.object.modifiers.active
|
||||
if context.area.type == 'PROPERTIES':
|
||||
modifier = context.modifier
|
||||
else:
|
||||
modifier = context.object.modifiers.active
|
||||
|
||||
if not modifier:
|
||||
return {'CANCELLED'}
|
||||
|
|
|
@ -60,17 +60,22 @@ class CopyRigidbodySettings(Operator):
|
|||
|
||||
def execute(self, context):
|
||||
obj_act = context.object
|
||||
view_layer = context.view_layer
|
||||
|
||||
# deselect all but mesh objects
|
||||
# Deselect all non mesh objects and objects that
|
||||
# already have a rigid body attached.
|
||||
rb_objects = []
|
||||
for o in context.selected_objects:
|
||||
if o.type != 'MESH':
|
||||
if o.type != 'MESH' or o.rigid_body is not None:
|
||||
o.select_set(False)
|
||||
elif o.rigid_body is None:
|
||||
# Add rigidbody to object!
|
||||
view_layer.objects.active = o
|
||||
bpy.ops.rigidbody.object_add()
|
||||
view_layer.objects.active = obj_act
|
||||
if o.rigid_body is not None:
|
||||
rb_objects.append(o)
|
||||
|
||||
bpy.ops.rigidbody.objects_add()
|
||||
|
||||
# Ensure that the rigid body objects
|
||||
# we've de-selected are selected again.
|
||||
for o in rb_objects:
|
||||
o.select_set(True)
|
||||
|
||||
objects = context.selected_objects
|
||||
if objects:
|
||||
|
|
|
@ -86,12 +86,15 @@ class COLLECTION_PT_lineart_collection(CollectionButtonsPanel, Panel):
|
|||
row = layout.row()
|
||||
row.prop(collection, "lineart_usage")
|
||||
|
||||
layout.prop(collection, "lineart_use_intersection_mask")
|
||||
layout.prop(collection, "lineart_use_intersection_mask", text="Collection Mask")
|
||||
|
||||
row = layout.row(align=True, heading="Masks")
|
||||
row.active = collection.lineart_use_intersection_mask
|
||||
col = layout.column(align=True)
|
||||
col.active = collection.lineart_use_intersection_mask
|
||||
row = col.row(align=True, heading="Masks")
|
||||
for i in range(8):
|
||||
row.prop(collection, "lineart_intersection_mask", index=i, text=str(i), toggle=True)
|
||||
row.prop(collection, "lineart_intersection_mask", index=i, text=" ", toggle=True)
|
||||
if i == 3:
|
||||
row = col.row(align=True)
|
||||
|
||||
|
||||
classes = (
|
||||
|
|
|
@ -291,18 +291,18 @@ class MATERIAL_PT_lineart(MaterialButtonsPanel, Panel):
|
|||
mat = context.material
|
||||
lineart = mat.lineart
|
||||
|
||||
layout.prop(lineart, "use_material_mask")
|
||||
layout.prop(lineart, "use_material_mask", text="Material Mask")
|
||||
|
||||
row = layout.row(align=True, heading="Masks")
|
||||
row.active = lineart.use_material_mask
|
||||
col = layout.column(align=True)
|
||||
col.active = lineart.use_material_mask
|
||||
row = col.row(align=True, heading="Masks")
|
||||
for i in range(8):
|
||||
row.prop(lineart, "use_material_mask_bits", text=str(i), index=i, toggle=True)
|
||||
row.prop(lineart, "use_material_mask_bits", text=" ", index=i, toggle=True)
|
||||
if i == 3:
|
||||
row = col.row(align=True)
|
||||
|
||||
row = layout.row(align=True, heading="Custom Occlusion")
|
||||
row.prop(lineart, "use_mat_occlusion", text="")
|
||||
sub = row.row(align=False)
|
||||
sub.active = lineart.use_mat_occlusion
|
||||
sub.prop(lineart, "mat_occlusion", slider=True, text="Levels")
|
||||
row.prop(lineart, "mat_occlusion", text="Levels")
|
||||
|
||||
|
||||
classes = (
|
||||
|
|
|
@ -734,11 +734,9 @@ class PHYSICS_PT_noise(PhysicButtonsPanel, Panel):
|
|||
|
||||
col = flow.column()
|
||||
col.prop(domain, "noise_scale", text="Upres Factor")
|
||||
# TODO (sebbas): Mantaflow only supports wavelet noise. Maybe get rid of noise type field.
|
||||
col.prop(domain, "noise_type", text="Noise Method")
|
||||
col.prop(domain, "noise_strength", text="Strength")
|
||||
|
||||
col = flow.column()
|
||||
col.prop(domain, "noise_strength", text="Strength")
|
||||
col.prop(domain, "noise_pos_scale", text="Scale")
|
||||
col.prop(domain, "noise_time_anim", text="Time")
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue