Compare commits
11 Commits
nodes-upda
...
temp-geome
Author | SHA1 | Date | |
---|---|---|---|
2d190d0480 | |||
51f6fa351d | |||
db384d4df6 | |||
20ddb64207 | |||
cc39200bfc | |||
36ea32a3f0 | |||
dc0c71d3ae | |||
d7a74a2ad6 | |||
4580340321 | |||
a101f6d974 | |||
3efc50dfde |
@@ -251,6 +251,16 @@ if(WITH_GHOST_X11)
|
||||
option(WITH_X11_ALPHA "Enable X11 transparent background" ON)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" OFF)
|
||||
option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON)
|
||||
else()
|
||||
# not an option for other OS's
|
||||
set(WITH_SYSTEM_GLEW OFF)
|
||||
set(WITH_SYSTEM_GLES OFF)
|
||||
endif()
|
||||
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
option(WITH_SYSTEM_EIGEN3 "Use the systems Eigen3 library" OFF)
|
||||
endif()
|
||||
@@ -393,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_NAN "Build Cycles with additional asserts for detecting NaNs and invalid values" OFF)
|
||||
option(WITH_CYCLES_LOGGING "Build Cycles with logging support" ON)
|
||||
option(WITH_CYCLES_DEBUG "Build Cycles with extra debug capabilities" 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_NAN)
|
||||
mark_as_advanced(WITH_CYCLES_DEBUG)
|
||||
mark_as_advanced(WITH_CYCLES_NATIVE_ONLY)
|
||||
|
||||
option(WITH_CYCLES_DEVICE_CUDA "Enable Cycles CUDA compute support" ON)
|
||||
@@ -475,32 +485,15 @@ endif()
|
||||
|
||||
# OpenGL
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
# GLEW can only built with either GLX or EGL support and most binary
|
||||
# distributions are built with GLX support. So we always compile GLEW
|
||||
# with EGL support manually, and the options are no longer available.
|
||||
set(WITH_SYSTEM_GLEW OFF)
|
||||
set(WITH_SYSTEM_GLES ON)
|
||||
|
||||
# Always use EGL instead of GLX, for X11, Wayland and headless.
|
||||
set(WITH_GL_EGL ON)
|
||||
else()
|
||||
# System GLEW and GLES were never an option on other platforms.
|
||||
set(WITH_SYSTEM_GLEW OFF)
|
||||
set(WITH_SYSTEM_GLES OFF)
|
||||
|
||||
# Experimental EGL option.
|
||||
option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL or WGL)" OFF)
|
||||
mark_as_advanced(WITH_GL_EGL)
|
||||
endif()
|
||||
|
||||
option(WITH_OPENGL "When off limits visibility of the opengl headers to just bf_gpu and gawain (temporary option for development purposes)" ON)
|
||||
option(WITH_GLEW_ES "Switches to experimental copy of GLEW that has support for OpenGL ES. (temporary option for development purposes)" OFF)
|
||||
option(WITH_GL_EGL "Use the EGL OpenGL system library instead of the platform specific OpenGL system library (CGL, glX, or WGL)" OFF)
|
||||
option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (through either EGL or the AGL/WGL/XGL 'es20' profile)" OFF)
|
||||
|
||||
mark_as_advanced(
|
||||
WITH_OPENGL
|
||||
WITH_GLEW_ES
|
||||
WITH_GL_EGL
|
||||
WITH_GL_PROFILE_ES20
|
||||
)
|
||||
|
||||
|
@@ -82,11 +82,7 @@ if(UNIX)
|
||||
endif()
|
||||
include(cmake/openimageio.cmake)
|
||||
include(cmake/tiff.cmake)
|
||||
if(WIN32)
|
||||
include(cmake/flexbison.cmake)
|
||||
else()
|
||||
include(cmake/flex.cmake)
|
||||
endif()
|
||||
include(cmake/flexbison.cmake)
|
||||
include(cmake/osl.cmake)
|
||||
include(cmake/tbb.cmake)
|
||||
include(cmake/openvdb.cmake)
|
||||
|
@@ -93,4 +93,3 @@ download_source(GMP)
|
||||
download_source(POTRACE)
|
||||
download_source(HARU)
|
||||
download_source(ZSTD)
|
||||
download_source(FLEX)
|
||||
|
@@ -30,7 +30,6 @@ if(WIN32)
|
||||
--enable-w32threads
|
||||
--disable-pthreads
|
||||
--enable-libopenjpeg
|
||||
--disable-mediafoundation
|
||||
)
|
||||
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||
set(FFMPEG_EXTRA_FLAGS
|
||||
|
@@ -1,28 +0,0 @@
|
||||
# ***** BEGIN GPL LICENSE BLOCK *****
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# ***** END GPL LICENSE BLOCK *****
|
||||
|
||||
ExternalProject_Add(external_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,7 +106,6 @@ 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,13 +29,12 @@ elseif(APPLE)
|
||||
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
|
||||
set(ISPC_EXTRA_ARGS_APPLE
|
||||
-DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison
|
||||
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
|
||||
-DFLEX_EXECUTABLE=/opt/homebrew/opt/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()
|
||||
@@ -44,7 +43,6 @@ 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()
|
||||
|
||||
@@ -84,9 +82,4 @@ if(WIN32)
|
||||
external_ispc
|
||||
external_flexbison
|
||||
)
|
||||
else()
|
||||
add_dependencies(
|
||||
external_ispc
|
||||
external_flex
|
||||
)
|
||||
endif()
|
||||
|
@@ -66,11 +66,7 @@ ExternalProject_Add(ll
|
||||
|
||||
if(MSVC)
|
||||
if(BUILD_MODE STREQUAL Release)
|
||||
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
|
||||
)
|
||||
set(LLVM_HARVEST_COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/ ${HARVEST_TARGET}/llvm/ )
|
||||
else()
|
||||
set(LLVM_HARVEST_COMMAND
|
||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/llvm/lib/ ${HARVEST_TARGET}/llvm/debug/lib/ &&
|
||||
|
@@ -45,6 +45,7 @@ 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,8 +22,9 @@ 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 @rpath/libomp.dylib runtime/src/libomp.dylib && make install
|
||||
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_DIR ${LIBDIR}/openmp
|
||||
)
|
||||
|
||||
|
@@ -20,10 +20,12 @@ 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")
|
||||
@@ -49,13 +51,12 @@ 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
|
||||
-DLINKSTATIC=ON
|
||||
${OSL_PLATFORM_FLAGS}
|
||||
-DOSL_BUILD_PLUGINS=OFF
|
||||
-DSTOP_ON_WARNING=OFF
|
||||
-DUSE_LLVM_BITCODE=OFF
|
||||
@@ -68,9 +69,13 @@ 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}
|
||||
@@ -88,20 +93,10 @@ 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,20 +152,35 @@ set(OPENCOLORIO_HASH 1a2e3478b6cd9a1549f24e1b2205e3f0)
|
||||
set(OPENCOLORIO_HASH_TYPE MD5)
|
||||
set(OPENCOLORIO_FILE OpenColorIO-${OPENCOLORIO_VERSION}.tar.gz)
|
||||
|
||||
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)
|
||||
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(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_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(OPENIMAGEIO_VERSION 2.2.15.1)
|
||||
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_URI https://github.com/OpenImageIO/oiio/archive/Release-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||
set(OPENIMAGEIO_HASH 3db5c5f0b3dc91597c75e5df09eb9072)
|
||||
set(OPENIMAGEIO_HASH f03aa5e3ac4795af04771ee4146e9832)
|
||||
set(OPENIMAGEIO_HASH_TYPE MD5)
|
||||
set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz)
|
||||
|
||||
@@ -175,9 +190,9 @@ set(TIFF_HASH 2165e7aba557463acc0664e71a3ed424)
|
||||
set(TIFF_HASH_TYPE MD5)
|
||||
set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz)
|
||||
|
||||
set(OSL_VERSION 1.11.14.1)
|
||||
set(OSL_VERSION 1.11.10.0)
|
||||
set(OSL_URI https://github.com/imageworks/OpenShadingLanguage/archive/Release-${OSL_VERSION}.tar.gz)
|
||||
set(OSL_HASH 1abd7ce40481771a9fa937f19595d2f2)
|
||||
set(OSL_HASH dfdc23597aeef083832cbada62211756)
|
||||
set(OSL_HASH_TYPE MD5)
|
||||
set(OSL_FILE OpenShadingLanguage-${OSL_VERSION}.tar.gz)
|
||||
|
||||
@@ -355,18 +370,12 @@ set(PUGIXML_HASH 0c208b0664c7fb822bf1b49ad035e8fd)
|
||||
set(PUGIXML_HASH_TYPE MD5)
|
||||
set(PUGIXML_FILE pugixml-${PUGIXML_VERSION}.tar.gz)
|
||||
|
||||
set(FLEXBISON_VERSION 2.5.24)
|
||||
set(FLEXBISON_VERSION 2.5.5)
|
||||
set(FLEXBISON_URI http://prdownloads.sourceforge.net/winflexbison/win_flex_bison-${FLEXBISON_VERSION}.zip)
|
||||
set(FLEXBISON_HASH 6b549d43e34ece0e8ed05af92daa31c4)
|
||||
set(FLEXBISON_HASH d87a3938194520d904013abef3df10ce)
|
||||
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
|
||||
@@ -423,9 +432,9 @@ set(USD_HASH 1dd1e2092d085ed393c1f7c450a4155a)
|
||||
set(USD_HASH_TYPE MD5)
|
||||
set(USD_FILE usd-v${USD_VERSION}.tar.gz)
|
||||
|
||||
set(OIDN_VERSION 1.4.1)
|
||||
set(OIDN_VERSION 1.4.0)
|
||||
set(OIDN_URI https://github.com/OpenImageDenoise/oidn/releases/download/v${OIDN_VERSION}/oidn-${OIDN_VERSION}.src.tar.gz)
|
||||
set(OIDN_HASH df4007b0ab93b1c41cdf223b075d01c0)
|
||||
set(OIDN_HASH 421824019becc5b664a22a2b98332bc5)
|
||||
set(OIDN_HASH_TYPE MD5)
|
||||
set(OIDN_FILE oidn-${OIDN_VERSION}.src.tar.gz)
|
||||
|
||||
@@ -435,10 +444,10 @@ set(LIBGLU_HASH 151aef599b8259efe9acd599c96ea2a3)
|
||||
set(LIBGLU_HASH_TYPE MD5)
|
||||
set(LIBGLU_FILE glu-${LIBGLU_VERSION}.tar.xz)
|
||||
|
||||
set(MESA_VERSION 21.1.5)
|
||||
set(MESA_VERSION 20.3.4)
|
||||
set(MESA_URI ftp://ftp.freedesktop.org/pub/mesa/mesa-${MESA_VERSION}.tar.xz)
|
||||
set(MESA_HASH 022c7293074aeeced2278c872db4fa693147c70f8595b076cf3f1ef81520766d)
|
||||
set(MESA_HASH_TYPE SHA256)
|
||||
set(MESA_HASH 556338446aef8ae947a789b3e0b5e056)
|
||||
set(MESA_HASH_TYPE MD5)
|
||||
set(MESA_FILE mesa-${MESA_VERSION}.tar.xz)
|
||||
|
||||
set(NASM_VERSION 2.15.02)
|
||||
@@ -459,11 +468,19 @@ set(WL_PROTOCOLS_URI https://gitlab.freedesktop.org/wayland/wayland-protocols/-/
|
||||
set(WL_PROTOCOLS_HASH af5ca07e13517cdbab33504492cef54a)
|
||||
set(WL_PROTOCOLS_HASH_TYPE MD5)
|
||||
|
||||
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)
|
||||
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(GMP_VERSION 6.2.0)
|
||||
set(GMP_URI https://gmplib.org/download/gmp/gmp-${GMP_VERSION}.tar.xz)
|
||||
|
@@ -474,25 +474,25 @@ OPENEXR_FORCE_REBUILD=false
|
||||
OPENEXR_SKIP=false
|
||||
_with_built_openexr=false
|
||||
|
||||
OIIO_VERSION="2.2.15.1"
|
||||
OIIO_VERSION_SHORT="2.2"
|
||||
OIIO_VERSION="2.1.15.0"
|
||||
OIIO_VERSION_SHORT="2.1"
|
||||
OIIO_VERSION_MIN="2.1.12"
|
||||
OIIO_VERSION_MAX="2.3.0"
|
||||
OIIO_VERSION_MAX="2.2.10"
|
||||
OIIO_FORCE_BUILD=false
|
||||
OIIO_FORCE_REBUILD=false
|
||||
OIIO_SKIP=false
|
||||
|
||||
LLVM_VERSION="12.0.0"
|
||||
LLVM_VERSION_SHORT="12.0"
|
||||
LLVM_VERSION_MIN="11.0"
|
||||
LLVM_VERSION_MAX="13.0"
|
||||
LLVM_VERSION="9.0.1"
|
||||
LLVM_VERSION_SHORT="9.0"
|
||||
LLVM_VERSION_MIN="6.0"
|
||||
LLVM_VERSION_MAX="12.0"
|
||||
LLVM_VERSION_FOUND=""
|
||||
LLVM_FORCE_BUILD=false
|
||||
LLVM_FORCE_REBUILD=false
|
||||
LLVM_SKIP=false
|
||||
|
||||
# OSL needs to be compiled for now!
|
||||
OSL_VERSION="1.11.14.1"
|
||||
OSL_VERSION="1.11.10.0"
|
||||
OSL_VERSION_SHORT="1.11"
|
||||
OSL_VERSION_MIN="1.11"
|
||||
OSL_VERSION_MAX="2.0"
|
||||
@@ -553,7 +553,7 @@ EMBREE_FORCE_BUILD=false
|
||||
EMBREE_FORCE_REBUILD=false
|
||||
EMBREE_SKIP=false
|
||||
|
||||
OIDN_VERSION="1.4.1"
|
||||
OIDN_VERSION="1.4.0"
|
||||
OIDN_VERSION_SHORT="1.4"
|
||||
OIDN_VERSION_MIN="1.4.0"
|
||||
OIDN_VERSION_MAX="1.5"
|
||||
@@ -561,7 +561,7 @@ OIDN_FORCE_BUILD=false
|
||||
OIDN_FORCE_REBUILD=false
|
||||
OIDN_SKIP=false
|
||||
|
||||
ISPC_VERSION="1.16.0"
|
||||
ISPC_VERSION="1.14.1"
|
||||
|
||||
FFMPEG_VERSION="4.4"
|
||||
FFMPEG_VERSION_SHORT="4.4"
|
||||
@@ -603,6 +603,9 @@ MP3LAME_DEV=""
|
||||
OPENJPEG_USE=false
|
||||
OPENJPEG_DEV=""
|
||||
|
||||
# Whether to use system GLEW or not (OpenSubDiv needs recent glew to work).
|
||||
NO_SYSTEM_GLEW=false
|
||||
|
||||
# Switch to english language, else some things (like check_package_DEB()) won't work!
|
||||
LANG_BACK=$LANG
|
||||
LANG=""
|
||||
@@ -1126,7 +1129,7 @@ Those libraries should be available as packages in all recent distributions (opt
|
||||
* libjpeg, libpng, libtiff, [openjpeg2], [libopenal].
|
||||
* libx11, libxcursor, libxi, libxrandr, libxinerama (and other libx... as needed).
|
||||
* libwayland-client0, libwayland-cursor0, libwayland-egl1, libxkbcommon0, libdbus-1-3, libegl1 (Wayland)
|
||||
* libsqlite3, libzstd, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp, flex.
|
||||
* libsqlite3, libbz2, libssl, libfftw3, libxml2, libtinyxml, yasm, libyaml-cpp.
|
||||
* libsdl2, libglew, libpugixml, libpotrace, [libgmp], [libglewmx], fontconfig, [libharu/libhpdf].\""
|
||||
|
||||
DEPS_SPECIFIC_INFO="\"BUILDABLE DEPENDENCIES:
|
||||
@@ -2313,7 +2316,6 @@ compile_OSL() {
|
||||
tar -C $SRC --transform "s,(.*/?)OpenShadingLanguage-[^/]*(.*),\1OpenShadingLanguage-$OSL_VERSION\2,x" \
|
||||
-xf $_src.tar.gz
|
||||
fi
|
||||
patch -d $_src -p1 < $SCRIPT_DIR/patches/osl.diff
|
||||
fi
|
||||
|
||||
cd $_src
|
||||
@@ -2336,6 +2338,7 @@ compile_OSL() {
|
||||
|
||||
cmake_d="-D CMAKE_BUILD_TYPE=Release"
|
||||
cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
|
||||
cmake_d="$cmake_d -D BUILD_TESTING=OFF"
|
||||
cmake_d="$cmake_d -D STOP_ON_WARNING=OFF"
|
||||
cmake_d="$cmake_d -D OSL_BUILD_PLUGINS=OFF"
|
||||
cmake_d="$cmake_d -D OSL_BUILD_TESTS=OFF"
|
||||
@@ -2343,10 +2346,7 @@ compile_OSL() {
|
||||
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
||||
cmake_d="$cmake_d -D OSL_BUILD_MATERIALX=OFF"
|
||||
cmake_d="$cmake_d -D USE_QT=OFF"
|
||||
cmake_d="$cmake_d -D USE_Qt5=OFF"
|
||||
cmake_d="$cmake_d -D USE_PYTHON=OFF"
|
||||
cmake_d="$cmake_d -D USE_PARTIO=OFF"
|
||||
cmake_d="$cmake_d -D INSTALL_DOCS=OFF"
|
||||
|
||||
if [ $(uname -m) != "aarch64" ]; then
|
||||
cmake_d="$cmake_d -D USE_SIMD=sse2"
|
||||
@@ -2368,7 +2368,10 @@ compile_OSL() {
|
||||
fi
|
||||
|
||||
if [ -d $INST/oiio ]; then
|
||||
cmake_d="$cmake_d -D OpenImageIO_ROOT=$INST/oiio"
|
||||
cmake_d="$cmake_d -D OPENIMAGEIO_ROOT_DIR=$INST/oiio"
|
||||
# HACK! SIC!!!!
|
||||
# Quiet incredible, but if root dir is given, path to lib is found, but not path to include...
|
||||
cmake_d="$cmake_d -D OPENIMAGEIO_INCLUDE_DIR=$INST/oiio/include"
|
||||
fi
|
||||
|
||||
if [ ! -z $LLVM_VERSION_FOUND ]; then
|
||||
@@ -3841,7 +3844,7 @@ install_DEB() {
|
||||
libbz2-dev libncurses5-dev libssl-dev liblzma-dev libreadline-dev \
|
||||
libopenal-dev libglew-dev yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV \
|
||||
libsdl2-dev libfftw3-dev patch bzip2 libxml2-dev libtinyxml-dev libjemalloc-dev \
|
||||
libgmp-dev libpugixml-dev libpotrace-dev libhpdf-dev libzstd-dev"
|
||||
libgmp-dev libpugixml-dev libpotrace-dev libhpdf-dev"
|
||||
# libglewmx-dev (broken in deb testing currently...)
|
||||
|
||||
VORBIS_USE=true
|
||||
@@ -3982,9 +3985,13 @@ install_DEB() {
|
||||
version_ge $_glew "1.7.0"
|
||||
if [ $? -eq 1 ]; then
|
||||
WARNING "OpenSubdiv disabled because GLEW-$_glew is not enough"
|
||||
WARNING "Blender will not use system GLEW library"
|
||||
OSD_SKIP=true
|
||||
NO_SYSTEM_GLEW=true
|
||||
else
|
||||
WARNING "OpenSubdiv will compile with GLEW-$_glew but with limited capability"
|
||||
WARNING "Blender will not use system GLEW library"
|
||||
NO_SYSTEM_GLEW=true
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -4105,8 +4112,6 @@ install_DEB() {
|
||||
|
||||
|
||||
PRINT ""
|
||||
# Debian OIIO includes again libopencv, without even properly dealing with this dependency...
|
||||
OIIO_FORCE_BUILD=true
|
||||
if [ "$OIIO_SKIP" = true ]; then
|
||||
WARNING "Skipping OpenImageIO installation, as requested..."
|
||||
elif [ "$OIIO_FORCE_BUILD" = true ]; then
|
||||
@@ -4509,7 +4514,7 @@ install_RPM() {
|
||||
wget ncurses-devel readline-devel $OPENJPEG_DEV openal-soft-devel \
|
||||
glew-devel yasm $THEORA_DEV $VORBIS_DEV $OGG_DEV patch \
|
||||
libxml2-devel yaml-cpp-devel tinyxml-devel jemalloc-devel \
|
||||
gmp-devel pugixml-devel potrace-devel libharu-devel libzstd-devel"
|
||||
gmp-devel pugixml-devel potrace-devel libharu-devel"
|
||||
|
||||
OPENJPEG_USE=true
|
||||
VORBIS_USE=true
|
||||
@@ -5087,11 +5092,10 @@ install_ARCH() {
|
||||
BASE_DEVEL=`pacman -Sgq base-devel | sed -e 's/^gcc$/gcc-multilib/g' | paste -s -d' '`
|
||||
fi
|
||||
|
||||
_packages="$BASE_DEVEL git cmake fontconfig flex \
|
||||
_packages="$BASE_DEVEL git cmake fontconfig \
|
||||
libxi libxcursor libxrandr libxinerama glew libpng libtiff wget openal \
|
||||
$OPENJPEG_DEV $VORBIS_DEV $OGG_DEV $THEORA_DEV yasm sdl2 fftw \
|
||||
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml libharu \
|
||||
zstd"
|
||||
libxml2 yaml-cpp tinyxml python-requests jemalloc gmp potrace pugixml libharu"
|
||||
|
||||
OPENJPEG_USE=true
|
||||
VORBIS_USE=true
|
||||
@@ -5955,6 +5959,12 @@ print_info() {
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$NO_SYSTEM_GLEW" = true ]; then
|
||||
_1="-D WITH_SYSTEM_GLEW=OFF"
|
||||
PRINT " $_1"
|
||||
_buildargs="$_buildargs $_1"
|
||||
fi
|
||||
|
||||
if [ "$FFMPEG_SKIP" = false ]; then
|
||||
_1="-D WITH_CODEC_FFMPEG=ON"
|
||||
_2="-D FFMPEG_LIBRARIES='avformat;avcodec;avutil;avdevice;swscale;swresample;lzma;rt;`print_info_ffmpeglink`'"
|
||||
|
10
build_files/build_environment/patches/oidn.diff
Normal file
10
build_files/build_environment/patches/oidn.diff
Normal file
@@ -0,0 +1,10 @@
|
||||
--- 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,3 +34,24 @@ 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
|
23
build_files/build_environment/patches/openmp.diff
Normal file
23
build_files/build_environment/patches/openmp.diff
Normal file
@@ -0,0 +1,23 @@
|
||||
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
|
||||
|
||||
|
||||
|
@@ -1,3 +1,18 @@
|
||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/cmake/flexbison.cmake.rej external_osl/src/cmake/flexbison.cmake.rej
|
||||
--- OpenShadingLanguage-Release-1.9.9/src/cmake/flexbison.cmake.rej 1969-12-31 17:00:00 -0700
|
||||
+++ external_osl/src/cmake/flexbison.cmake.rej 2018-08-24 17:42:11 -0600
|
||||
@@ -0,0 +1,11 @@
|
||||
+--- src/cmake/flexbison.cmake 2018-05-01 16:39:02 -0600
|
||||
++++ src/cmake/flexbison.cmake 2018-08-24 10:24:03 -0600
|
||||
+@@ -77,7 +77,7 @@
|
||||
+ DEPENDS ${${compiler_headers}}
|
||||
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
||||
+ ADD_CUSTOM_COMMAND ( OUTPUT ${flexoutputcxx}
|
||||
+- COMMAND ${FLEX_EXECUTABLE} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
||||
++ COMMAND ${FLEX_EXECUTABLE} ${FLEX_EXTRA_OPTIONS} -o ${flexoutputcxx} "${CMAKE_CURRENT_SOURCE_DIR}/${flexsrc}"
|
||||
+ MAIN_DEPENDENCY ${flexsrc}
|
||||
+ DEPENDS ${${compiler_headers}}
|
||||
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
||||
diff -Naur OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h external_osl/src/include/OSL/llvm_util.h
|
||||
--- OpenShadingLanguage-Release-1.9.9/src/include/OSL/llvm_util.h 2018-05-01 16:39:02 -0600
|
||||
+++ external_osl/src/include/OSL/llvm_util.h 2018-08-25 14:05:00 -0600
|
||||
@@ -48,50 +63,19 @@ 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/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
|
||||
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()));
|
||||
#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)
|
||||
|
||||
# --------------- NetBeans specific.
|
||||
# --------------- NB 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,6 +7,7 @@
|
||||
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")
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "7.0")
|
||||
# Use OpenMP from our precompiled libraries.
|
||||
message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
|
||||
set(OPENMP_CUSTOM ON)
|
||||
@@ -480,8 +480,10 @@ else()
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -mdynamic-no-pic")
|
||||
endif()
|
||||
|
||||
# Clang has too low template depth of 128 for libmv.
|
||||
string(APPEND CMAKE_CXX_FLAGS " -ftemplate-depth=1024")
|
||||
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()
|
||||
|
||||
# Avoid conflicts with Luxrender, and other plug-ins that may use the same
|
||||
# libraries as Blender with a different version or build options.
|
||||
|
@@ -581,6 +581,8 @@ if(WITH_GHOST_WAYLAND)
|
||||
pkg_check_modules(wayland-cursor REQUIRED wayland-cursor)
|
||||
pkg_check_modules(dbus REQUIRED dbus-1)
|
||||
|
||||
set(WITH_GL_EGL ON)
|
||||
|
||||
list(APPEND PLATFORM_LINKLIBS
|
||||
${wayland-client_LINK_LIBRARIES}
|
||||
${wayland-egl_LINK_LIBRARIES}
|
||||
|
@@ -1,11 +1,8 @@
|
||||
Pipeline Config
|
||||
===============
|
||||
|
||||
This configuration file is used by buildbot new build pipeline for the `update-code` step.
|
||||
This configuration file is used by buildbot new pipeline for the `update-code` step.
|
||||
|
||||
It will also be used by the `../utils/make_update.py` script in the near future.
|
||||
It will soon be used by the ../utils/make_update.py script.
|
||||
|
||||
NOTES:
|
||||
* Keep both `yaml` and `json` files in sync until deployment of build pipeline updates.
|
||||
* The `json` file be removed once all branches are running with the `yaml` file.
|
||||
* Expected buildbot pipeline update is *Friday, July 30th* or *Monday August, 2nd*.
|
||||
Both buildbot and developers will eventually use the same configuration file.
|
||||
|
@@ -41,7 +41,7 @@
|
||||
},
|
||||
"cuda11":
|
||||
{
|
||||
"version": "11.4"
|
||||
"version": "11.3"
|
||||
}
|
||||
},
|
||||
"cmake":
|
||||
|
@@ -1,70 +0,0 @@
|
||||
#
|
||||
# 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 visualizations, and scientific visualizations.
|
||||
r'''architectural and industrial visualizatons, and scientific visualizations.
|
||||
|
||||
https://www.blender.org''')
|
||||
|
||||
|
@@ -1047,7 +1047,6 @@ 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),
|
||||
@@ -1114,7 +1113,6 @@ 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),
|
||||
|
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
2
extern/rangetree/intern/generic_alloc_impl.h
vendored
@@ -32,7 +32,7 @@
|
||||
* - #TPOOL_STRUCT: Name for pool struct name.
|
||||
* - #TPOOL_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()
|
||||
|
||||
# NaN debugging
|
||||
if(WITH_CYCLES_DEBUG_NAN)
|
||||
add_definitions(-DWITH_CYCLES_DEBUG_NAN)
|
||||
# Debugging capabilities (debug passes etc).
|
||||
if(WITH_CYCLES_DEBUG)
|
||||
add_definitions(-DWITH_CYCLES_DEBUG)
|
||||
endif()
|
||||
|
||||
if(NOT OPENIMAGEIO_PUGIXML_FOUND)
|
||||
|
@@ -235,12 +235,9 @@ def system_info():
|
||||
|
||||
|
||||
def list_render_passes(scene, srl):
|
||||
crl = srl.cycles
|
||||
|
||||
# Combined pass.
|
||||
# Builtin Blender passes.
|
||||
yield ("Combined", "RGBA", 'COLOR')
|
||||
|
||||
# Data passes.
|
||||
if srl.use_pass_z: yield ("Depth", "Z", 'VALUE')
|
||||
if srl.use_pass_mist: yield ("Mist", "Z", 'VALUE')
|
||||
if srl.use_pass_normal: yield ("Normal", "XYZ", 'VECTOR')
|
||||
@@ -248,8 +245,8 @@ def list_render_passes(scene, srl):
|
||||
if srl.use_pass_uv: yield ("UV", "UVA", 'VECTOR')
|
||||
if srl.use_pass_object_index: yield ("IndexOB", "X", 'VALUE')
|
||||
if srl.use_pass_material_index: yield ("IndexMA", "X", 'VALUE')
|
||||
|
||||
# Light passes.
|
||||
if srl.use_pass_shadow: yield ("Shadow", "RGB", 'COLOR')
|
||||
if srl.use_pass_ambient_occlusion: yield ("AO", "RGB", 'COLOR')
|
||||
if srl.use_pass_diffuse_direct: yield ("DiffDir", "RGB", 'COLOR')
|
||||
if srl.use_pass_diffuse_indirect: yield ("DiffInd", "RGB", 'COLOR')
|
||||
if srl.use_pass_diffuse_color: yield ("DiffCol", "RGB", 'COLOR')
|
||||
@@ -259,16 +256,19 @@ def list_render_passes(scene, srl):
|
||||
if srl.use_pass_transmission_direct: yield ("TransDir", "RGB", 'COLOR')
|
||||
if srl.use_pass_transmission_indirect: yield ("TransInd", "RGB", 'COLOR')
|
||||
if srl.use_pass_transmission_color: yield ("TransCol", "RGB", 'COLOR')
|
||||
if crl.use_pass_volume_direct: yield ("VolumeDir", "RGB", 'COLOR')
|
||||
if crl.use_pass_volume_indirect: yield ("VolumeInd", "RGB", 'COLOR')
|
||||
if srl.use_pass_emit: yield ("Emit", "RGB", 'COLOR')
|
||||
if srl.use_pass_environment: yield ("Env", "RGB", 'COLOR')
|
||||
if srl.use_pass_shadow: yield ("Shadow", "RGB", 'COLOR')
|
||||
if srl.use_pass_ambient_occlusion: yield ("AO", "RGB", 'COLOR')
|
||||
|
||||
# Debug passes.
|
||||
# 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')
|
||||
|
||||
# Cryptomatte passes.
|
||||
crypto_depth = (srl.pass_cryptomatte_depth + 1) // 2
|
||||
|
@@ -263,7 +263,6 @@ 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",
|
||||
@@ -1325,6 +1324,30 @@ 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,6 +936,29 @@ 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"
|
||||
@@ -1113,7 +1136,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:
|
||||
@@ -1128,15 +1151,16 @@ class CYCLES_PT_context_material(CyclesButtonsPanel, Panel):
|
||||
row.operator("object.material_slot_select", text="Select")
|
||||
row.operator("object.material_slot_deselect", text="Deselect")
|
||||
|
||||
row = layout.row()
|
||||
split = layout.split(factor=0.65)
|
||||
|
||||
if ob:
|
||||
row.template_ID(ob, "active_material", new="material.new")
|
||||
split.template_ID(ob, "active_material", new="material.new")
|
||||
row = split.row()
|
||||
|
||||
if slot:
|
||||
icon_link = 'MESH_DATA' if slot.link == 'DATA' else 'OBJECT_DATA'
|
||||
row.prop(slot, "link", text="", icon=icon_link, icon_only=True)
|
||||
|
||||
row.prop(slot, "link", text="")
|
||||
else:
|
||||
row.label()
|
||||
elif mat:
|
||||
split.template_ID(space, "pin_id")
|
||||
split.separator()
|
||||
@@ -2294,6 +2318,7 @@ 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,45 +1055,10 @@ 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 (!mesh_need_motion_attribute(b_ob, scene)) {
|
||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
||||
return;
|
||||
}
|
||||
|
||||
BL::MeshSequenceCacheModifier b_mesh_cache = object_mesh_cache_find(b_ob);
|
||||
|
||||
@@ -1137,9 +1102,8 @@ 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 (!mesh_need_motion_attribute(b_ob, scene)) {
|
||||
if (scene->need_motion() == Scene::MOTION_NONE)
|
||||
return;
|
||||
}
|
||||
|
||||
BL::FluidDomainSettings b_fluid_domain = object_fluid_liquid_domain_find(b_ob);
|
||||
|
||||
|
@@ -1098,6 +1098,14 @@ 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,6 +538,12 @@ 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);
|
||||
@@ -635,6 +641,24 @@ 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,6 +351,9 @@ 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__";
|
||||
@@ -458,19 +461,18 @@ 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 < 101) {
|
||||
if (nvcc_cuda_version < 80) {
|
||||
printf(
|
||||
"Unsupported CUDA version %d.%d detected, "
|
||||
"you need CUDA 10.1 or newer.\n",
|
||||
"you need CUDA 8.0 or newer.\n",
|
||||
nvcc_cuda_version / 10,
|
||||
nvcc_cuda_version % 10);
|
||||
return string();
|
||||
}
|
||||
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)) {
|
||||
else if (!(nvcc_cuda_version == 101 || nvcc_cuda_version == 102)) {
|
||||
printf(
|
||||
"CUDA version %d.%d detected, build may succeed but only "
|
||||
"CUDA 10.1 to 11.4 are officially supported.\n",
|
||||
"CUDA 10.1 and 10.2 are officially supported.\n",
|
||||
nvcc_cuda_version / 10,
|
||||
nvcc_cuda_version % 10);
|
||||
}
|
||||
|
@@ -57,8 +57,8 @@
|
||||
#include "util/util_function.h"
|
||||
#include "util/util_logging.h"
|
||||
#include "util/util_map.h"
|
||||
#include "util/util_opengl.h"
|
||||
#include "util/util_openimagedenoise.h"
|
||||
#include "util/util_opengl.h"
|
||||
#include "util/util_optimization.h"
|
||||
#include "util/util_progress.h"
|
||||
#include "util/util_system.h"
|
||||
|
@@ -233,6 +233,9 @@ 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
|
||||
@@ -366,8 +369,13 @@ 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;
|
||||
@@ -570,7 +578,11 @@ 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,6 +1968,10 @@ 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,16 +380,11 @@ 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") OR
|
||||
(CUDA_VERSION MATCHES "112") OR
|
||||
(CUDA_VERSION MATCHES "113") OR
|
||||
(CUDA_VERSION MATCHES "114"))
|
||||
if((CUDA_VERSION MATCHES "101") OR (CUDA_VERSION MATCHES "102") OR (CUDA_VERSION MATCHES "111"))
|
||||
else()
|
||||
message(WARNING
|
||||
"CUDA version ${CUDA_VERSION_MAJOR}.${CUDA_VERSION_MINOR} detected, "
|
||||
"build may succeed but only CUDA 10.1 to 11.4 are officially supported")
|
||||
"build may succeed but only CUDA 10.1, 10.2 and 11.1 are officially supported")
|
||||
endif()
|
||||
|
||||
# build for each arch
|
||||
@@ -444,6 +439,10 @@ 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
|
||||
@@ -558,6 +557,11 @@ 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,6 +67,8 @@ 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 {
|
||||
@@ -116,6 +118,7 @@ ccl_device_noinline bool BVH_FUNCTION_FULL_NAME(BVH)(KernelGlobals *kg,
|
||||
--stack_ptr;
|
||||
}
|
||||
}
|
||||
BVH_DEBUG_NEXT_NODE();
|
||||
}
|
||||
|
||||
/* if node is leaf, fetch triangle list */
|
||||
@@ -135,6 +138,7 @@ 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 */
|
||||
@@ -147,6 +151,7 @@ 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)) {
|
||||
@@ -164,6 +169,7 @@ 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(
|
||||
@@ -195,6 +201,8 @@ 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,6 +42,33 @@ 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__ */
|
||||
|
@@ -432,9 +432,9 @@ ccl_device void bssrdf_sample(const ShaderClosure *sc, float xi, float *r, float
|
||||
xi *= bssrdf->channels;
|
||||
|
||||
if (xi < 1.0f) {
|
||||
radius = (bssrdf->radius.x > 0.0f) ? bssrdf->radius.x :
|
||||
(bssrdf->radius.y > 0.0f) ? bssrdf->radius.y :
|
||||
bssrdf->radius.z;
|
||||
radius = (bssrdf->radius.x > 0.0f) ?
|
||||
bssrdf->radius.x :
|
||||
(bssrdf->radius.y > 0.0f) ? bssrdf->radius.y : bssrdf->radius.z;
|
||||
}
|
||||
else if (xi < 2.0f) {
|
||||
xi -= 1.0f;
|
||||
|
@@ -52,14 +52,15 @@ typedef struct TileInfo {
|
||||
tile_buffer_6, tile_buffer_7, tile_buffer_8, tile_buffer_9
|
||||
# define ccl_get_tile_buffer(id) \
|
||||
(id == 0 ? tile_buffer_1 : \
|
||||
id == 1 ? tile_buffer_2 : \
|
||||
id == 2 ? tile_buffer_3 : \
|
||||
id == 3 ? tile_buffer_4 : \
|
||||
id == 4 ? tile_buffer_5 : \
|
||||
id == 5 ? tile_buffer_6 : \
|
||||
id == 6 ? tile_buffer_7 : \
|
||||
id == 7 ? tile_buffer_8 : \
|
||||
tile_buffer_9)
|
||||
id == 1 ? \
|
||||
tile_buffer_2 : \
|
||||
id == 2 ? \
|
||||
tile_buffer_3 : \
|
||||
id == 3 ? tile_buffer_4 : \
|
||||
id == 4 ? tile_buffer_5 : \
|
||||
id == 5 ? tile_buffer_6 : \
|
||||
id == 6 ? tile_buffer_7 : \
|
||||
id == 7 ? tile_buffer_8 : tile_buffer_9)
|
||||
#else
|
||||
# ifdef __KERNEL_CUDA__
|
||||
# define CCL_FILTER_TILE_INFO ccl_global TileInfo *tile_info
|
||||
|
@@ -225,6 +225,13 @@ 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,
|
||||
@@ -588,9 +595,7 @@ 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) {
|
||||
@@ -636,9 +641,7 @@ 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();
|
||||
@@ -664,9 +667,7 @@ 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,6 +122,31 @@ 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)
|
||||
@@ -364,6 +389,10 @@ 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,6 +70,15 @@ 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,8 +182,9 @@ CCL_NAMESPACE_BEGIN
|
||||
# undef __SHADER_RAYTRACE__
|
||||
#endif
|
||||
|
||||
#ifdef WITH_CYCLES_DEBUG_NAN
|
||||
# define __KERNEL_DEBUG_NAN__
|
||||
/* Features that enable others */
|
||||
#ifdef WITH_CYCLES_DEBUG
|
||||
# define __KERNEL_DEBUG__
|
||||
#endif
|
||||
|
||||
#if defined(__SUBSURFACE__) || defined(__SHADER_RAYTRACE__)
|
||||
@@ -355,6 +356,12 @@ 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,
|
||||
@@ -458,6 +465,18 @@ 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;
|
||||
@@ -533,6 +552,10 @@ 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 {
|
||||
@@ -648,6 +671,12 @@ 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 */
|
||||
@@ -1236,6 +1265,13 @@ 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;
|
||||
|
@@ -54,18 +54,14 @@ vector4 safe_divide(vector4 a, float b)
|
||||
}
|
||||
|
||||
/*
|
||||
* Original code is under the MIT License, Copyright (c) 2013 Inigo Quilez.
|
||||
*
|
||||
* Smooth Voronoi:
|
||||
*
|
||||
* - https://wiki.blender.org/wiki/User:OmarSquircleArt/GSoC2019/Documentation/Smooth_Voronoi
|
||||
*
|
||||
* Distance To Edge based on:
|
||||
* Distance To Edge:
|
||||
*
|
||||
* - https://www.iquilezles.org/www/articles/voronoilines/voronoilines.htm
|
||||
* - https://www.shadertoy.com/view/ldl3W8
|
||||
* - https://www.shadertoy.com/view/llG3zy
|
||||
*
|
||||
* With optimization to change -2..2 scan window to -1..1 for better performance,
|
||||
* as explained in https://www.shadertoy.com/view/llG3zy.
|
||||
*/
|
||||
|
||||
/* **** 1D Voronoi **** */
|
||||
|
@@ -17,19 +17,14 @@
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/*
|
||||
* Original code is under the MIT License, Copyright (c) 2013 Inigo Quilez.
|
||||
*
|
||||
* Smooth Voronoi:
|
||||
*
|
||||
* - https://wiki.blender.org/wiki/User:OmarSquircleArt/GSoC2019/Documentation/Smooth_Voronoi
|
||||
*
|
||||
* Distance To Edge based on:
|
||||
* Distance To Edge:
|
||||
*
|
||||
* - https://www.iquilezles.org/www/articles/voronoilines/voronoilines.htm
|
||||
* - https://www.shadertoy.com/view/ldl3W8
|
||||
* - https://www.shadertoy.com/view/llG3zy
|
||||
*
|
||||
* With optimization to change -2..2 scan window to -1..1 for better performance,
|
||||
* as explained in https://www.shadertoy.com/view/llG3zy.
|
||||
*/
|
||||
|
||||
/* **** 1D Voronoi **** */
|
||||
|
@@ -20,7 +20,6 @@
|
||||
#include "render/mesh.h"
|
||||
|
||||
#include "util/util_foreach.h"
|
||||
#include "util/util_logging.h"
|
||||
#include "util/util_transform.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
@@ -209,7 +208,6 @@ 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);
|
||||
@@ -254,7 +252,6 @@ 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,6 +322,15 @@ 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_processors);
|
||||
map_free_memory(cached_colorspaces);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@@ -51,6 +51,12 @@ 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);
|
||||
@@ -194,6 +200,15 @@ 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;
|
||||
@@ -555,6 +570,20 @@ 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:
|
||||
|
@@ -356,7 +356,7 @@ class ShaderGraph : public NodeOwner {
|
||||
/* This function is used to create a node of a specified type instead of
|
||||
* calling 'new', and sets the graph as the owner of the node.
|
||||
*/
|
||||
template<typename T, typename... Args> T *create_node(Args &&...args)
|
||||
template<typename T, typename... Args> T *create_node(Args &&... args)
|
||||
{
|
||||
T *node = new T(args...);
|
||||
node->set_owner(this);
|
||||
|
@@ -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)
|
||||
{
|
||||
/* NOTE: cycles float3 type is actually 4 floats! need to use an explicit array. */
|
||||
/* NB: 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) {
|
||||
|
@@ -299,7 +299,7 @@ class Scene : public NodeOwner {
|
||||
* node array (e.g. Scene::geometry for Geometry nodes) and tag the appropriate
|
||||
* manager for an update.
|
||||
*/
|
||||
template<typename T, typename... Args> T *create_node(Args &&...args)
|
||||
template<typename T, typename... Args> T *create_node(Args &&... args)
|
||||
{
|
||||
T *node = new T(args...);
|
||||
node->set_owner(this);
|
||||
|
@@ -57,7 +57,7 @@ struct avxb {
|
||||
: m256(_mm256_insertf128_ps(_mm256_castps128_ps256(a), b, 1))
|
||||
{
|
||||
}
|
||||
__forceinline operator const __m256 &(void) const
|
||||
__forceinline operator const __m256 &(void)const
|
||||
{
|
||||
return m256;
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ struct avxi {
|
||||
__forceinline avxi(const __m256i a) : m256(a)
|
||||
{
|
||||
}
|
||||
__forceinline operator const __m256i &(void) const
|
||||
__forceinline operator const __m256i &(void)const
|
||||
{
|
||||
return m256;
|
||||
}
|
||||
|
@@ -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,8 +36,10 @@ static bool is_verbosity_set()
|
||||
return false;
|
||||
}
|
||||
return verbosity != "0";
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
void util_logging_init(const char *argv0)
|
||||
{
|
||||
|
@@ -40,7 +40,7 @@ class LogMessageVoidify {
|
||||
LogMessageVoidify()
|
||||
{
|
||||
}
|
||||
void operator&(const StubStream &)
|
||||
void operator&(StubStream &)
|
||||
{
|
||||
}
|
||||
};
|
||||
@@ -49,36 +49,6 @@ 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 = (float)q;
|
||||
float qf = 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 = (float)q;
|
||||
float qf = 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 = (float)q;
|
||||
float qf = 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 = (float)q;
|
||||
float qf = 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 (float)((int)(bits >> 23) - 127);
|
||||
return (int)(bits >> 23) - 127;
|
||||
}
|
||||
|
||||
ccl_device float fast_exp2f(float x)
|
||||
|
@@ -57,7 +57,7 @@ struct sseb {
|
||||
__forceinline sseb(const __m128 input) : m128(input)
|
||||
{
|
||||
}
|
||||
__forceinline operator const __m128 &(void) const
|
||||
__forceinline operator const __m128 &(void)const
|
||||
{
|
||||
return m128;
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ struct ssei {
|
||||
__forceinline ssei(const __m128i a) : m128(a)
|
||||
{
|
||||
}
|
||||
__forceinline operator const __m128i &(void) const
|
||||
__forceinline operator const __m128i &(void)const
|
||||
{
|
||||
return m128;
|
||||
}
|
||||
|
@@ -188,8 +188,8 @@ extern GHOST_WindowHandle GHOST_CreateWindow(GHOST_SystemHandle systemhandle,
|
||||
GHOST_GLSettings glSettings);
|
||||
|
||||
/**
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 client rectangle coordinates to screen coordinates.
|
||||
* Converts a point in screen coordinates to client rectangle 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 off-screen context (windowless) with the system's
|
||||
* #GHOST_ISystem::createOffscreenContext method.
|
||||
* You can create a offscreen 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 off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 client rectangle coordinates to screen coordinates.
|
||||
* Converts a point in screen coordinates to client rectangle 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 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).
|
||||
* 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).
|
||||
*
|
||||
* This enum defines the possible graphics bindings to attempt to enable.
|
||||
*/
|
||||
@@ -683,10 +683,6 @@ 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,8 +250,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
||||
static const bool needAlpha = false;
|
||||
#endif
|
||||
|
||||
/* Command-line argument would be better. */
|
||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL");
|
||||
static bool softwareGL = getenv("BLENDER_SOFTWAREGL"); // command-line argument would be better
|
||||
|
||||
std::vector<NSOpenGLPixelFormatAttribute> attribs;
|
||||
attribs.reserve(40);
|
||||
@@ -288,7 +287,7 @@ GHOST_TSuccess GHOST_ContextCGL::initializeDrawingContext()
|
||||
|
||||
if (m_metalView) {
|
||||
if (m_defaultFramebuffer == 0) {
|
||||
/* Create a virtual frame-buffer. */
|
||||
// Create a virtual framebuffer
|
||||
[m_openGLContext makeCurrentContext];
|
||||
metalInitFramebuffer();
|
||||
initClearGL();
|
||||
@@ -343,11 +342,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;
|
||||
|
||||
@@ -388,7 +387,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"];
|
||||
@@ -461,7 +460,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,
|
||||
@@ -486,7 +485,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);
|
||||
|
||||
@@ -402,9 +402,7 @@ GHOST_TSuccess GHOST_ContextEGL::initializeDrawingContext()
|
||||
if (!EGL_CHK(::eglInitialize(m_display, &egl_major, &egl_minor)))
|
||||
goto error;
|
||||
|
||||
#ifdef WITH_GHOST_DEBUG
|
||||
fprintf(stderr, "EGL Version %d.%d\n", egl_major, egl_minor);
|
||||
#endif
|
||||
|
||||
if (!EGL_CHK(::eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)))
|
||||
goto error;
|
||||
@@ -412,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);
|
||||
@@ -471,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);
|
||||
}
|
||||
@@ -481,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) {
|
||||
|
@@ -32,7 +32,7 @@
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
|
||||
/* Needed for Intel drivers (works with MESA-software-rasterizer (`swrast`) & NVIDIA). */
|
||||
/* needed for intel drivers (works w/ mesa-swrast & nvidia) */
|
||||
#define USE_GLXEW_INIT_WORKAROUND
|
||||
|
||||
#ifdef USE_GLXEW_INIT_WORKAROUND
|
||||
@@ -239,7 +239,7 @@ GHOST_TSuccess GHOST_ContextGLX::initializeDrawingContext()
|
||||
}
|
||||
attribs[i++] = 0;
|
||||
|
||||
/* Some drivers don't like having a true off-screen context.
|
||||
/* Some drivers don't like having a true offscreen 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,11 +335,10 @@ 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 technically WGLEW, but they also require a context to work. */
|
||||
// the following are not technially WGLEW, but they also require a context to work
|
||||
|
||||
#ifndef NDEBUG
|
||||
free((void *)m_dummyRenderer);
|
||||
@@ -475,15 +474,16 @@ int GHOST_ContextWGL::choose_pixel_format(bool stereoVisual, bool needAlpha)
|
||||
PIXELFORMATDESCRIPTOR preferredPFD = {
|
||||
sizeof(PIXELFORMATDESCRIPTOR), /* size */
|
||||
1, /* version */
|
||||
(DWORD)(PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW |
|
||||
PFD_DOUBLEBUFFER | /* support double-buffering */
|
||||
(stereoVisual ? PFD_STEREO : 0) | /* support stereo */
|
||||
(
|
||||
(DWORD)(
|
||||
PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW |
|
||||
PFD_DOUBLEBUFFER | /* support double-buffering */
|
||||
(stereoVisual ? PFD_STEREO : 0) | /* support stereo */
|
||||
(
|
||||
#ifdef WIN32_COMPOSITING
|
||||
/* Support composition for transparent background. */
|
||||
needAlpha ? PFD_SUPPORT_COMPOSITION :
|
||||
needAlpha ?
|
||||
PFD_SUPPORT_COMPOSITION : /* support composition for transparent background */
|
||||
#endif
|
||||
0)),
|
||||
0)),
|
||||
PFD_TYPE_RGBA, /* color type */
|
||||
(BYTE)(needAlpha ? 32 : 24), /* preferred color depth */
|
||||
0,
|
||||
|
@@ -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,10 +115,8 @@ GHOST_DropTargetX11::~GHOST_DropTargetX11()
|
||||
/* Based on: https://stackoverflow.com/a/2766963/432509 */
|
||||
|
||||
typedef enum DecodeState_e {
|
||||
/** Searching for an ampersand to convert. */
|
||||
STATE_SEARCH = 0,
|
||||
/** Convert the two proceeding characters from hex. */
|
||||
STATE_CONVERTING
|
||||
STATE_SEARCH = 0, ///< searching for an ampersand to convert
|
||||
STATE_CONVERTING ///< convert the two proceeding characters from hex
|
||||
} 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,8 +60,6 @@ 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 preferences. */
|
||||
// scale axis values here to normalize them to around +/- 1
|
||||
// they are scaled again for overall sensitivity in the WM based on user prefs
|
||||
|
||||
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;
|
||||
/* Previous motion time will be ancient, so just make up a reasonable time delta. */
|
||||
// prev 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,22 +479,20 @@ 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. */
|
||||
break;
|
||||
default:; // will always be one of the above
|
||||
}
|
||||
|
||||
#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,53 +107,40 @@ 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/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.
|
||||
*/
|
||||
// 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
|
||||
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:
|
||||
@@ -170,12 +157,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 off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 off-screen context.
|
||||
* Create a new offscreen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
@@ -1587,7 +1587,7 @@ GHOST_TSuccess GHOST_SystemCocoa::handleMouseEvent(void *eventPtr)
|
||||
{
|
||||
NSTimeInterval timestamp = [event timestamp];
|
||||
if (timestamp < m_last_warp_timestamp) {
|
||||
/* After warping we can still receive older unwrapped mouse events,
|
||||
/* After warping we can still receive older unwarped mouse events,
|
||||
* ignore those. */
|
||||
break;
|
||||
}
|
||||
|
@@ -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,10 +315,7 @@ 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));
|
||||
/* Can be NULL on close window. */
|
||||
#if 0
|
||||
assert(window != NULL);
|
||||
#endif
|
||||
// assert(window != NULL); // can be NULL on close window.
|
||||
|
||||
switch (sdl_sub_evt.event) {
|
||||
case SDL_WINDOWEVENT_EXPOSED:
|
||||
@@ -379,14 +376,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 */
|
||||
@@ -662,8 +659,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;
|
||||
|
||||
@@ -682,7 +679,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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -710,10 +707,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 off-screen context.
|
||||
* Create a new offscreen 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 off-screen DirectX 11 context.
|
||||
* Create a new offscreen DirectX 11 context.
|
||||
* Never explicitly delete the window, use #disposeContext() instead.
|
||||
* \return The new context (or 0 if creation failed).
|
||||
*/
|
||||
@@ -2111,9 +2111,10 @@ GHOST_TSuccess GHOST_SystemWin32::showMessageBox(const char *title,
|
||||
config.cbSize = sizeof(config);
|
||||
config.hInstance = 0;
|
||||
config.dwCommonButtons = 0;
|
||||
config.pszMainIcon = (dialog_options & GHOST_DialogError ? TD_ERROR_ICON :
|
||||
dialog_options & GHOST_DialogWarning ? TD_WARNING_ICON :
|
||||
TD_INFORMATION_ICON);
|
||||
config.pszMainIcon = (dialog_options & GHOST_DialogError ?
|
||||
TD_ERROR_ICON :
|
||||
dialog_options & GHOST_DialogWarning ? TD_WARNING_ICON :
|
||||
TD_INFORMATION_ICON);
|
||||
config.pszWindowTitle = L"Blender";
|
||||
config.pszMainInstruction = title_16;
|
||||
config.pszContent = message_16;
|
||||
|
@@ -138,8 +138,8 @@ class GHOST_SystemWin32 : public GHOST_System {
|
||||
const GHOST_IWindow *parentWindow = 0);
|
||||
|
||||
/**
|
||||
* Create a new off-screen context.
|
||||
* Never explicitly delete the window, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 off-screen DirectX context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 fall-backs. */
|
||||
// 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
|
||||
|
||||
const bool debug_context = (glSettings.flags & GHOST_glDebugContext) != 0;
|
||||
|
||||
@@ -1189,9 +1189,9 @@ void GHOST_SystemX11::processEvent(XEvent *xe)
|
||||
else {
|
||||
printf("Bad keycode lookup. Keysym 0x%x Status: %s\n",
|
||||
(unsigned int)key_sym,
|
||||
(status == XLookupNone ? "XLookupNone" :
|
||||
status == XLookupKeySym ? "XLookupKeySym" :
|
||||
"Unknown status"));
|
||||
(status == XLookupNone ?
|
||||
"XLookupNone" :
|
||||
status == XLookupKeySym ? "XLookupKeySym" : "Unknown status"));
|
||||
|
||||
printf("'%.*s' %p %p\n", len, utf8_buf, xic, m_xim);
|
||||
}
|
||||
@@ -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 off-screen context.
|
||||
* Never explicitly delete the context, use #disposeContext() instead.
|
||||
* Create a new offscreen 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 client rectangle coordinates to screen coordinates.
|
||||
* Converts a point in screen coordinates to client rectangle 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 client rectangle coordinates to screen coordinates.
|
||||
* 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.
|
||||
@@ -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 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.
|
||||
* \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.
|
||||
*/
|
||||
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 client rectangle coordinates to screen coordinates.
|
||||
* Converts a point in screen coordinates to client rectangle 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_STAGE;
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
|
||||
#if 0
|
||||
/* TODO
|
||||
*
|
||||
@@ -144,47 +144,8 @@ static void create_reference_spaces(OpenXRSessionData &oxr, const GHOST_XrPose &
|
||||
(void)base_pose;
|
||||
#endif
|
||||
|
||||
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.");
|
||||
}
|
||||
}
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.reference_space),
|
||||
"Failed to create reference space.");
|
||||
|
||||
create_info.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_VIEW;
|
||||
CHECK_XR(xrCreateReferenceSpace(oxr.session, &create_info, &oxr.view_space),
|
||||
@@ -409,7 +370,6 @@ 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();
|
||||
@@ -420,8 +380,6 @@ 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;
|
||||
@@ -471,7 +429,6 @@ XrCompositionLayerProjection GHOST_XrSession::drawLayer(
|
||||
r_proj_layer_views[view_idx],
|
||||
view_location,
|
||||
m_oxr->views[view_idx],
|
||||
view_idx,
|
||||
draw_customdata);
|
||||
}
|
||||
|
||||
|
@@ -117,7 +117,6 @@ 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" "${INC}" "${INC_SYS}" "")
|
||||
blender_add_lib(libmv_test_dataset "./libmv/multiview/test_data_sets.cc" "" "" "")
|
||||
|
||||
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")
|
||||
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")
|
||||
endif()
|
||||
else()
|
||||
list(APPEND SRC
|
||||
|
@@ -62,8 +62,8 @@ template<typename _Tp> struct MEM_Allocator {
|
||||
return &__x;
|
||||
}
|
||||
|
||||
/* NOTE: `__n` is permitted to be 0.
|
||||
* The C++ standard says nothing about what the return value is when `__n == 0`. */
|
||||
// NB: __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;
|
||||
|
@@ -299,9 +299,9 @@ template<class T> class MEM_CacheLimiter {
|
||||
if (!can_destroy_element(elem))
|
||||
continue;
|
||||
|
||||
/* By default 0 means highest priority element. */
|
||||
/* Casting a size type to int is questionable,
|
||||
* but unlikely to cause problems. */
|
||||
/* by default 0 means highest priority element */
|
||||
/* casting a size type to int is questionable,
|
||||
but unlikely to cause problems */
|
||||
int priority = -((int)(queue.size()) - i - 1);
|
||||
priority = item_priority_func(elem->get()->get_data(), priority);
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user