Compare commits
25 Commits
temp-multi
...
blender2.8
Author | SHA1 | Date | |
---|---|---|---|
92f4bf8c09 | |||
de37fb0991 | |||
262bef5ec8 | |||
1e4fb83f61 | |||
a61ade5283 | |||
c84d95d5a9 | |||
f17e7a3474 | |||
4f65ba19c1 | |||
3e4c78e7ba | |||
c02e764722 | |||
f708cad6b2 | |||
416b7036e1 | |||
a2c8bc4113 | |||
9b6778271e | |||
26f8d7690f | |||
0ffe51bbdb | |||
1c06064bfb | |||
fe16270fe5 | |||
0616bb5d32 | |||
ff5e24b808 | |||
8daefb5eaf | |||
e933ab0a99 | |||
db808ab36e | |||
68b920d6a1 | |||
2697fa9fec |
@@ -66,12 +66,21 @@ endif()
|
||||
# set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
|
||||
|
||||
# global compile definitions since add_definitions() adds for all.
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
|
||||
$<$<CONFIG:Debug>:DEBUG;_DEBUG>
|
||||
$<$<CONFIG:Release>:NDEBUG>
|
||||
$<$<CONFIG:MinSizeRel>:NDEBUG>
|
||||
$<$<CONFIG:RelWithDebInfo>:NDEBUG>
|
||||
)
|
||||
|
||||
if(NOT (${CMAKE_VERSION} VERSION_LESS 3.0))
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS
|
||||
$<$<CONFIG:Debug>:DEBUG;_DEBUG>
|
||||
$<$<CONFIG:Release>:NDEBUG>
|
||||
$<$<CONFIG:MinSizeRel>:NDEBUG>
|
||||
$<$<CONFIG:RelWithDebInfo>:NDEBUG>
|
||||
)
|
||||
else()
|
||||
# keep until CMake-3.0 is min requirement
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG _DEBUG)
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE NDEBUG)
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL NDEBUG)
|
||||
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO NDEBUG)
|
||||
endif()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
# Set policy
|
||||
@@ -310,6 +319,7 @@ option(WITH_IMAGE_TIFF "Enable LibTIFF Support" ON)
|
||||
option(WITH_IMAGE_DDS "Enable DDS Image Support" ON)
|
||||
option(WITH_IMAGE_CINEON "Enable CINEON and DPX Image Support" ON)
|
||||
option(WITH_IMAGE_HDR "Enable HDR Image Support" ON)
|
||||
option(WITH_IMAGE_FRAMESERVER "Enable image FrameServer Support for rendering" ON)
|
||||
|
||||
# Audio/Video format support
|
||||
option(WITH_CODEC_AVI "Enable Blenders own AVI file support (raw/jpeg)" ON)
|
||||
@@ -511,45 +521,6 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
||||
mark_as_advanced(WITH_LINKER_GOLD)
|
||||
endif()
|
||||
|
||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
option(WITH_COMPILER_ASAN "Build and link against address sanitizer (only for Debug & RelWithDebInfo targets)." OFF)
|
||||
mark_as_advanced(WITH_COMPILER_ASAN)
|
||||
|
||||
if(WITH_COMPILER_ASAN)
|
||||
set(_asan_defaults "\
|
||||
-fsanitize=address \
|
||||
-fsanitize=bool \
|
||||
-fsanitize=bounds \
|
||||
-fsanitize=enum \
|
||||
-fsanitize=float-cast-overflow \
|
||||
-fsanitize=float-divide-by-zero \
|
||||
-fsanitize=leak \
|
||||
-fsanitize=nonnull-attribute \
|
||||
-fsanitize=object-size \
|
||||
-fsanitize=returns-nonnull-attribute \
|
||||
-fsanitize=signed-integer-overflow \
|
||||
-fsanitize=undefined \
|
||||
-fsanitize=vla-bound \
|
||||
-fno-sanitize=alignment \
|
||||
")
|
||||
|
||||
set(COMPILER_ASAN_CFLAGS "${_asan_defaults}" CACHE STRING "C flags for address sanitizer")
|
||||
mark_as_advanced(COMPILER_ASAN_CFLAGS)
|
||||
set(COMPILER_ASAN_CXXFLAGS "${_asan_defaults}" CACHE STRING "C++ flags for address sanitizer")
|
||||
mark_as_advanced(COMPILER_ASAN_CXXFLAGS)
|
||||
|
||||
unset(_asan_defaults)
|
||||
|
||||
find_library(COMPILER_ASAN_LIBRARY asan ${CMAKE_C_IMPLICIT_LINK_DIRECTORIES})
|
||||
mark_as_advanced(COMPILER_ASAN_LIBRARY)
|
||||
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Dependency graph
|
||||
option(WITH_LEGACY_DEPSGRAPH "Build Blender with legacy dependency graph" ON)
|
||||
mark_as_advanced(WITH_LEGACY_DEPSGRAPH)
|
||||
|
||||
if(WIN32)
|
||||
# Use hardcoded paths or find_package to find externals
|
||||
option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF)
|
||||
@@ -810,15 +781,6 @@ set(PLATFORM_LINKLIBS "")
|
||||
set(PLATFORM_LINKFLAGS "")
|
||||
set(PLATFORM_LINKFLAGS_DEBUG "")
|
||||
|
||||
if(WITH_COMPILER_ASAN)
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${COMPILER_ASAN_CFLAGS}")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CFLAGS}")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${COMPILER_ASAN_CXXFLAGS}")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${COMPILER_ASAN_CXXFLAGS}")
|
||||
|
||||
set(PLATFORM_LINKFLAGS_DEBUG "${COMPILER_ASAN_LIBRARY}")
|
||||
endif()
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
#Platform specifics
|
||||
@@ -1548,12 +1510,7 @@ else()
|
||||
endif()
|
||||
|
||||
# Visual Studio has all standards it supports available by default
|
||||
# Clang on windows copies this behavior and does not support these switches
|
||||
if(
|
||||
CMAKE_COMPILER_IS_GNUCC OR
|
||||
(CMAKE_C_COMPILER_ID MATCHES "Clang" AND (NOT MSVC)) OR
|
||||
(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||
)
|
||||
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang" OR CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||
# Use C99 + GNU extensions, works with GCC, Clang, ICC
|
||||
if(WITH_C11)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")
|
||||
|
@@ -103,7 +103,6 @@ ExternalProject_Add(external_ffmpeg
|
||||
--disable-indev=jack
|
||||
--disable-indev=alsa
|
||||
--disable-outdev=alsa
|
||||
--disable-crystalhd
|
||||
PATCH_COMMAND ${PATCH_CMD} --verbose -p 0 -N -d ${BUILD_DIR}/ffmpeg/src/external_ffmpeg < ${PATCH_DIR}/ffmpeg.diff
|
||||
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make -j${MAKE_THREADS}
|
||||
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make install
|
||||
|
@@ -13,25 +13,3 @@
|
||||
-# pragma message("Unknown compiler version - please run the configure tests and report the results")
|
||||
-# endif
|
||||
-#endif
|
||||
--- a/boost/type_traits/has_nothrow_assign.hpp 2015-12-13 05:49:42 -0700
|
||||
+++ b/boost/type_traits/has_nothrow_assign.hpp 2018-05-27 11:11:02 -0600
|
||||
@@ -24,7 +24,7 @@
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#endif
|
||||
#endif
|
||||
-#if defined(__GNUC__) || defined(__SUNPRO_CC)
|
||||
+#if defined(__GNUC__) || defined(__SUNPRO_CC) || defined(__clang__)
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/is_volatile.hpp>
|
||||
#include <boost/type_traits/is_assignable.hpp>
|
||||
--- a/boost/type_traits/has_nothrow_constructor.hpp 2015-12-13 05:49:42 -0700
|
||||
+++ b/boost/type_traits/has_nothrow_constructor.hpp 2018-05-27 11:11:02 -0600
|
||||
@@ -17,7 +17,7 @@
|
||||
#if defined(BOOST_MSVC) || defined(BOOST_INTEL)
|
||||
#include <boost/type_traits/has_trivial_constructor.hpp>
|
||||
#endif
|
||||
-#if defined(__GNUC__ ) || defined(__SUNPRO_CC)
|
||||
+#if defined(__GNUC__ ) || defined(__SUNPRO_CC) || defined(__clang__)
|
||||
#include <boost/type_traits/is_default_constructible.hpp>
|
||||
#endif
|
||||
|
||||
|
@@ -10,29 +10,3 @@ diff -Naur osl/src/external_osl/src/cmake/flexbison.cmake osl_bak/src/external_o
|
||||
MAIN_DEPENDENCY ${flexsrc}
|
||||
DEPENDS ${${compiler_headers}}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} )
|
||||
--- a/src/include/OSL/oslconfig.h 2016-10-31 16:48:19 -0600
|
||||
+++ b/src/include/OSL/oslconfig.h 2018-05-27 11:18:08 -0600
|
||||
@@ -44,12 +44,18 @@
|
||||
// same if another packages is compiling against OSL and using these headers
|
||||
// (OSL may be C++11 but the client package may be older, or vice versa --
|
||||
// use these two symbols to differentiate these cases, when important).
|
||||
-#if (__cplusplus >= 201402L)
|
||||
-# define OSL_CPLUSPLUS_VERSION 14
|
||||
-#elif (__cplusplus >= 201103L)
|
||||
-# define OSL_CPLUSPLUS_VERSION 11
|
||||
+
|
||||
+// Force C++03 for MSVC in blender since svn the libraries are build with that
|
||||
+#if !defined(_MSC_VER)
|
||||
+ #if (__cplusplus >= 201402L)
|
||||
+ # define OSL_CPLUSPLUS_VERSION 14
|
||||
+ #elif (__cplusplus >= 201103L)
|
||||
+ # define OSL_CPLUSPLUS_VERSION 11
|
||||
+ #else
|
||||
+ # define OSL_CPLUSPLUS_VERSION 3 /* presume C++03 */
|
||||
+ #endif
|
||||
#else
|
||||
-# define OSL_CPLUSPLUS_VERSION 3 /* presume C++03 */
|
||||
+ # define OSL_CPLUSPLUS_VERSION 3 /* presume C++03 */
|
||||
#endif
|
||||
|
||||
// Symbol export defines
|
||||
|
@@ -23,6 +23,7 @@ set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IK_ITASC ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_CINEON ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_DDS ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_FRAMESERVER ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||
|
@@ -28,6 +28,7 @@ set(WITH_IK_SOLVER OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IK_ITASC OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_CINEON OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_DDS OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_FRAMESERVER OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_HDR OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENEXR OFF CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENJPEG OFF CACHE BOOL "" FORCE)
|
||||
|
@@ -23,6 +23,7 @@ set(WITH_IK_SOLVER ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IK_ITASC ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_CINEON ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_DDS ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_FRAMESERVER ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_HDR ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENEXR ON CACHE BOOL "" FORCE)
|
||||
set(WITH_IMAGE_OPENJPEG ON CACHE BOOL "" FORCE)
|
||||
|
@@ -581,7 +581,6 @@ function(SETUP_BLENDER_SORTED_LIBS)
|
||||
bf_editor_space_outliner
|
||||
bf_editor_space_script
|
||||
bf_editor_space_sequencer
|
||||
bf_editor_space_statusbar
|
||||
bf_editor_space_text
|
||||
bf_editor_space_time
|
||||
bf_editor_space_topbar
|
||||
|
@@ -358,7 +358,7 @@ if(WITH_LLVM)
|
||||
execute_process(COMMAND ${LLVM_CONFIG} --libfiles
|
||||
OUTPUT_VARIABLE LLVM_LIBRARY
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REPLACE ".a /" ".a;/" LLVM_LIBRARY ${LLVM_LIBRARY})
|
||||
string(REPLACE " " ";" LLVM_LIBRARY ${LLVM_LIBRARY})
|
||||
else()
|
||||
set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -lLLVM-3.4")
|
||||
endif()
|
||||
@@ -418,7 +418,7 @@ if(${XCODE_VERSION} VERSION_EQUAL 5 OR ${XCODE_VERSION} VERSION_GREATER 5)
|
||||
endif()
|
||||
# Get rid of eventually clashes, we export some symbols explicite as local
|
||||
set(PLATFORM_LINKFLAGS
|
||||
"${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker '${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map'"
|
||||
"${PLATFORM_LINKFLAGS} -Xlinker -unexported_symbols_list -Xlinker ${CMAKE_SOURCE_DIR}/source/creator/osx_locals.map"
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||
|
@@ -29,15 +29,7 @@ if(NOT MSVC)
|
||||
message(FATAL_ERROR "Compiler is unsupported")
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
set(MSVC_CLANG On)
|
||||
set(MSVC_REDIST_DIR $ENV{VCToolsRedistDir})
|
||||
if (DEFINED MSVC_REDIST_DIR)
|
||||
file(TO_CMAKE_PATH ${MSVC_REDIST_DIR} MSVC_REDIST_DIR)
|
||||
else()
|
||||
message("Unable to detect the Visual Studio redist directory, copying of the runtime dlls will not work, try running from the visual studio developer prompt.")
|
||||
endif()
|
||||
endif()
|
||||
# Libraries configuration for Windows when compiling with MSVC.
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_FOLDERS})
|
||||
|
||||
@@ -127,18 +119,8 @@ set(CMAKE_INSTALL_OPENMP_LIBRARIES ${WITH_OPENMP})
|
||||
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
|
||||
include(InstallRequiredSystemLibraries)
|
||||
|
||||
remove_cc_flag("/MDd" "/MD")
|
||||
|
||||
if(MSVC_CLANG) # Clangs version of cl doesn't support all flags
|
||||
if(NOT WITH_CXX11) # C++11 is on by default in clang-cl and can't be turned off, if c++11 is not enabled in blender repress some c++11 related warnings.
|
||||
set(CXX_WARN_FLAGS "-Wno-inconsistent-missing-override")
|
||||
endif()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_WARN_FLAGS} /nologo /J /Gd /EHsc -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference ")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd -Wno-unused-command-line-argument -Wno-microsoft-enum-forward-reference")
|
||||
else()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
|
||||
endif()
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /nologo /J /Gd /MP /EHsc")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /nologo /J /Gd /MP")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
|
||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
|
||||
|
@@ -1,17 +0,0 @@
|
||||
echo No explicit msvc version requested, autodetecting version.
|
||||
|
||||
call "%~dp0\detect_msvc2013.cmd"
|
||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||
|
||||
call "%~dp0\detect_msvc2015.cmd"
|
||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||
|
||||
call "%~dp0\detect_msvc2017.cmd"
|
||||
if %ERRORLEVEL% EQU 0 goto DetectionComplete
|
||||
|
||||
echo Compiler Detection failed. Use verbose switch for more information.
|
||||
exit /b 1
|
||||
|
||||
:DetectionComplete
|
||||
echo Compiler Detection successfull, detected VS%BUILD_VS_YEAR%
|
||||
exit /b 0
|
@@ -1,26 +0,0 @@
|
||||
if "%NOBUILD%"=="1" goto EOF
|
||||
echo %TIME% > %BUILD_DIR%\buildtime.txt
|
||||
msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:build ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/maxcpucount:2 ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% ^
|
||||
/flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log
|
||||
if errorlevel 1 (
|
||||
echo Error during build, see %BUILD_DIR%\Build.log for details
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
msbuild ^
|
||||
%BUILD_DIR%\INSTALL.vcxproj ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM%
|
||||
if errorlevel 1 (
|
||||
echo Error during install phase
|
||||
exit /b 1
|
||||
)
|
||||
echo %TIME% >> %BUILD_DIR%\buildtime.txt
|
||||
:EOF
|
@@ -1,16 +0,0 @@
|
||||
if "%NOBUILD%"=="1" goto EOF
|
||||
set HAS_ERROR=
|
||||
cd %BUILD_DIR%
|
||||
echo %TIME% > buildtime.txt
|
||||
ninja install
|
||||
if errorlevel 1 (
|
||||
set HAS_ERROR=1
|
||||
)
|
||||
echo %TIME% >>buildtime.txt
|
||||
cd %BLENDER_DIR%
|
||||
|
||||
if "%HAS_ERROR%" == "1" (
|
||||
echo Error during build
|
||||
exit /b 1
|
||||
)
|
||||
:EOF
|
@@ -1,54 +0,0 @@
|
||||
if "%BUILD_VS_YEAR%"=="2013" set BUILD_VS_LIBDIRPOST=vc12
|
||||
if "%BUILD_VS_YEAR%"=="2015" set BUILD_VS_LIBDIRPOST=vc14
|
||||
if "%BUILD_VS_YEAR%"=="2017" set BUILD_VS_LIBDIRPOST=vc14
|
||||
|
||||
if "%BUILD_ARCH%"=="x64" (
|
||||
set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set BUILD_VS_SVNDIR=windows_%BUILD_VS_LIBDIRPOST%
|
||||
)
|
||||
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Library Directory = "%BUILD_VS_LIBDIR%"
|
||||
)
|
||||
if NOT EXIST %BUILD_VS_LIBDIR% (
|
||||
rem libs not found, but svn is on the system
|
||||
echo
|
||||
if not "%SVN%"=="" (
|
||||
echo.
|
||||
echo The required external libraries in %BUILD_VS_LIBDIR% are missing
|
||||
echo.
|
||||
set /p GetLibs= "Would you like to download them? (y/n)"
|
||||
if /I "!GetLibs!"=="Y" (
|
||||
echo.
|
||||
echo Downloading %BUILD_VS_SVNDIR% libraries, please wait.
|
||||
echo.
|
||||
:RETRY
|
||||
"%SVN%" checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/%BUILD_VS_SVNDIR% %BUILD_VS_LIBDIR%
|
||||
if errorlevel 1 (
|
||||
set /p LibRetry= "Error during donwload, retry? y/n"
|
||||
if /I "!LibRetry!"=="Y" (
|
||||
cd %BUILD_VS_LIBDIR%
|
||||
"%SVN%" cleanup
|
||||
cd %BLENDER_DIR%
|
||||
goto RETRY
|
||||
)
|
||||
echo.
|
||||
echo Error: Download of external libraries failed.
|
||||
echo This is needed for building, please manually run 'svn cleanup' and 'svn update' in
|
||||
echo %BUILD_VS_LIBDIR% , until this is resolved you CANNOT make a successfull blender build
|
||||
echo.
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_VS_LIBDIR% (
|
||||
echo.
|
||||
echo Error: Required libraries not found at "%BUILD_VS_LIBDIR%"
|
||||
echo This is needed for building, aborting!
|
||||
echo.
|
||||
exit /b 1
|
||||
)
|
@@ -1,6 +0,0 @@
|
||||
set BLENDER_DIR_NOSPACES=%BLENDER_DIR: =%
|
||||
|
||||
if not "%BLENDER_DIR%"=="%BLENDER_DIR_NOSPACES%" (
|
||||
echo There are spaces detected in the build path "%BLENDER_DIR%", this is currently not supported, exiting....
|
||||
exit /b 1
|
||||
)
|
@@ -1,20 +0,0 @@
|
||||
if NOT exist "%BLENDER_DIR%/source/tools" (
|
||||
echo Checking out sub-modules
|
||||
if not "%GIT%" == "" (
|
||||
"%GIT%" submodule update --init --recursive --progress
|
||||
if errorlevel 1 goto FAIL
|
||||
"%GIT%" submodule foreach git checkout master
|
||||
if errorlevel 1 goto FAIL
|
||||
"%GIT%" submodule foreach git pull --rebase origin master
|
||||
if errorlevel 1 goto FAIL
|
||||
goto EOF
|
||||
) else (
|
||||
echo Blender submodules not found, and git not found in path to retrieve them.
|
||||
goto FAIL
|
||||
)
|
||||
)
|
||||
goto EOF
|
||||
|
||||
:FAIL
|
||||
exit /b 1
|
||||
:EOF
|
@@ -1,67 +0,0 @@
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%WINDOWS_ARCH%" %TESTS_CMAKE_ARGS%
|
||||
|
||||
if "%BUILD_ARCH%"=="x64" (
|
||||
set MSBUILD_PLATFORM=x64
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set MSBUILD_PLATFORM=win32
|
||||
if "%WITH_CLANG%"=="1" (
|
||||
echo Clang not supported for X86
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
if "%WITH_CLANG%"=="1" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -T"LLVM-vs2017"
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_DIR%\nul (
|
||||
mkdir %BUILD_DIR%
|
||||
)
|
||||
|
||||
if "%MUST_CLEAN%"=="1" (
|
||||
echo Cleaning %BUILD_DIR%
|
||||
msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:clean ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM%
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
|
||||
if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
|
||||
|
||||
if "%MUST_CONFIGURE%"=="1" (
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo %CMAKE% %BUILD_CMAKE_ARGS% -H%BLENDER_DIR% -B%BUILD_DIR%
|
||||
)
|
||||
|
||||
cmake ^
|
||||
%BUILD_CMAKE_ARGS% ^
|
||||
-H%BLENDER_DIR% ^
|
||||
-B%BUILD_DIR%
|
||||
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo "Configuration Failed"
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
echo call "%VCVARS%" %BUILD_ARCH% > %BUILD_DIR%\rebuild.cmd
|
||||
echo "%CMAKE%" . >> %BUILD_DIR%\rebuild.cmd
|
||||
echo echo %%TIME%% ^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd
|
||||
echo msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:build ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/maxcpucount:2 ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% ^
|
||||
/flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log >> %BUILD_DIR%\rebuild.cmd
|
||||
echo msbuild ^
|
||||
%BUILD_DIR%\INSTALL.vcxproj ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd
|
||||
echo echo %%TIME%% ^>^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd
|
@@ -1,64 +0,0 @@
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Ninja" %TESTS_CMAKE_ARGS% -DCMAKE_BUILD_TYPE=%BUILD_TYPE%
|
||||
|
||||
if "%WITH_CLANG%" == "1" (
|
||||
set LLVM_DIR=
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C
|
||||
if DEFINED LLVM_DIR (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo LLVM Detected at "%LLVM_DIR%"
|
||||
)
|
||||
goto DetectionComplete
|
||||
)
|
||||
|
||||
REM Check 32 bits
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C
|
||||
if DEFINED LLVM_DIR (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo LLVM Detected at "%LLVM_DIR%"
|
||||
)
|
||||
goto DetectionComplete
|
||||
)
|
||||
echo LLVM not found
|
||||
exit /b 1
|
||||
|
||||
:DetectionComplete
|
||||
set CC=%LLVM_DIR%\bin\clang-cl
|
||||
set CXX=%LLVM_DIR%\bin\clang-cl
|
||||
rem build and tested against 2017 15.7
|
||||
set CFLAGS=-m64 -fmsc-version=1914
|
||||
set CXXFLAGS=-m64 -fmsc-version=1914
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS%
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_DIR%\nul (
|
||||
mkdir %BUILD_DIR%
|
||||
)
|
||||
|
||||
if "%MUST_CLEAN%"=="1" (
|
||||
echo Cleaning %BUILD_DIR%
|
||||
cd %BUILD_DIR%
|
||||
%CMAKE% cmake --build . --config Clean
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
|
||||
if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
|
||||
|
||||
if "%MUST_CONFIGURE%"=="1" (
|
||||
cmake ^
|
||||
%BUILD_CMAKE_ARGS% ^
|
||||
-H%BLENDER_DIR% ^
|
||||
-B%BUILD_DIR%
|
||||
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo "Configuration Failed"
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
|
||||
echo call "%VCVARS%" %BUILD_ARCH% > %BUILD_DIR%\rebuild.cmd
|
||||
echo echo %%TIME%% ^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd
|
||||
echo ninja install >> %BUILD_DIR%\rebuild.cmd
|
||||
echo echo %%TIME%% ^>^> buildtime.txt >> %BUILD_DIR%\rebuild.cmd
|
@@ -1,16 +0,0 @@
|
||||
if "%BUILD_ARCH%"=="" (
|
||||
if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
set BUILD_ARCH=x64
|
||||
) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
set BUILD_ARCH=x64
|
||||
) else (
|
||||
set WINDOWS_ARCH=
|
||||
set BUILD_ARCH=x86
|
||||
)
|
||||
) else if "%BUILD_ARCH%"=="x64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set WINDOWS_ARCH=
|
||||
)
|
@@ -1,3 +0,0 @@
|
||||
set BUILD_VS_VER=12
|
||||
set BUILD_VS_YEAR=2013
|
||||
call "%~dp0\detect_msvc_classic.cmd"
|
@@ -1,3 +0,0 @@
|
||||
set BUILD_VS_VER=14
|
||||
set BUILD_VS_YEAR=2015
|
||||
call "%~dp0\detect_msvc_classic.cmd"
|
@@ -1,70 +0,0 @@
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Detecting msvc 2017
|
||||
)
|
||||
set BUILD_VS_VER=15
|
||||
set ProgramFilesX86=%ProgramFiles(x86)%
|
||||
if not exist "%ProgramFilesX86%" set ProgramFilesX86=%ProgramFiles%
|
||||
|
||||
set vs_where=%ProgramFilesX86%\Microsoft Visual Studio\Installer\vswhere.exe
|
||||
if not exist "%vs_where%" (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio 2017 ^(15.2 or newer^) is not detected
|
||||
goto FAIL
|
||||
)
|
||||
)
|
||||
for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64`) do (
|
||||
if /i "%%i"=="installationPath" set VS_InstallDir=%%j
|
||||
)
|
||||
|
||||
if "%VS_InstallDir%"=="" (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio is detected but the "Desktop development with C++" workload has not been instlled
|
||||
goto FAIL
|
||||
)
|
||||
)
|
||||
|
||||
set VCVARS=%VS_InstallDir%\VC\Auxiliary\Build\vcvarsall.bat
|
||||
if exist "%VCVARS%" (
|
||||
call "%VCVARS%" %BUILD_ARCH%
|
||||
) else (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo "%VCVARS%" not found
|
||||
)
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
rem try msbuild
|
||||
msbuild /version > NUL
|
||||
if errorlevel 1 (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% msbuild not found
|
||||
)
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% msbuild found
|
||||
)
|
||||
|
||||
REM try the c++ compiler
|
||||
cl 2> NUL 1>&2
|
||||
if errorlevel 1 (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler not found
|
||||
)
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler found
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio 2017 is detected successfully
|
||||
)
|
||||
goto EOF
|
||||
|
||||
:FAIL
|
||||
exit /b 1
|
||||
|
||||
:EOF
|
@@ -1,69 +0,0 @@
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Detecting msvc %BUILD_VS_YEAR%
|
||||
)
|
||||
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
|
||||
if DEFINED MSVC_VC_DIR (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% on Win64 detected at "%MSVC_VC_DIR%"
|
||||
)
|
||||
goto msvc_detect_finally
|
||||
)
|
||||
|
||||
REM Check 32 bits
|
||||
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v ProductDir 2^>nul`) DO set MSVC_VC_DIR=%%C
|
||||
if DEFINED MSVC_VC_DIR (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% on Win32 detected at "%MSVC_VC_DIR%"
|
||||
)
|
||||
goto msvc_detect_finally
|
||||
)
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% not found.
|
||||
)
|
||||
goto FAIL
|
||||
:msvc_detect_finally
|
||||
set VCVARS=%MSVC_VC_DIR%\vcvarsall.bat
|
||||
if not exist "%VCVARS%" (
|
||||
echo "%VCVARS%" not found.
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
call "%vcvars%" %BUILD_ARCH%
|
||||
|
||||
rem try msbuild
|
||||
msbuild /version > NUL
|
||||
if errorlevel 1 (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% msbuild not found
|
||||
)
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% msbuild found
|
||||
)
|
||||
|
||||
REM try the c++ compiler
|
||||
cl 2> NUL 1>&2
|
||||
if errorlevel 1 (
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler not found
|
||||
)
|
||||
goto FAIL
|
||||
)
|
||||
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% C/C++ Compiler found
|
||||
)
|
||||
goto DetectionComplete
|
||||
|
||||
:FAIL
|
||||
exit /b 1
|
||||
|
||||
:DetectionComplete
|
||||
if NOT "%verbose%" == "" (
|
||||
echo Visual Studio %BUILD_VS_YEAR% Detected successfuly
|
||||
)
|
||||
exit /b 0
|
@@ -1,13 +0,0 @@
|
||||
REM find all dependencies and set the corresponding environement variables.
|
||||
for %%X in (svn.exe) do (set SVN=%%~$PATH:X)
|
||||
for %%X in (cmake.exe) do (set CMAKE=%%~$PATH:X)
|
||||
for %%X in (git.exe) do (set GIT=%%~$PATH:X)
|
||||
if NOT "%verbose%" == "" (
|
||||
echo svn : %SVN%
|
||||
echo cmake : %CMAKE%
|
||||
echo git : %GIT%
|
||||
)
|
||||
if "%CMAKE%" == "" (
|
||||
echo Cmake not found in path, required for building, exiting...
|
||||
exit /b 1
|
||||
)
|
@@ -1,82 +0,0 @@
|
||||
set BUILD_DIR=%BLENDER_DIR%..\build_windows
|
||||
set BUILD_TYPE=Release
|
||||
:argv_loop
|
||||
if NOT "%1" == "" (
|
||||
|
||||
REM Help Message
|
||||
if "%1" == "help" (
|
||||
set SHOW_HELP=1
|
||||
goto EOF
|
||||
)
|
||||
REM Build Types
|
||||
if "%1" == "debug" (
|
||||
set BUILD_TYPE=Debug
|
||||
REM Build Configurations
|
||||
) else if "%1" == "noge" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_GAMEENGINE=OFF -DWITH_PLAYER=OFF
|
||||
set BUILD_NGE=_noge
|
||||
) else if "%1" == "builddir" (
|
||||
set BUILD_DIR_OVERRRIDE="%BLENDER_DIR%..\%2"
|
||||
shift /1
|
||||
) else if "%1" == "with_tests" (
|
||||
set TESTS_CMAKE_ARGS=-DWITH_GTESTS=On
|
||||
) else if "%1" == "full" (
|
||||
set TARGET=Full
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\blender_full.cmake"
|
||||
) else if "%1" == "lite" (
|
||||
set TARGET=Lite
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\blender_lite.cmake"
|
||||
) else if "%1" == "cycles" (
|
||||
set TARGET=Cycles
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\cycles_standalone.cmake"
|
||||
) else if "%1" == "headless" (
|
||||
set TARGET=Headless
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\blender_headless.cmake"
|
||||
) else if "%1" == "bpy" (
|
||||
set TARGET=Bpy
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
|
||||
) else if "%1" == "clang" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS%
|
||||
set WITH_CLANG=1
|
||||
) else if "%1" == "release" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake"
|
||||
set TARGET=Release
|
||||
) else if "%1" == "x86" (
|
||||
set BUILD_ARCH=x86
|
||||
) else if "%1" == "x64" (
|
||||
set BUILD_ARCH=x64
|
||||
) else if "%1" == "2017" (
|
||||
set BUILD_VS_YEAR=2017
|
||||
) else if "%1" == "2017pre" (
|
||||
set BUILD_VS_YEAR=2017
|
||||
set VSWHERE_ARGS=-prerelease
|
||||
) else if "%1" == "2015" (
|
||||
set BUILD_VS_YEAR=2015
|
||||
) else if "%1" == "2013" (
|
||||
set BUILD_VS_YEAR=2013
|
||||
) else if "%1" == "packagename" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
||||
shift /1
|
||||
) else if "%1" == "nobuild" (
|
||||
set NOBUILD=1
|
||||
) else if "%1" == "showhash" (
|
||||
SET BUILD_SHOW_HASHES=1
|
||||
REM Non-Build Commands
|
||||
) else if "%1" == "update" (
|
||||
SET BUILD_UPDATE=1
|
||||
) else if "%1" == "ninja" (
|
||||
SET BUILD_WITH_NINJA=1
|
||||
) else if "%1" == "clean" (
|
||||
set MUST_CLEAN=1
|
||||
) else if "%1" == "verbose" (
|
||||
set VERBOSE=1
|
||||
) else (
|
||||
echo Command "%1" unknown, aborting!
|
||||
exit /b 1
|
||||
)
|
||||
shift /1
|
||||
goto argv_loop
|
||||
)
|
||||
:EOF
|
||||
exit /b 0
|
@@ -1,24 +0,0 @@
|
||||
rem reset all variables so they do not get accidentally get carried over from previous builds
|
||||
set BUILD_DIR_OVERRRIDE=
|
||||
set BUILD_CMAKE_ARGS=
|
||||
set BUILD_ARCH=
|
||||
set BUILD_VS_VER=
|
||||
set BUILD_VS_YEAR=
|
||||
set BUILD_VS_LIBDIRPOST=
|
||||
set BUILD_VS_LIBDIR=
|
||||
set BUILD_VS_SVNDIR=
|
||||
set BUILD_NGE=
|
||||
set KEY_NAME=
|
||||
set MSBUILD_PLATFORM=
|
||||
set MUST_CLEAN=
|
||||
set NOBUILD=
|
||||
set TARGET=
|
||||
set VERBOSE=
|
||||
set WINDOWS_ARCH=
|
||||
set TESTS_CMAKE_ARGS=
|
||||
set VSWHERE_ARGS=
|
||||
set BUILD_UPDATE=
|
||||
set BUILD_SHOW_HASHES=
|
||||
set SHOW_HELP=
|
||||
set BUILD_WITH_NINJA=
|
||||
set WITH_CLANG=
|
@@ -1,4 +0,0 @@
|
||||
set BUILD_DIR=%BUILD_DIR%_%TARGET%%BUILD_NGE%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
|
||||
if NOT "%BUILD_DIR_OVERRRIDE%"=="" (
|
||||
set BUILD_DIR=%BUILD_DIR_OVERRRIDE%
|
||||
)
|
@@ -1,12 +0,0 @@
|
||||
if "%GIT%" == "" (
|
||||
echo Git not found, cannot show hashes.
|
||||
goto EOF
|
||||
)
|
||||
cd "%BLENDER_DIR%"
|
||||
for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Branch_hash=%%i
|
||||
cd "%BLENDER_DIR%/release/datafiles/locale"
|
||||
for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Locale_hash=%%i
|
||||
cd "%BLENDER_DIR%/release/scripts/addons"
|
||||
for /f "delims=" %%i in ('%GIT% rev-parse HEAD') do echo Addons_Hash=%%i
|
||||
cd "%BLENDER_DIR%"
|
||||
:EOF
|
@@ -1,29 +0,0 @@
|
||||
echo.
|
||||
echo Convenience targets
|
||||
echo - release ^(identical to the official blender.org builds^)
|
||||
echo - full ^(same as release minus the cuda kernels^)
|
||||
echo - lite
|
||||
echo - headless
|
||||
echo - cycles
|
||||
echo - bpy
|
||||
echo.
|
||||
echo Utilities ^(not associated with building^)
|
||||
echo - clean ^(Target must be set^)
|
||||
echo - update
|
||||
echo - nobuild ^(only generate project files^)
|
||||
echo - showhash ^(Show git hashes of source tree^)
|
||||
echo.
|
||||
echo Configuration options
|
||||
echo - verbose ^(enable diagnostic output during configuration^)
|
||||
echo - with_tests ^(enable building unit tests^)
|
||||
echo - noge ^(disable building game enginge and player^)
|
||||
echo - debug ^(Build an unoptimized debuggable build^)
|
||||
echo - packagename [newname] ^(override default cpack package name^)
|
||||
echo - buildir [newdir] ^(override default build folder^)
|
||||
echo - x86 ^(override host auto-detect and build 32 bit code^)
|
||||
echo - x64 ^(override host auto-detect and build 64 bit code^)
|
||||
echo - 2013 ^(build with visual studio 2013^)
|
||||
echo - 2015 ^(build with visual studio 2015^) [EXPERIMENTAL]
|
||||
echo - 2017 ^(build with visual studio 2017^) [EXPERIMENTAL]
|
||||
echo - 2017pre ^(build with visual studio 2017 pre-release^) [EXPERIMENTAL]
|
||||
echo.
|
@@ -1,16 +0,0 @@
|
||||
if "%SVN%" == "" (
|
||||
echo svn not found, cannot update libraries
|
||||
goto UPDATE_GIT
|
||||
)
|
||||
"%SVN%" up "%BLENDER_DIR%/../lib/*"
|
||||
|
||||
:UPDATE_GIT
|
||||
|
||||
if "%GIT%" == "" (
|
||||
echo Git not found, cannot update code
|
||||
goto EOF
|
||||
)
|
||||
"%GIT%" pull --rebase
|
||||
"%GIT%" submodule foreach git pull --rebase origin master
|
||||
|
||||
:EOF
|
@@ -20,6 +20,6 @@ The execution context is one of:
|
||||
'EXEC_SCREEN')
|
||||
"""
|
||||
|
||||
# collection add popup
|
||||
# group add popup
|
||||
import bpy
|
||||
bpy.ops.object.collection_instance_add('INVOKE_DEFAULT')
|
||||
bpy.ops.object.group_instance_add('INVOKE_DEFAULT')
|
||||
|
@@ -335,7 +335,7 @@ template<> EIGEN_STRONG_INLINE void prefetch<float>(const float* addr) { _mm_p
|
||||
template<> EIGEN_STRONG_INLINE void prefetch<double>(const double* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
|
||||
template<> EIGEN_STRONG_INLINE void prefetch<int>(const int* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
|
||||
|
||||
#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER) && !defined(__clang__)
|
||||
#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER)
|
||||
// The temporary variable fixes an internal compilation error in vs <= 2008 and a wrong-result bug in vs 2010
|
||||
// Direct of the struct members fixed bug #62.
|
||||
template<> EIGEN_STRONG_INLINE float pfirst<Packet4f>(const Packet4f& a) { return a.m128_f32[0]; }
|
||||
|
12
extern/Eigen3/patches/blender.diff
vendored
12
extern/Eigen3/patches/blender.diff
vendored
@@ -1,12 +0,0 @@
|
||||
diff -Naur c:\blender-git\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h k:\BlenderGit\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h
|
||||
--- c:\blender-git\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h 2018-05-25 13:29:14 -0600
|
||||
+++ k:\BlenderGit\blender\extern\Eigen3/Eigen/src/Core/arch/SSE/PacketMath.h 2018-05-26 19:56:36 -0600
|
||||
@@ -335,7 +335,7 @@
|
||||
template<> EIGEN_STRONG_INLINE void prefetch<double>(const double* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
|
||||
template<> EIGEN_STRONG_INLINE void prefetch<int>(const int* addr) { _mm_prefetch((const char*)(addr), _MM_HINT_T0); }
|
||||
|
||||
-#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER)
|
||||
+#if defined(_MSC_VER) && defined(_WIN64) && !defined(__INTEL_COMPILER) && !defined(__clang__)
|
||||
// The temporary variable fixes an internal compilation error in vs <= 2008 and a wrong-result bug in vs 2010
|
||||
// Direct of the struct members fixed bug #62.
|
||||
template<> EIGEN_STRONG_INLINE float pfirst<Packet4f>(const Packet4f& a) { return a.m128_f32[0]; }
|
31
extern/bullet2/patches/blender.patch
vendored
31
extern/bullet2/patches/blender.patch
vendored
@@ -1,34 +1,3 @@
|
||||
diff --git a/extern/bullet2/src/LinearMath/btScalar.h b/extern/bullet2/src/LinearMath/btScalar.h
|
||||
--- a/extern/bullet2/src/LinearMath/btScalar.h
|
||||
+++ b/extern/bullet2/src/LinearMath/btScalar.h
|
||||
@@ -16,6 +16,9 @@
|
||||
|
||||
#ifndef BT_SCALAR_H
|
||||
#define BT_SCALAR_H
|
||||
+#if defined(_MSC_VER) && defined(__clang__) /* clang supplies it's own overloads already */
|
||||
+#define BT_NO_SIMD_OPERATOR_OVERLOADS
|
||||
+#endif
|
||||
|
||||
#ifdef BT_MANAGED_CODE
|
||||
//Aligned data types not supported in managed code
|
||||
@@ -83,7 +86,7 @@
|
||||
#ifdef BT_USE_SSE
|
||||
|
||||
#if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default)
|
||||
- #define BT_ALLOW_SSE4
|
||||
+ //#define BT_ALLOW_SSE4 //disable this cause blender targets sse2
|
||||
#endif //(_MSC_FULL_VER >= 160040219)
|
||||
|
||||
//BT_USE_SSE_IN_API is disabled under Windows by default, because
|
||||
@@ -102,7 +105,7 @@
|
||||
#endif //__MINGW32__
|
||||
|
||||
#ifdef BT_DEBUG
|
||||
- #ifdef _MSC_VER
|
||||
+ #if defined(_MSC_VER) && !defined(__clang__)
|
||||
#include <stdio.h>
|
||||
#define btAssert(x) { if(!(x)){printf("Assert "__FILE__ ":%u ("#x")\n", __LINE__);__debugbreak(); }}
|
||||
#else//_MSC_VER
|
||||
diff --git a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h b/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
|
||||
index be9eca6..ec40c96 100644
|
||||
--- a/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
|
||||
|
7
extern/bullet2/src/LinearMath/btScalar.h
vendored
7
extern/bullet2/src/LinearMath/btScalar.h
vendored
@@ -16,9 +16,6 @@ subject to the following restrictions:
|
||||
|
||||
#ifndef BT_SCALAR_H
|
||||
#define BT_SCALAR_H
|
||||
#if defined(_MSC_VER) && defined(__clang__) /* clang supplies it's own overloads already */
|
||||
#define BT_NO_SIMD_OPERATOR_OVERLOADS
|
||||
#endif
|
||||
|
||||
#ifdef BT_MANAGED_CODE
|
||||
//Aligned data types not supported in managed code
|
||||
@@ -86,7 +83,7 @@ inline int btGetVersion()
|
||||
#ifdef BT_USE_SSE
|
||||
|
||||
#if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default)
|
||||
//#define BT_ALLOW_SSE4 //disable this cause blender targets sse2
|
||||
#define BT_ALLOW_SSE4
|
||||
#endif //(_MSC_FULL_VER >= 160040219)
|
||||
|
||||
//BT_USE_SSE_IN_API is disabled under Windows by default, because
|
||||
@@ -105,7 +102,7 @@ inline int btGetVersion()
|
||||
#endif //__MINGW32__
|
||||
|
||||
#ifdef BT_DEBUG
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
#ifdef _MSC_VER
|
||||
#include <stdio.h>
|
||||
#define btAssert(x) { if(!(x)){printf("Assert "__FILE__ ":%u ("#x")\n", __LINE__);__debugbreak(); }}
|
||||
#else//_MSC_VER
|
||||
|
@@ -40,11 +40,7 @@
|
||||
#include <windows.h>
|
||||
#include <intrin.h>
|
||||
|
||||
#if defined (__clang__)
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
|
||||
#endif
|
||||
|
||||
/******************************************************************************/
|
||||
/* 64-bit operations. */
|
||||
#if (LG_SIZEOF_PTR == 8 || LG_SIZEOF_INT == 8)
|
||||
/* Unsigned */
|
||||
@@ -209,9 +205,4 @@ ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b)
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined (__clang__)
|
||||
# pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#endif /* __ATOMIC_OPS_MSVC_H__ */
|
||||
|
@@ -146,13 +146,10 @@ void CLG_exit(void);
|
||||
void CLG_output_set(void *file_handle);
|
||||
void CLG_output_use_basename_set(int value);
|
||||
void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle));
|
||||
void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle));
|
||||
|
||||
void CLG_type_filter_include(const char *type_filter, int type_filter_len);
|
||||
void CLG_type_filter_exclude(const char *type_filter, int type_filter_len);
|
||||
|
||||
void CLG_level_set(int level);
|
||||
|
||||
void CLG_logref_init(CLG_LogRef *clg_ref);
|
||||
|
||||
/** Declare outside function, declare as extern in header. */
|
||||
|
@@ -81,7 +81,6 @@ typedef struct CLogContext {
|
||||
|
||||
struct {
|
||||
void (*fatal_fn)(void *file_handle);
|
||||
void (*backtrace_fn)(void *file_handle);
|
||||
} callbacks;
|
||||
} CLogContext;
|
||||
|
||||
@@ -329,23 +328,15 @@ static CLG_LogType *clg_ctx_type_register(CLogContext *ctx, const char *identifi
|
||||
return ty;
|
||||
}
|
||||
|
||||
static void clg_ctx_fatal_action(CLogContext *ctx)
|
||||
static void clg_ctx_fatal_action(CLogContext *ctx, FILE *file_handle)
|
||||
{
|
||||
if (ctx->callbacks.fatal_fn != NULL) {
|
||||
ctx->callbacks.fatal_fn(ctx->output_file);
|
||||
ctx->callbacks.fatal_fn(file_handle);
|
||||
}
|
||||
fflush(ctx->output_file);
|
||||
fflush(file_handle);
|
||||
abort();
|
||||
}
|
||||
|
||||
static void clg_ctx_backtrace(CLogContext *ctx)
|
||||
{
|
||||
/* Note: we avoid writing fo 'FILE', for backtrace we make an exception,
|
||||
* if necessary we could have a version of the callback that writes to file descriptor all at once. */
|
||||
ctx->callbacks.backtrace_fn(ctx->output_file);
|
||||
fflush(ctx->output_file);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
@@ -413,17 +404,12 @@ void CLG_log_str(
|
||||
clg_str_append(&cstr, "\n");
|
||||
|
||||
/* could be optional */
|
||||
int bytes_written = write(lg->ctx->output, cstr.data, cstr.len);
|
||||
(void)bytes_written;
|
||||
write(lg->ctx->output, cstr.data, cstr.len);
|
||||
|
||||
clg_str_free(&cstr);
|
||||
|
||||
if (lg->ctx->callbacks.backtrace_fn) {
|
||||
clg_ctx_backtrace(lg->ctx);
|
||||
}
|
||||
|
||||
if (severity == CLG_SEVERITY_FATAL) {
|
||||
clg_ctx_fatal_action(lg->ctx);
|
||||
clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,17 +435,12 @@ void CLG_logf(
|
||||
clg_str_append(&cstr, "\n");
|
||||
|
||||
/* could be optional */
|
||||
int bytes_written = write(lg->ctx->output, cstr.data, cstr.len);
|
||||
(void)bytes_written;
|
||||
write(lg->ctx->output, cstr.data, cstr.len);
|
||||
|
||||
clg_str_free(&cstr);
|
||||
|
||||
if (lg->ctx->callbacks.backtrace_fn) {
|
||||
clg_ctx_backtrace(lg->ctx);
|
||||
}
|
||||
|
||||
if (severity == CLG_SEVERITY_FATAL) {
|
||||
clg_ctx_fatal_action(lg->ctx);
|
||||
clg_ctx_fatal_action(lg->ctx, lg->ctx->output_file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -489,11 +470,6 @@ static void CLG_ctx_fatal_fn_set(CLogContext *ctx, void (*fatal_fn)(void *file_h
|
||||
ctx->callbacks.fatal_fn = fatal_fn;
|
||||
}
|
||||
|
||||
static void CLG_ctx_backtrace_fn_set(CLogContext *ctx, void (*backtrace_fn)(void *file_handle))
|
||||
{
|
||||
ctx->callbacks.backtrace_fn = backtrace_fn;
|
||||
}
|
||||
|
||||
static void clg_ctx_type_filter_append(CLG_IDFilter **flt_list, const char *type_match, int type_match_len)
|
||||
{
|
||||
if (type_match_len == 0) {
|
||||
@@ -516,14 +492,6 @@ static void CLG_ctx_type_filter_include(CLogContext *ctx, const char *type_match
|
||||
clg_ctx_type_filter_append(&ctx->filters[1], type_match, type_match_len);
|
||||
}
|
||||
|
||||
static void CLG_ctx_level_set(CLogContext *ctx, int level)
|
||||
{
|
||||
ctx->default_type.level = level;
|
||||
for (CLG_LogType *ty = ctx->types; ty; ty = ty->next) {
|
||||
ty->level = level;
|
||||
}
|
||||
}
|
||||
|
||||
static CLogContext *CLG_ctx_init(void)
|
||||
{
|
||||
CLogContext *ctx = MEM_callocN(sizeof(*ctx), __func__);
|
||||
@@ -591,11 +559,6 @@ void CLG_fatal_fn_set(void (*fatal_fn)(void *file_handle))
|
||||
CLG_ctx_fatal_fn_set(g_ctx, fatal_fn);
|
||||
}
|
||||
|
||||
void CLG_backtrace_fn_set(void (*fatal_fn)(void *file_handle))
|
||||
{
|
||||
CLG_ctx_backtrace_fn_set(g_ctx, fatal_fn);
|
||||
}
|
||||
|
||||
void CLG_type_filter_exclude(const char *type_match, int type_match_len)
|
||||
{
|
||||
CLG_ctx_type_filter_exclude(g_ctx, type_match, type_match_len);
|
||||
@@ -606,12 +569,6 @@ void CLG_type_filter_include(const char *type_match, int type_match_len)
|
||||
CLG_ctx_type_filter_include(g_ctx, type_match, type_match_len);
|
||||
}
|
||||
|
||||
void CLG_level_set(int level)
|
||||
{
|
||||
CLG_ctx_level_set(g_ctx, level);
|
||||
}
|
||||
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@@ -31,7 +31,7 @@ elseif(NOT WITH_CPU_SSE)
|
||||
set(CXX_HAS_SSE FALSE)
|
||||
set(CXX_HAS_AVX FALSE)
|
||||
set(CXX_HAS_AVX2 FALSE)
|
||||
elseif(WIN32 AND MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
elseif(WIN32 AND MSVC)
|
||||
set(CXX_HAS_SSE TRUE)
|
||||
set(CXX_HAS_AVX TRUE)
|
||||
set(CXX_HAS_AVX2 TRUE)
|
||||
@@ -306,7 +306,7 @@ if(WITH_CYCLES_CUDA_BINARIES AND (NOT WITH_CYCLES_CUBIN_COMPILER))
|
||||
elseif(${CUDA_VERSION} EQUAL "9.1")
|
||||
set(MAX_MSVC 1911)
|
||||
endif()
|
||||
if(NOT MSVC_VERSION LESS ${MAX_MSVC} OR CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||
if(NOT MSVC_VERSION LESS ${MAX_MSVC})
|
||||
message(STATUS "nvcc not supported for this compiler version, using cycles_cubin_cc instead.")
|
||||
set(WITH_CYCLES_CUBIN_COMPILER ON)
|
||||
endif()
|
||||
|
@@ -66,32 +66,31 @@ class CyclesRender(bpy.types.RenderEngine):
|
||||
engine.free(self)
|
||||
|
||||
# final render
|
||||
def update(self, data, depsgraph):
|
||||
def update(self, data, scene):
|
||||
if not self.session:
|
||||
if self.is_preview:
|
||||
cscene = bpy.context.scene.cycles
|
||||
use_osl = cscene.shading_system and cscene.device == 'CPU'
|
||||
|
||||
engine.create(self, data, preview_osl=use_osl)
|
||||
engine.create(self, data, scene,
|
||||
None, None, None, use_osl)
|
||||
else:
|
||||
engine.create(self, data)
|
||||
|
||||
engine.reset(self, data, depsgraph)
|
||||
engine.create(self, data, scene)
|
||||
else:
|
||||
engine.reset(self, data, scene)
|
||||
|
||||
def render_to_image(self, depsgraph):
|
||||
engine.render(self, depsgraph)
|
||||
|
||||
def bake(self, depsgraph, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
|
||||
def bake(self, depsgraph, scene, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result):
|
||||
engine.bake(self, depsgraph, obj, pass_type, pass_filter, object_id, pixel_array, num_pixels, depth, result)
|
||||
|
||||
# viewport render
|
||||
def view_update(self, context):
|
||||
if not self.session:
|
||||
engine.create(self, context.blend_data,
|
||||
engine.create(self, context.blend_data, context.scene,
|
||||
context.region, context.space_data, context.region_data)
|
||||
|
||||
engine.reset(self, context.blend_data, context.depsgraph)
|
||||
engine.sync(self, context.depsgraph, context.blend_data)
|
||||
engine.update(self, context.depsgraph, context.blend_data, context.scene)
|
||||
|
||||
def render_to_view(self, context):
|
||||
engine.draw(self, context.depsgraph, context.region, context.space_data, context.region_data)
|
||||
|
@@ -123,12 +123,13 @@ def exit():
|
||||
_cycles.exit()
|
||||
|
||||
|
||||
def create(engine, data, region=None, v3d=None, rv3d=None, preview_osl=False):
|
||||
import _cycles
|
||||
def create(engine, data, scene, region=None, v3d=None, rv3d=None, preview_osl=False):
|
||||
import bpy
|
||||
import _cycles
|
||||
|
||||
data = data.as_pointer()
|
||||
userpref = bpy.context.user_preferences.as_pointer()
|
||||
scene = scene.as_pointer()
|
||||
if region:
|
||||
region = region.as_pointer()
|
||||
if v3d:
|
||||
@@ -136,8 +137,13 @@ def create(engine, data, region=None, v3d=None, rv3d=None, preview_osl=False):
|
||||
if rv3d:
|
||||
rv3d = rv3d.as_pointer()
|
||||
|
||||
if bpy.app.debug_value == 256:
|
||||
_cycles.debug_flags_update(scene)
|
||||
else:
|
||||
_cycles.debug_flags_reset()
|
||||
|
||||
engine.session = _cycles.create(
|
||||
engine.as_pointer(), userpref, data, region, v3d, rv3d, preview_osl)
|
||||
engine.as_pointer(), userpref, data, scene, region, v3d, rv3d, preview_osl)
|
||||
|
||||
|
||||
def free(engine):
|
||||
@@ -161,21 +167,14 @@ def bake(engine, depsgraph, obj, pass_type, pass_filter, object_id, pixel_array,
|
||||
_cycles.bake(engine.session, depsgraph.as_pointer(), obj.as_pointer(), pass_type, pass_filter, object_id, pixel_array.as_pointer(), num_pixels, depth, result.as_pointer())
|
||||
|
||||
|
||||
def reset(engine, data, depsgraph):
|
||||
def reset(engine, data, scene):
|
||||
import _cycles
|
||||
import bpy
|
||||
|
||||
if bpy.app.debug_value == 256:
|
||||
_cycles.debug_flags_update(depsgraph.scene)
|
||||
else:
|
||||
_cycles.debug_flags_reset()
|
||||
|
||||
data = data.as_pointer()
|
||||
depsgraph = depsgraph.as_pointer()
|
||||
_cycles.reset(engine.session, data, depsgraph)
|
||||
scene = scene.as_pointer()
|
||||
_cycles.reset(engine.session, data, scene)
|
||||
|
||||
|
||||
def sync(engine, depsgraph, data):
|
||||
def update(engine, depsgraph, data, scene):
|
||||
import _cycles
|
||||
_cycles.sync(engine.session, depsgraph.as_pointer())
|
||||
|
||||
|
@@ -112,8 +112,7 @@ def update_script_node(node, report):
|
||||
|
||||
if ok:
|
||||
# now update node with new sockets
|
||||
data = bpy.data.as_pointer()
|
||||
ok = _cycles.osl_update_node(data, node.id_data.as_pointer(), node.as_pointer(), oso_path)
|
||||
ok = _cycles.osl_update_node(node.id_data.as_pointer(), node.as_pointer(), oso_path)
|
||||
|
||||
if not ok:
|
||||
report({'ERROR'}, "OSL query failed to open " + oso_path)
|
||||
|
@@ -909,9 +909,9 @@ class CYCLES_LAMP_PT_lamp(CyclesButtonsPanel, Panel):
|
||||
col.prop(lamp, "shape", text="")
|
||||
sub = col.column(align=True)
|
||||
|
||||
if lamp.shape in {'SQUARE', 'DISK'}:
|
||||
if lamp.shape == 'SQUARE':
|
||||
sub.prop(lamp, "size")
|
||||
elif lamp.shape in {'RECTANGLE', 'ELLIPSE'}:
|
||||
elif lamp.shape == 'RECTANGLE':
|
||||
sub.prop(lamp, "size", text="Size X")
|
||||
sub.prop(lamp, "size_y", text="Size Y")
|
||||
|
||||
@@ -1267,6 +1267,7 @@ class CYCLES_MATERIAL_PT_viewport(CyclesButtonsPanel, Panel):
|
||||
col = split.column(align=True)
|
||||
col.label("Specular:")
|
||||
col.prop(mat, "specular_color", text="")
|
||||
col.prop(mat, "specular_hardness", text="Hardness")
|
||||
|
||||
|
||||
class CYCLES_RENDER_PT_bake(CyclesButtonsPanel, Panel):
|
||||
@@ -1604,7 +1605,7 @@ classes = (
|
||||
def register():
|
||||
from bpy.utils import register_class
|
||||
|
||||
bpy.types.RENDER_PT_context.append(draw_device)
|
||||
bpy.types.RENDER_PT_render.append(draw_device)
|
||||
bpy.types.VIEW3D_HT_header.append(draw_pause)
|
||||
|
||||
for panel in get_panels():
|
||||
@@ -1617,7 +1618,7 @@ def register():
|
||||
def unregister():
|
||||
from bpy.utils import unregister_class
|
||||
|
||||
bpy.types.RENDER_PT_context.remove(draw_device)
|
||||
bpy.types.RENDER_PT_render.remove(draw_device)
|
||||
bpy.types.VIEW3D_HT_header.remove(draw_pause)
|
||||
|
||||
for panel in get_panels():
|
||||
|
@@ -95,8 +95,8 @@ static void blender_camera_init(BlenderCamera *bcam,
|
||||
bcam->type = CAMERA_PERSPECTIVE;
|
||||
bcam->zoom = 1.0f;
|
||||
bcam->pixelaspect = make_float2(1.0f, 1.0f);
|
||||
bcam->sensor_width = 36.0f;
|
||||
bcam->sensor_height = 24.0f;
|
||||
bcam->sensor_width = 32.0f;
|
||||
bcam->sensor_height = 18.0f;
|
||||
bcam->sensor_fit = BlenderCamera::AUTO;
|
||||
bcam->shuttertime = 1.0f;
|
||||
bcam->motion_position = Camera::MOTION_POSITION_CENTER;
|
||||
|
@@ -1189,7 +1189,7 @@ Mesh *BlenderSync::sync_mesh(BL::Depsgraph& b_depsgraph,
|
||||
BL::Mesh b_mesh = object_to_mesh(b_data,
|
||||
b_ob,
|
||||
b_depsgraph,
|
||||
false,
|
||||
true,
|
||||
need_undeformed,
|
||||
mesh->subdivision_type);
|
||||
|
||||
@@ -1277,7 +1277,7 @@ void BlenderSync::sync_mesh_motion(BL::Depsgraph& b_depsgraph,
|
||||
b_mesh = object_to_mesh(b_data,
|
||||
b_ob,
|
||||
b_depsgraph,
|
||||
false,
|
||||
true,
|
||||
false,
|
||||
Mesh::SUBDIVISION_NONE);
|
||||
}
|
||||
|
@@ -162,24 +162,10 @@ void BlenderSync::sync_light(BL::Object& b_parent,
|
||||
light->axisu = transform_get_column(&tfm, 0);
|
||||
light->axisv = transform_get_column(&tfm, 1);
|
||||
light->sizeu = b_area_lamp.size();
|
||||
switch(b_area_lamp.shape()) {
|
||||
case BL::AreaLamp::shape_SQUARE:
|
||||
light->sizev = light->sizeu;
|
||||
light->round = false;
|
||||
break;
|
||||
case BL::AreaLamp::shape_RECTANGLE:
|
||||
light->sizev = b_area_lamp.size_y();
|
||||
light->round = false;
|
||||
break;
|
||||
case BL::AreaLamp::shape_DISK:
|
||||
light->sizev = light->sizeu;
|
||||
light->round = true;
|
||||
break;
|
||||
case BL::AreaLamp::shape_ELLIPSE:
|
||||
light->sizev = b_area_lamp.size_y();
|
||||
light->round = true;
|
||||
break;
|
||||
}
|
||||
if(b_area_lamp.shape() == BL::AreaLamp::shape_RECTANGLE)
|
||||
light->sizev = b_area_lamp.size_y();
|
||||
else
|
||||
light->sizev = light->sizeu;
|
||||
light->type = LIGHT_AREA;
|
||||
break;
|
||||
}
|
||||
|
@@ -203,10 +203,10 @@ static PyObject *exit_func(PyObject * /*self*/, PyObject * /*args*/)
|
||||
|
||||
static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
||||
{
|
||||
PyObject *pyengine, *pyuserpref, *pydata, *pyregion, *pyv3d, *pyrv3d;
|
||||
PyObject *pyengine, *pyuserpref, *pydata, *pyscene, *pyregion, *pyv3d, *pyrv3d;
|
||||
int preview_osl;
|
||||
|
||||
if(!PyArg_ParseTuple(args, "OOOOOOi", &pyengine, &pyuserpref, &pydata,
|
||||
if(!PyArg_ParseTuple(args, "OOOOOOOi", &pyengine, &pyuserpref, &pydata, &pyscene,
|
||||
&pyregion, &pyv3d, &pyrv3d, &preview_osl))
|
||||
{
|
||||
return NULL;
|
||||
@@ -225,6 +225,10 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
||||
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
|
||||
BL::BlendData data(dataptr);
|
||||
|
||||
PointerRNA sceneptr;
|
||||
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyscene), &sceneptr);
|
||||
BL::Scene scene(sceneptr);
|
||||
|
||||
PointerRNA regionptr;
|
||||
RNA_pointer_create(NULL, &RNA_Region, pylong_as_voidptr_typesafe(pyregion), ®ionptr);
|
||||
BL::Region region(regionptr);
|
||||
@@ -245,13 +249,27 @@ static PyObject *create_func(PyObject * /*self*/, PyObject *args)
|
||||
int width = region.width();
|
||||
int height = region.height();
|
||||
|
||||
session = new BlenderSession(engine, userpref, data, v3d, rv3d, width, height);
|
||||
session = new BlenderSession(engine, userpref, data, scene, v3d, rv3d, width, height);
|
||||
}
|
||||
else {
|
||||
/* override some settings for preview */
|
||||
if(engine.is_preview()) {
|
||||
PointerRNA cscene = RNA_pointer_get(&sceneptr, "cycles");
|
||||
|
||||
RNA_boolean_set(&cscene, "shading_system", preview_osl);
|
||||
RNA_boolean_set(&cscene, "use_progressive_refine", true);
|
||||
}
|
||||
|
||||
/* offline session or preview render */
|
||||
session = new BlenderSession(engine, userpref, data, preview_osl);
|
||||
session = new BlenderSession(engine, userpref, data, scene);
|
||||
}
|
||||
|
||||
python_thread_state_save(&session->python_thread_state);
|
||||
|
||||
session->create();
|
||||
|
||||
python_thread_state_restore(&session->python_thread_state);
|
||||
|
||||
return PyLong_FromVoidPtr(session);
|
||||
}
|
||||
|
||||
@@ -298,7 +316,7 @@ static PyObject *bake_func(PyObject * /*self*/, PyObject *args)
|
||||
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
|
||||
|
||||
PointerRNA depsgraphptr;
|
||||
RNA_pointer_create(NULL, &RNA_Depsgraph, PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||
BL::Depsgraph b_depsgraph(depsgraphptr);
|
||||
|
||||
PointerRNA objectptr;
|
||||
@@ -342,9 +360,9 @@ static PyObject *draw_func(PyObject * /*self*/, PyObject *args)
|
||||
|
||||
static PyObject *reset_func(PyObject * /*self*/, PyObject *args)
|
||||
{
|
||||
PyObject *pysession, *pydata, *pydepsgraph;
|
||||
PyObject *pysession, *pydata, *pyscene;
|
||||
|
||||
if(!PyArg_ParseTuple(args, "OOO", &pysession, &pydata, &pydepsgraph))
|
||||
if(!PyArg_ParseTuple(args, "OOO", &pysession, &pydata, &pyscene))
|
||||
return NULL;
|
||||
|
||||
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
|
||||
@@ -353,13 +371,13 @@ static PyObject *reset_func(PyObject * /*self*/, PyObject *args)
|
||||
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
|
||||
BL::BlendData b_data(dataptr);
|
||||
|
||||
PointerRNA depsgraphptr;
|
||||
RNA_pointer_create(NULL, &RNA_Depsgraph, PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||
BL::Depsgraph b_depsgraph(depsgraphptr);
|
||||
PointerRNA sceneptr;
|
||||
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pyscene), &sceneptr);
|
||||
BL::Scene b_scene(sceneptr);
|
||||
|
||||
python_thread_state_save(&session->python_thread_state);
|
||||
|
||||
session->reset_session(b_data, b_depsgraph);
|
||||
session->reset_session(b_data, b_scene);
|
||||
|
||||
python_thread_state_restore(&session->python_thread_state);
|
||||
|
||||
@@ -376,7 +394,7 @@ static PyObject *sync_func(PyObject * /*self*/, PyObject *args)
|
||||
BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
|
||||
|
||||
PointerRNA depsgraphptr;
|
||||
RNA_pointer_create(NULL, &RNA_Depsgraph, PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||
RNA_id_pointer_create((ID*)PyLong_AsVoidPtr(pydepsgraph), &depsgraphptr);
|
||||
BL::Depsgraph b_depsgraph(depsgraphptr);
|
||||
|
||||
python_thread_state_save(&session->python_thread_state);
|
||||
@@ -410,17 +428,13 @@ static PyObject *available_devices_func(PyObject * /*self*/, PyObject * /*args*/
|
||||
|
||||
static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
{
|
||||
PyObject *pydata, *pynodegroup, *pynode;
|
||||
PyObject *pynodegroup, *pynode;
|
||||
const char *filepath = NULL;
|
||||
|
||||
if(!PyArg_ParseTuple(args, "OOOs", &pydata, &pynodegroup, &pynode, &filepath))
|
||||
if(!PyArg_ParseTuple(args, "OOs", &pynodegroup, &pynode, &filepath))
|
||||
return NULL;
|
||||
|
||||
/* RNA */
|
||||
PointerRNA dataptr;
|
||||
RNA_main_pointer_create((Main*)PyLong_AsVoidPtr(pydata), &dataptr);
|
||||
BL::BlendData b_data(dataptr);
|
||||
|
||||
PointerRNA nodeptr;
|
||||
RNA_pointer_create((ID*)PyLong_AsVoidPtr(pynodegroup), &RNA_ShaderNodeScript, (void*)PyLong_AsVoidPtr(pynode), &nodeptr);
|
||||
BL::ShaderNodeScript b_node(nodeptr);
|
||||
@@ -518,7 +532,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
b_sock = b_node.outputs[param->name.string()];
|
||||
/* remove if type no longer matches */
|
||||
if(b_sock && b_sock.bl_idname() != socket_type) {
|
||||
b_node.outputs.remove(b_data, b_sock);
|
||||
b_node.outputs.remove(b_sock);
|
||||
b_sock = BL::NodeSocket(PointerRNA_NULL);
|
||||
}
|
||||
}
|
||||
@@ -526,7 +540,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
b_sock = b_node.inputs[param->name.string()];
|
||||
/* remove if type no longer matches */
|
||||
if(b_sock && b_sock.bl_idname() != socket_type) {
|
||||
b_node.inputs.remove(b_data, b_sock);
|
||||
b_node.inputs.remove(b_sock);
|
||||
b_sock = BL::NodeSocket(PointerRNA_NULL);
|
||||
}
|
||||
}
|
||||
@@ -534,9 +548,9 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
if(!b_sock) {
|
||||
/* create new socket */
|
||||
if(param->isoutput)
|
||||
b_sock = b_node.outputs.create(b_data, socket_type.c_str(), param->name.c_str(), param->name.c_str());
|
||||
b_sock = b_node.outputs.create(socket_type.c_str(), param->name.c_str(), param->name.c_str());
|
||||
else
|
||||
b_sock = b_node.inputs.create(b_data, socket_type.c_str(), param->name.c_str(), param->name.c_str());
|
||||
b_sock = b_node.inputs.create(socket_type.c_str(), param->name.c_str(), param->name.c_str());
|
||||
|
||||
/* set default value */
|
||||
if(data_type == BL::NodeSocket::type_VALUE) {
|
||||
@@ -570,7 +584,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
|
||||
for(b_node.inputs.begin(b_input); b_input != b_node.inputs.end(); ++b_input) {
|
||||
if(used_sockets.find(b_input->ptr.data) == used_sockets.end()) {
|
||||
b_node.inputs.remove(b_data, *b_input);
|
||||
b_node.inputs.remove(*b_input);
|
||||
removed = true;
|
||||
break;
|
||||
}
|
||||
@@ -578,7 +592,7 @@ static PyObject *osl_update_node_func(PyObject * /*self*/, PyObject *args)
|
||||
|
||||
for(b_node.outputs.begin(b_output); b_output != b_node.outputs.end(); ++b_output) {
|
||||
if(used_sockets.find(b_output->ptr.data) == used_sockets.end()) {
|
||||
b_node.outputs.remove(b_data, *b_output);
|
||||
b_node.outputs.remove(*b_output);
|
||||
removed = true;
|
||||
break;
|
||||
}
|
||||
|
@@ -52,22 +52,22 @@ int BlenderSession::end_resumable_chunk = 0;
|
||||
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
||||
BL::UserPreferences& b_userpref,
|
||||
BL::BlendData& b_data,
|
||||
bool preview_osl)
|
||||
: session(NULL),
|
||||
b_engine(b_engine),
|
||||
BL::Scene& b_scene)
|
||||
: b_engine(b_engine),
|
||||
b_userpref(b_userpref),
|
||||
b_data(b_data),
|
||||
b_render(b_engine.render()),
|
||||
b_depsgraph(PointerRNA_NULL),
|
||||
b_scene(PointerRNA_NULL),
|
||||
b_scene(b_scene),
|
||||
b_v3d(PointerRNA_NULL),
|
||||
b_rv3d(PointerRNA_NULL),
|
||||
width(0),
|
||||
height(0),
|
||||
preview_osl(preview_osl),
|
||||
python_thread_state(NULL)
|
||||
{
|
||||
/* offline render */
|
||||
|
||||
width = render_resolution_x(b_render);
|
||||
height = render_resolution_y(b_render);
|
||||
|
||||
background = true;
|
||||
last_redraw_time = 0.0;
|
||||
start_resize_time = 0.0;
|
||||
@@ -77,24 +77,24 @@ BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
||||
BlenderSession::BlenderSession(BL::RenderEngine& b_engine,
|
||||
BL::UserPreferences& b_userpref,
|
||||
BL::BlendData& b_data,
|
||||
BL::Scene& b_scene,
|
||||
BL::SpaceView3D& b_v3d,
|
||||
BL::RegionView3D& b_rv3d,
|
||||
int width, int height)
|
||||
: session(NULL),
|
||||
b_engine(b_engine),
|
||||
: b_engine(b_engine),
|
||||
b_userpref(b_userpref),
|
||||
b_data(b_data),
|
||||
b_render(b_engine.render()),
|
||||
b_render(b_scene.render()),
|
||||
b_depsgraph(PointerRNA_NULL),
|
||||
b_scene(PointerRNA_NULL),
|
||||
b_scene(b_scene),
|
||||
b_v3d(b_v3d),
|
||||
b_rv3d(b_rv3d),
|
||||
width(width),
|
||||
height(height),
|
||||
preview_osl(false),
|
||||
python_thread_state(NULL)
|
||||
{
|
||||
/* 3d view render */
|
||||
|
||||
background = false;
|
||||
last_redraw_time = 0.0;
|
||||
start_resize_time = 0.0;
|
||||
@@ -168,40 +168,18 @@ void BlenderSession::create_session()
|
||||
update_resumable_tile_manager(session_params.samples);
|
||||
}
|
||||
|
||||
void BlenderSession::reset_session(BL::BlendData& b_data, BL::Depsgraph& b_depsgraph)
|
||||
void BlenderSession::reset_session(BL::BlendData& b_data_, BL::Scene& b_scene_)
|
||||
{
|
||||
this->b_data = b_data;
|
||||
this->b_depsgraph = b_depsgraph;
|
||||
this->b_scene = b_depsgraph.scene_eval();
|
||||
|
||||
if (preview_osl) {
|
||||
PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
|
||||
RNA_boolean_set(&cscene, "shading_system", preview_osl);
|
||||
}
|
||||
|
||||
if (b_v3d) {
|
||||
this->b_render = b_scene.render();
|
||||
}
|
||||
else {
|
||||
this->b_render = b_engine.render();
|
||||
width = render_resolution_x(b_render);
|
||||
height = render_resolution_y(b_render);
|
||||
}
|
||||
|
||||
if (session == NULL) {
|
||||
create();
|
||||
}
|
||||
|
||||
if (b_v3d) {
|
||||
/* NOTE: We need to create session, but all the code from below
|
||||
* will make viewport render to stuck on initialization.
|
||||
*/
|
||||
return;
|
||||
}
|
||||
b_data = b_data_;
|
||||
b_render = b_engine.render();
|
||||
b_scene = b_scene_;
|
||||
|
||||
SessionParams session_params = BlenderSync::get_session_params(b_engine, b_userpref, b_scene, background);
|
||||
SceneParams scene_params = BlenderSync::get_scene_params(b_scene, background);
|
||||
|
||||
width = render_resolution_x(b_render);
|
||||
height = render_resolution_y(b_render);
|
||||
|
||||
if(scene->params.modified(scene_params) ||
|
||||
session->params.modified(session_params) ||
|
||||
!scene_params.persistent_data)
|
||||
|
@@ -37,11 +37,12 @@ public:
|
||||
BlenderSession(BL::RenderEngine& b_engine,
|
||||
BL::UserPreferences& b_userpref,
|
||||
BL::BlendData& b_data,
|
||||
bool preview_osl);
|
||||
BL::Scene& b_scene);
|
||||
|
||||
BlenderSession(BL::RenderEngine& b_engine,
|
||||
BL::UserPreferences& b_userpref,
|
||||
BL::BlendData& b_data,
|
||||
BL::Scene& b_scene,
|
||||
BL::SpaceView3D& b_v3d,
|
||||
BL::RegionView3D& b_rv3d,
|
||||
int width, int height);
|
||||
@@ -55,7 +56,7 @@ public:
|
||||
void free_session();
|
||||
|
||||
void reset_session(BL::BlendData& b_data,
|
||||
BL::Depsgraph& b_depsgraph);
|
||||
BL::Scene& b_scene);
|
||||
|
||||
/* offline render */
|
||||
void render(BL::Depsgraph& b_depsgraph);
|
||||
@@ -118,7 +119,6 @@ public:
|
||||
double last_status_time;
|
||||
|
||||
int width, height;
|
||||
bool preview_osl;
|
||||
double start_resize_time;
|
||||
|
||||
void *python_thread_state;
|
||||
|
@@ -811,22 +811,6 @@ static ShaderNode *add_node(Scene *scene,
|
||||
get_tex_mapping(&sky->tex_mapping, b_texture_mapping);
|
||||
node = sky;
|
||||
}
|
||||
else if(b_node.is_a(&RNA_ShaderNodeTexIES)) {
|
||||
BL::ShaderNodeTexIES b_ies_node(b_node);
|
||||
IESLightNode *ies = new IESLightNode();
|
||||
switch(b_ies_node.mode()) {
|
||||
case BL::ShaderNodeTexIES::mode_EXTERNAL:
|
||||
ies->filename = blender_absolute_path(b_data, b_ntree, b_ies_node.filepath());
|
||||
break;
|
||||
case BL::ShaderNodeTexIES::mode_INTERNAL:
|
||||
ies->ies = get_text_datablock_content(b_ies_node.ies().ptr);
|
||||
if(ies->ies.empty()) {
|
||||
ies->ies = "\n";
|
||||
}
|
||||
break;
|
||||
}
|
||||
node = ies;
|
||||
}
|
||||
else if(b_node.is_a(&RNA_ShaderNodeNormalMap)) {
|
||||
BL::ShaderNodeNormalMap b_normal_map_node(b_node);
|
||||
NormalMapNode *nmap = new NormalMapNode();
|
||||
|
@@ -796,8 +796,7 @@ SessionParams BlenderSync::get_session_params(BL::RenderEngine& b_engine,
|
||||
params.text_timeout = (double)get_float(cscene, "debug_text_timeout");
|
||||
|
||||
/* progressive refine */
|
||||
params.progressive_refine = (b_engine.is_preview() ||
|
||||
get_boolean(cscene, "use_progressive_refine")) &&
|
||||
params.progressive_refine = get_boolean(cscene, "use_progressive_refine") &&
|
||||
!b_r.use_save_buffers();
|
||||
|
||||
if(params.progressive_refine) {
|
||||
|
@@ -53,7 +53,6 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
|
||||
bool subsurf_mod_show_render = false;
|
||||
bool subsurf_mod_show_viewport = false;
|
||||
|
||||
/* TODO: make this work with copy-on-write, modifiers are already evaluated. */
|
||||
if(subdivision_type != Mesh::SUBDIVISION_NONE) {
|
||||
BL::Modifier subsurf_mod = object.modifiers[object.modifiers.length()-1];
|
||||
|
||||
@@ -468,21 +467,6 @@ static inline string blender_absolute_path(BL::BlendData& b_data,
|
||||
return path;
|
||||
}
|
||||
|
||||
static inline string get_text_datablock_content(const PointerRNA& ptr)
|
||||
{
|
||||
if(ptr.data == NULL) {
|
||||
return "";
|
||||
}
|
||||
|
||||
string content;
|
||||
BL::Text::lines_iterator iter;
|
||||
for(iter.begin(ptr); iter; ++iter) {
|
||||
content += iter->body() + "\n";
|
||||
}
|
||||
|
||||
return content;
|
||||
}
|
||||
|
||||
/* Texture Space */
|
||||
|
||||
static inline void mesh_texture_space(BL::Mesh& b_mesh,
|
||||
|
@@ -73,13 +73,12 @@ struct SocketType
|
||||
INTERNAL = (1 << 2) | (1 << 3),
|
||||
|
||||
LINK_TEXTURE_GENERATED = (1 << 4),
|
||||
LINK_TEXTURE_NORMAL = (1 << 5),
|
||||
LINK_TEXTURE_UV = (1 << 6),
|
||||
LINK_INCOMING = (1 << 7),
|
||||
LINK_NORMAL = (1 << 8),
|
||||
LINK_POSITION = (1 << 9),
|
||||
LINK_TANGENT = (1 << 10),
|
||||
DEFAULT_LINK_MASK = (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10)
|
||||
LINK_TEXTURE_UV = (1 << 5),
|
||||
LINK_INCOMING = (1 << 6),
|
||||
LINK_NORMAL = (1 << 7),
|
||||
LINK_POSITION = (1 << 8),
|
||||
LINK_TANGENT = (1 << 9),
|
||||
DEFAULT_LINK_MASK = (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 9)
|
||||
};
|
||||
|
||||
ustring name;
|
||||
|
@@ -178,7 +178,6 @@ set(SRC_SVM_HEADERS
|
||||
svm/svm_geometry.h
|
||||
svm/svm_gradient.h
|
||||
svm/svm_hsv.h
|
||||
svm/svm_ies.h
|
||||
svm/svm_image.h
|
||||
svm/svm_invert.h
|
||||
svm/svm_light_path.h
|
||||
|
@@ -37,22 +37,15 @@ CCL_NAMESPACE_BEGIN
|
||||
|
||||
ccl_device void bsdf_transparent_setup(ShaderData *sd, const float3 weight, int path_flag)
|
||||
{
|
||||
/* Check cutoff weight. */
|
||||
float sample_weight = fabsf(average(weight));
|
||||
if(!(sample_weight >= CLOSURE_WEIGHT_CUTOFF)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(sd->flag & SD_TRANSPARENT) {
|
||||
sd->closure_transparent_extinction += weight;
|
||||
|
||||
/* Add weight to existing transparent BSDF. */
|
||||
for(int i = 0; i < sd->num_closure; i++) {
|
||||
ShaderClosure *sc = &sd->closure[i];
|
||||
|
||||
if(sc->type == CLOSURE_BSDF_TRANSPARENT_ID) {
|
||||
sc->weight += weight;
|
||||
sc->sample_weight += sample_weight;
|
||||
sc->sample_weight += fabsf(average(weight));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -68,15 +61,11 @@ ccl_device void bsdf_transparent_setup(ShaderData *sd, const float3 weight, int
|
||||
sd->num_closure_left = 1;
|
||||
}
|
||||
|
||||
/* Create new transparent BSDF. */
|
||||
ShaderClosure *bsdf = closure_alloc(sd, sizeof(ShaderClosure), CLOSURE_BSDF_TRANSPARENT_ID, weight);
|
||||
ShaderClosure *bsdf = bsdf_alloc(sd, sizeof(ShaderClosure), weight);
|
||||
|
||||
if(bsdf) {
|
||||
bsdf->sample_weight = sample_weight;
|
||||
bsdf->N = sd->N;
|
||||
}
|
||||
else if(path_flag & PATH_RAY_TERMINATE) {
|
||||
sd->num_closure_left = 0;
|
||||
bsdf->type = CLOSURE_BSDF_TRANSPARENT_ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -61,13 +61,8 @@ ccl_device_inline void kernel_filter_construct_gramian(int x, int y,
|
||||
make_int2(x+dx, y+dy), buffer + q_offset,
|
||||
pass_stride, *rank, design_row, transform, stride);
|
||||
|
||||
#ifdef __KERNEL_GPU__
|
||||
math_trimatrix_add_gramian_strided(XtWX, (*rank)+1, design_row, weight, stride);
|
||||
math_vec3_add_strided(XtWY, (*rank)+1, design_row, weight * q_color, stride);
|
||||
#else
|
||||
math_trimatrix_add_gramian(XtWX, (*rank)+1, design_row, weight);
|
||||
math_vec3_add(XtWY, (*rank)+1, design_row, weight * q_color);
|
||||
#endif
|
||||
}
|
||||
|
||||
ccl_device_inline void kernel_filter_finalize(int x, int y,
|
||||
|
@@ -44,7 +44,7 @@ typedef struct LightSample {
|
||||
*
|
||||
* Note: light_p is modified when sample_coord is true.
|
||||
*/
|
||||
ccl_device_inline float rect_light_sample(float3 P,
|
||||
ccl_device_inline float area_light_sample(float3 P,
|
||||
float3 *light_p,
|
||||
float3 axisu, float3 axisv,
|
||||
float randu, float randv,
|
||||
@@ -125,60 +125,6 @@ ccl_device_inline float rect_light_sample(float3 P,
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
ccl_device_inline float3 ellipse_sample(float3 ru, float3 rv, float randu, float randv)
|
||||
{
|
||||
to_unit_disk(&randu, &randv);
|
||||
return ru*randu + rv*randv;
|
||||
}
|
||||
|
||||
ccl_device float3 disk_light_sample(float3 v, float randu, float randv)
|
||||
{
|
||||
float3 ru, rv;
|
||||
|
||||
make_orthonormals(v, &ru, &rv);
|
||||
|
||||
return ellipse_sample(ru, rv, randu, randv);
|
||||
}
|
||||
|
||||
ccl_device float3 distant_light_sample(float3 D, float radius, float randu, float randv)
|
||||
{
|
||||
return normalize(D + disk_light_sample(D, randu, randv)*radius);
|
||||
}
|
||||
|
||||
ccl_device float3 sphere_light_sample(float3 P, float3 center, float radius, float randu, float randv)
|
||||
{
|
||||
return disk_light_sample(normalize(P - center), randu, randv)*radius;
|
||||
}
|
||||
|
||||
ccl_device float spot_light_attenuation(float3 dir, float spot_angle, float spot_smooth, LightSample *ls)
|
||||
{
|
||||
float3 I = ls->Ng;
|
||||
|
||||
float attenuation = dot(dir, I);
|
||||
|
||||
if(attenuation <= spot_angle) {
|
||||
attenuation = 0.0f;
|
||||
}
|
||||
else {
|
||||
float t = attenuation - spot_angle;
|
||||
|
||||
if(t < spot_smooth && spot_smooth != 0.0f)
|
||||
attenuation *= smoothstepf(t/spot_smooth);
|
||||
}
|
||||
|
||||
return attenuation;
|
||||
}
|
||||
|
||||
ccl_device float lamp_light_pdf(KernelGlobals *kg, const float3 Ng, const float3 I, float t)
|
||||
{
|
||||
float cos_pi = dot(Ng, I);
|
||||
|
||||
if(cos_pi <= 0.0f)
|
||||
return 0.0f;
|
||||
|
||||
return t*t/cos_pi;
|
||||
}
|
||||
|
||||
/* Background Light */
|
||||
|
||||
#ifdef __BACKGROUND_MIS__
|
||||
@@ -224,7 +170,7 @@ float3 background_map_sample(KernelGlobals *kg, float randu, float randv, float
|
||||
float2 cdf_last_v = kernel_tex_fetch(__light_background_marginal_cdf, res);
|
||||
|
||||
/* importance-sampled V direction */
|
||||
float dv = inverse_lerp(cdf_v.y, cdf_next_v.y, randv);
|
||||
float dv = (randv - cdf_v.y) / (cdf_next_v.y - cdf_v.y);
|
||||
float v = (index_v + dv) / res;
|
||||
|
||||
/* this is basically std::lower_bound as used by pbrt */
|
||||
@@ -250,7 +196,7 @@ float3 background_map_sample(KernelGlobals *kg, float randu, float randv, float
|
||||
float2 cdf_last_u = kernel_tex_fetch(__light_background_conditional_cdf, index_v * cdf_count + res);
|
||||
|
||||
/* importance-sampled U direction */
|
||||
float du = inverse_lerp(cdf_u.y, cdf_next_u.y, randu);
|
||||
float du = (randu - cdf_u.y) / (cdf_next_u.y - cdf_u.y);
|
||||
float u = (index_u + du) / res;
|
||||
|
||||
/* compute pdf */
|
||||
@@ -349,19 +295,11 @@ ccl_device_inline float background_portal_pdf(KernelGlobals *kg,
|
||||
const ccl_global KernelLight *klight = &kernel_tex_fetch(__lights, portal);
|
||||
float3 axisu = make_float3(klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
|
||||
float3 axisv = make_float3(klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
|
||||
bool is_round = (klight->area.invarea < 0.0f);
|
||||
|
||||
if(!ray_quad_intersect(P, direction, 1e-4f, FLT_MAX, lightpos, axisu, axisv, dir, NULL, NULL, NULL, NULL, is_round))
|
||||
if(!ray_quad_intersect(P, direction, 1e-4f, FLT_MAX, lightpos, axisu, axisv, dir, NULL, NULL, NULL, NULL))
|
||||
continue;
|
||||
|
||||
if(is_round) {
|
||||
float t;
|
||||
float3 D = normalize_len(lightpos - P, &t);
|
||||
portal_pdf += fabsf(klight->area.invarea) * lamp_light_pdf(kg, dir, -D, t);
|
||||
}
|
||||
else {
|
||||
portal_pdf += rect_light_sample(P, &lightpos, axisu, axisv, 0.0f, 0.0f, false);
|
||||
}
|
||||
portal_pdf += area_light_sample(P, &lightpos, axisu, axisv, 0.0f, 0.0f, false);
|
||||
}
|
||||
|
||||
if(ignore_portal >= 0) {
|
||||
@@ -411,26 +349,15 @@ ccl_device float3 background_portal_sample(KernelGlobals *kg,
|
||||
const ccl_global KernelLight *klight = &kernel_tex_fetch(__lights, portal);
|
||||
float3 axisu = make_float3(klight->area.axisu[0], klight->area.axisu[1], klight->area.axisu[2]);
|
||||
float3 axisv = make_float3(klight->area.axisv[0], klight->area.axisv[1], klight->area.axisv[2]);
|
||||
bool is_round = (klight->area.invarea < 0.0f);
|
||||
|
||||
float3 D;
|
||||
if(is_round) {
|
||||
lightpos += ellipse_sample(axisu*0.5f, axisv*0.5f, randu, randv);
|
||||
float t;
|
||||
D = normalize_len(lightpos - P, &t);
|
||||
*pdf = fabsf(klight->area.invarea) * lamp_light_pdf(kg, dir, -D, t);
|
||||
}
|
||||
else {
|
||||
*pdf = rect_light_sample(P, &lightpos,
|
||||
axisu, axisv,
|
||||
randu, randv,
|
||||
true);
|
||||
D = normalize(lightpos - P);
|
||||
}
|
||||
*pdf = area_light_sample(P, &lightpos,
|
||||
axisu, axisv,
|
||||
randu, randv,
|
||||
true);
|
||||
|
||||
*pdf /= num_possible;
|
||||
*sampled_portal = p;
|
||||
return D;
|
||||
return normalize(lightpos - P);
|
||||
}
|
||||
|
||||
portal--;
|
||||
@@ -531,6 +458,55 @@ ccl_device float background_light_pdf(KernelGlobals *kg, float3 P, float3 direct
|
||||
|
||||
/* Regular Light */
|
||||
|
||||
ccl_device float3 disk_light_sample(float3 v, float randu, float randv)
|
||||
{
|
||||
float3 ru, rv;
|
||||
|
||||
make_orthonormals(v, &ru, &rv);
|
||||
to_unit_disk(&randu, &randv);
|
||||
|
||||
return ru*randu + rv*randv;
|
||||
}
|
||||
|
||||
ccl_device float3 distant_light_sample(float3 D, float radius, float randu, float randv)
|
||||
{
|
||||
return normalize(D + disk_light_sample(D, randu, randv)*radius);
|
||||
}
|
||||
|
||||
ccl_device float3 sphere_light_sample(float3 P, float3 center, float radius, float randu, float randv)
|
||||
{
|
||||
return disk_light_sample(normalize(P - center), randu, randv)*radius;
|
||||
}
|
||||
|
||||
ccl_device float spot_light_attenuation(float3 dir, float spot_angle, float spot_smooth, LightSample *ls)
|
||||
{
|
||||
float3 I = ls->Ng;
|
||||
|
||||
float attenuation = dot(dir, I);
|
||||
|
||||
if(attenuation <= spot_angle) {
|
||||
attenuation = 0.0f;
|
||||
}
|
||||
else {
|
||||
float t = attenuation - spot_angle;
|
||||
|
||||
if(t < spot_smooth && spot_smooth != 0.0f)
|
||||
attenuation *= smoothstepf(t/spot_smooth);
|
||||
}
|
||||
|
||||
return attenuation;
|
||||
}
|
||||
|
||||
ccl_device float lamp_light_pdf(KernelGlobals *kg, const float3 Ng, const float3 I, float t)
|
||||
{
|
||||
float cos_pi = dot(Ng, I);
|
||||
|
||||
if(cos_pi <= 0.0f)
|
||||
return 0.0f;
|
||||
|
||||
return t*t/cos_pi;
|
||||
}
|
||||
|
||||
ccl_device_inline bool lamp_light_sample(KernelGlobals *kg,
|
||||
int lamp,
|
||||
float randu, float randv,
|
||||
@@ -625,39 +601,26 @@ ccl_device_inline bool lamp_light_sample(KernelGlobals *kg,
|
||||
float3 D = make_float3(klight->area.dir[0],
|
||||
klight->area.dir[1],
|
||||
klight->area.dir[2]);
|
||||
float invarea = fabsf(klight->area.invarea);
|
||||
bool is_round = (klight->area.invarea < 0.0f);
|
||||
|
||||
if(dot(ls->P - P, D) > 0.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
float3 inplane;
|
||||
|
||||
if(is_round) {
|
||||
inplane = ellipse_sample(axisu*0.5f, axisv*0.5f, randu, randv);
|
||||
ls->P += inplane;
|
||||
ls->pdf = invarea;
|
||||
}
|
||||
else {
|
||||
inplane = ls->P;
|
||||
ls->pdf = rect_light_sample(P, &ls->P,
|
||||
axisu, axisv,
|
||||
randu, randv,
|
||||
true);
|
||||
inplane = ls->P - inplane;
|
||||
}
|
||||
float3 inplane = ls->P;
|
||||
ls->pdf = area_light_sample(P, &ls->P,
|
||||
axisu, axisv,
|
||||
randu, randv,
|
||||
true);
|
||||
|
||||
inplane = ls->P - inplane;
|
||||
ls->u = dot(inplane, axisu) * (1.0f / dot(axisu, axisu)) + 0.5f;
|
||||
ls->v = dot(inplane, axisv) * (1.0f / dot(axisv, axisv)) + 0.5f;
|
||||
|
||||
ls->Ng = D;
|
||||
ls->D = normalize_len(ls->P - P, &ls->t);
|
||||
|
||||
float invarea = klight->area.invarea;
|
||||
ls->eval_fac = 0.25f*invarea;
|
||||
if(is_round) {
|
||||
ls->pdf *= lamp_light_pdf(kg, D, -ls->D, ls->t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -768,8 +731,7 @@ ccl_device bool lamp_light_eval(KernelGlobals *kg, int lamp, float3 P, float3 D,
|
||||
}
|
||||
else if(type == LIGHT_AREA) {
|
||||
/* area light */
|
||||
float invarea = fabsf(klight->area.invarea);
|
||||
bool is_round = (klight->area.invarea < 0.0f);
|
||||
float invarea = klight->area.invarea;
|
||||
if(invarea == 0.0f)
|
||||
return false;
|
||||
|
||||
@@ -792,20 +754,14 @@ ccl_device bool lamp_light_eval(KernelGlobals *kg, int lamp, float3 P, float3 D,
|
||||
if(!ray_quad_intersect(P, D, 0.0f, t, light_P,
|
||||
axisu, axisv, Ng,
|
||||
&ls->P, &ls->t,
|
||||
&ls->u, &ls->v,
|
||||
is_round))
|
||||
&ls->u, &ls->v))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ls->D = D;
|
||||
ls->Ng = Ng;
|
||||
if(is_round) {
|
||||
ls->pdf = invarea * lamp_light_pdf(kg, Ng, -D, ls->t);
|
||||
}
|
||||
else {
|
||||
ls->pdf = rect_light_sample(P, &light_P, axisu, axisv, 0, 0, false);
|
||||
}
|
||||
ls->pdf = area_light_sample(P, &light_P, axisu, axisv, 0, 0, false);
|
||||
ls->eval_fac = 0.25f*invarea;
|
||||
}
|
||||
else {
|
||||
|
@@ -81,8 +81,5 @@ KERNEL_TEX(uint, __sobol_directions)
|
||||
/* image textures */
|
||||
KERNEL_TEX(TextureInfo, __texture_info)
|
||||
|
||||
/* ies lights */
|
||||
KERNEL_TEX(float, __ies)
|
||||
|
||||
#undef KERNEL_TEX
|
||||
|
||||
|
@@ -349,7 +349,7 @@ template<typename T> struct TextureInterpolator {
|
||||
* Only happens for AVX2 kernel and global __KERNEL_SSE__ vectorization
|
||||
* enabled.
|
||||
*/
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
#ifdef __GNUC__
|
||||
static ccl_always_inline
|
||||
#else
|
||||
static ccl_never_inline
|
||||
|
@@ -956,15 +956,9 @@ bool OSLRenderServices::texture(ustring filename,
|
||||
status = true;
|
||||
}
|
||||
}
|
||||
else if(filename[1] == 'l') {
|
||||
/* IES light. */
|
||||
int slot = atoi(filename.c_str() + 2);
|
||||
result[0] = kernel_ies_interp(kg, slot, s, t);
|
||||
status = true;
|
||||
}
|
||||
else {
|
||||
/* Packed texture. */
|
||||
int slot = atoi(filename.c_str() + 2);
|
||||
int slot = atoi(filename.c_str() + 1);
|
||||
float4 rgba = kernel_tex_image_interp(kg, slot, s, 1.0f - t);
|
||||
|
||||
result[0] = rgba[0];
|
||||
|
@@ -39,7 +39,6 @@ set(SRC_OSL
|
||||
node_principled_volume.osl
|
||||
node_holdout.osl
|
||||
node_hsv.osl
|
||||
node_ies_light.osl
|
||||
node_image_texture.osl
|
||||
node_invert.osl
|
||||
node_layer_weight.osl
|
||||
|
@@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011-2015 Blender Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "stdosl.h"
|
||||
#include "node_texture.h"
|
||||
|
||||
/* IES Light */
|
||||
|
||||
shader node_ies_light(
|
||||
int use_mapping = 0,
|
||||
matrix mapping = matrix(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
|
||||
int slot = 0,
|
||||
float Strength = 1.0,
|
||||
point Vector = I,
|
||||
output float Fac = 0.0)
|
||||
{
|
||||
point p = Vector;
|
||||
|
||||
if (use_mapping) {
|
||||
p = transform(mapping, p);
|
||||
}
|
||||
|
||||
p = normalize(p);
|
||||
|
||||
float v_angle = acos(-p[2]);
|
||||
float h_angle = atan2(p[0], p[1]) + M_PI;
|
||||
|
||||
Fac = Strength * texture(format("@l%d", slot), h_angle, v_angle);
|
||||
}
|
@@ -95,8 +95,6 @@ shader node_math(
|
||||
Value = safe_modulo(Value1, Value2);
|
||||
else if (type == "absolute")
|
||||
Value = fabs(Value1);
|
||||
else if (type == "arctan2")
|
||||
Value = atan2(Value1, Value2);
|
||||
|
||||
if (use_clamp)
|
||||
Value = clamp(Value, 0.0, 1.0);
|
||||
|
@@ -157,7 +157,6 @@ CCL_NAMESPACE_END
|
||||
#include "kernel/svm/svm_camera.h"
|
||||
#include "kernel/svm/svm_geometry.h"
|
||||
#include "kernel/svm/svm_hsv.h"
|
||||
#include "kernel/svm/svm_ies.h"
|
||||
#include "kernel/svm/svm_image.h"
|
||||
#include "kernel/svm/svm_gamma.h"
|
||||
#include "kernel/svm/svm_brightness.h"
|
||||
@@ -422,9 +421,6 @@ ccl_device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ccl_a
|
||||
case NODE_LIGHT_FALLOFF:
|
||||
svm_node_light_falloff(sd, stack, node);
|
||||
break;
|
||||
case NODE_IES:
|
||||
svm_node_ies(kg, sd, stack, node, &offset);
|
||||
break;
|
||||
# endif /* __EXTRA_NODES__ */
|
||||
#endif /* NODES_GROUP(NODE_GROUP_LEVEL_2) */
|
||||
|
||||
|
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011-2013 Blender Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* IES Light */
|
||||
|
||||
ccl_device_inline float interpolate_ies_vertical(KernelGlobals *kg, int ofs, int v, int v_num, float v_frac, int h)
|
||||
{
|
||||
/* Since lookups are performed in spherical coordinates, clamping the coordinates at the low end of v
|
||||
* (corresponding to the north pole) would result in artifacts.
|
||||
* The proper way of dealing with this would be to lookup the corresponding value on the other side of the pole,
|
||||
* but since the horizontal coordinates might be nonuniform, this would require yet another interpolation.
|
||||
* Therefore, the assumtion is made that the light is going to be symmetrical, which means that we can just take
|
||||
* the corresponding value at the current horizontal coordinate. */
|
||||
|
||||
#define IES_LOOKUP(v) kernel_tex_fetch(__ies, ofs+h*v_num+(v))
|
||||
/* If v is zero, assume symmetry and read at v=1 instead of v=-1. */
|
||||
float a = IES_LOOKUP((v == 0)? 1 : v-1);
|
||||
float b = IES_LOOKUP(v);
|
||||
float c = IES_LOOKUP(v+1);
|
||||
float d = IES_LOOKUP(min(v+2, v_num-1));
|
||||
#undef IES_LOOKUP
|
||||
|
||||
return cubic_interp(a, b, c, d, v_frac);
|
||||
}
|
||||
|
||||
ccl_device_inline float kernel_ies_interp(KernelGlobals *kg, int slot, float h_angle, float v_angle)
|
||||
{
|
||||
/* Find offset of the IES data in the table. */
|
||||
int ofs = __float_as_int(kernel_tex_fetch(__ies, slot));
|
||||
if(ofs == -1) {
|
||||
return 100.0f;
|
||||
}
|
||||
|
||||
int h_num = __float_as_int(kernel_tex_fetch(__ies, ofs++));
|
||||
int v_num = __float_as_int(kernel_tex_fetch(__ies, ofs++));
|
||||
|
||||
#define IES_LOOKUP_ANGLE_H(h) kernel_tex_fetch(__ies, ofs+(h))
|
||||
#define IES_LOOKUP_ANGLE_V(v) kernel_tex_fetch(__ies, ofs+h_num+(v))
|
||||
|
||||
/* Check whether the angle is within the bounds of the IES texture. */
|
||||
if(v_angle >= IES_LOOKUP_ANGLE_V(v_num-1)) {
|
||||
return 0.0f;
|
||||
}
|
||||
kernel_assert(v_angle >= IES_LOOKUP_ANGLE_V(0));
|
||||
kernel_assert(h_angle >= IES_LOOKUP_ANGLE_H(0));
|
||||
kernel_assert(h_angle <= IES_LOOKUP_ANGLE_H(h_num-1));
|
||||
|
||||
/* Lookup the angles to find the table position. */
|
||||
int h_i, v_i;
|
||||
/* TODO(lukas): Consider using bisection. Probably not worth it for the vast majority of IES files. */
|
||||
for(h_i = 0; IES_LOOKUP_ANGLE_H(h_i+1) < h_angle; h_i++);
|
||||
for(v_i = 0; IES_LOOKUP_ANGLE_V(v_i+1) < v_angle; v_i++);
|
||||
|
||||
float h_frac = inverse_lerp(IES_LOOKUP_ANGLE_H(h_i), IES_LOOKUP_ANGLE_H(h_i+1), h_angle);
|
||||
float v_frac = inverse_lerp(IES_LOOKUP_ANGLE_V(v_i), IES_LOOKUP_ANGLE_V(v_i+1), v_angle);
|
||||
|
||||
#undef IES_LOOKUP_ANGLE_H
|
||||
#undef IES_LOOKUP_ANGLE_V
|
||||
|
||||
/* Skip forward to the actual intensity data. */
|
||||
ofs += h_num+v_num;
|
||||
|
||||
/* Perform cubic interpolation along the horizontal coordinate to get the intensity value.
|
||||
* If h_i is zero, just wrap around since the horizontal angles always go over the full circle.
|
||||
* However, the last entry (360°) equals the first one, so we need to wrap around to the one before that. */
|
||||
float a = interpolate_ies_vertical(kg, ofs, v_i, v_num, v_frac, (h_i == 0)? h_num-2 : h_i-1);
|
||||
float b = interpolate_ies_vertical(kg, ofs, v_i, v_num, v_frac, h_i);
|
||||
float c = interpolate_ies_vertical(kg, ofs, v_i, v_num, v_frac, h_i+1);
|
||||
/* Same logic here, wrap around to the second element if necessary. */
|
||||
float d = interpolate_ies_vertical(kg, ofs, v_i, v_num, v_frac, (h_i+2 == h_num)? 1 : h_i+2);
|
||||
|
||||
/* Cubic interpolation can result in negative values, so get rid of them. */
|
||||
return max(cubic_interp(a, b, c, d, h_frac), 0.0f);
|
||||
}
|
||||
|
||||
ccl_device void svm_node_ies(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, int *offset)
|
||||
{
|
||||
uint vector_offset, strength_offset, fac_offset, dummy, slot = node.z;
|
||||
decode_node_uchar4(node.y, &strength_offset, &vector_offset, &fac_offset, &dummy);
|
||||
|
||||
float3 vector = stack_load_float3(stack, vector_offset);
|
||||
float strength = stack_load_float_default(stack, strength_offset, node.w);
|
||||
|
||||
vector = normalize(vector);
|
||||
float v_angle = safe_acosf(-vector.z);
|
||||
float h_angle = atan2f(vector.x, vector.y) + M_PI_F;
|
||||
|
||||
float fac = strength * kernel_ies_interp(kg, slot, h_angle, v_angle);
|
||||
|
||||
if(stack_valid(fac_offset)) {
|
||||
stack_store_float(stack, fac_offset, fac);
|
||||
}
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
@@ -92,8 +92,6 @@ ccl_device float svm_math(NodeMath type, float Fac1, float Fac2)
|
||||
Fac = safe_modulo(Fac1, Fac2);
|
||||
else if(type == NODE_MATH_ABSOLUTE)
|
||||
Fac = fabsf(Fac1);
|
||||
else if(type == NODE_MATH_ARCTAN2)
|
||||
Fac = atan2f(Fac1, Fac2);
|
||||
else if(type == NODE_MATH_CLAMP)
|
||||
Fac = saturate(Fac1);
|
||||
else
|
||||
|
@@ -136,7 +136,6 @@ typedef enum ShaderNodeType {
|
||||
NODE_DISPLACEMENT,
|
||||
NODE_VECTOR_DISPLACEMENT,
|
||||
NODE_PRINCIPLED_VOLUME,
|
||||
NODE_IES,
|
||||
} ShaderNodeType;
|
||||
|
||||
typedef enum NodeAttributeType {
|
||||
@@ -260,7 +259,6 @@ typedef enum NodeMath {
|
||||
NODE_MATH_GREATER_THAN,
|
||||
NODE_MATH_MODULO,
|
||||
NODE_MATH_ABSOLUTE,
|
||||
NODE_MATH_ARCTAN2,
|
||||
NODE_MATH_CLAMP /* used for the clamp UI option */
|
||||
} NodeMath;
|
||||
|
||||
|
@@ -774,12 +774,6 @@ void ShaderGraph::default_inputs(bool do_osl)
|
||||
|
||||
connect(texco->output("Generated"), input);
|
||||
}
|
||||
if(input->flags() & SocketType::LINK_TEXTURE_NORMAL) {
|
||||
if(!texco)
|
||||
texco = new TextureCoordinateNode();
|
||||
|
||||
connect(texco->output("Normal"), input);
|
||||
}
|
||||
else if(input->flags() & SocketType::LINK_TEXTURE_UV) {
|
||||
if(!texco)
|
||||
texco = new TextureCoordinateNode();
|
||||
|
@@ -25,8 +25,6 @@
|
||||
#include "render/shader.h"
|
||||
|
||||
#include "util/util_foreach.h"
|
||||
#include "util/util_hash.h"
|
||||
#include "util/util_path.h"
|
||||
#include "util/util_progress.h"
|
||||
#include "util/util_logging.h"
|
||||
|
||||
@@ -119,7 +117,6 @@ NODE_DEFINE(Light)
|
||||
SOCKET_FLOAT(sizeu, "Size U", 1.0f);
|
||||
SOCKET_VECTOR(axisv, "Axis V", make_float3(0.0f, 0.0f, 0.0f));
|
||||
SOCKET_FLOAT(sizev, "Size V", 1.0f);
|
||||
SOCKET_BOOLEAN(round, "Round", false);
|
||||
|
||||
SOCKET_INT(map_resolution, "Map Resolution", 512);
|
||||
|
||||
@@ -178,9 +175,6 @@ LightManager::LightManager()
|
||||
|
||||
LightManager::~LightManager()
|
||||
{
|
||||
foreach(IESSlot *slot, ies_slots) {
|
||||
delete slot;
|
||||
}
|
||||
}
|
||||
|
||||
bool LightManager::has_background_light(Scene *scene)
|
||||
@@ -736,15 +730,12 @@ void LightManager::device_update_points(Device *,
|
||||
float3 axisu = light->axisu*(light->sizeu*light->size);
|
||||
float3 axisv = light->axisv*(light->sizev*light->size);
|
||||
float area = len(axisu)*len(axisv);
|
||||
if(light->round) {
|
||||
area *= -M_PI_4_F;
|
||||
}
|
||||
float invarea = (area != 0.0f)? 1.0f/area: 1.0f;
|
||||
float invarea = (area > 0.0f)? 1.0f/area: 1.0f;
|
||||
float3 dir = light->dir;
|
||||
|
||||
dir = safe_normalize(dir);
|
||||
|
||||
if(light->use_mis && area != 0.0f)
|
||||
if(light->use_mis && area > 0.0f)
|
||||
shader_id |= SHADER_USE_MIS;
|
||||
|
||||
klights[light_index].co[0] = co.x;
|
||||
@@ -812,10 +803,7 @@ void LightManager::device_update_points(Device *,
|
||||
float3 axisu = light->axisu*(light->sizeu*light->size);
|
||||
float3 axisv = light->axisv*(light->sizev*light->size);
|
||||
float area = len(axisu)*len(axisv);
|
||||
if(light->round) {
|
||||
area *= -M_PI_4_F;
|
||||
}
|
||||
float invarea = (area != 0.0f)? 1.0f/area: 1.0f;
|
||||
float invarea = (area > 0.0f)? 1.0f/area: 1.0f;
|
||||
float3 dir = light->dir;
|
||||
|
||||
dir = safe_normalize(dir);
|
||||
@@ -870,9 +858,6 @@ void LightManager::device_update(Device *device, DeviceScene *dscene, Scene *sce
|
||||
device_update_background(device, dscene, scene, progress);
|
||||
if(progress.get_cancel()) return;
|
||||
|
||||
device_update_ies(dscene);
|
||||
if(progress.get_cancel()) return;
|
||||
|
||||
if(use_light_visibility != scene->film->use_light_visibility) {
|
||||
scene->film->use_light_visibility = use_light_visibility;
|
||||
scene->film->tag_update(scene);
|
||||
@@ -887,7 +872,6 @@ void LightManager::device_free(Device *, DeviceScene *dscene)
|
||||
dscene->lights.free();
|
||||
dscene->light_background_marginal_cdf.free();
|
||||
dscene->light_background_conditional_cdf.free();
|
||||
dscene->ies_lights.free();
|
||||
}
|
||||
|
||||
void LightManager::tag_update(Scene * /*scene*/)
|
||||
@@ -895,121 +879,5 @@ void LightManager::tag_update(Scene * /*scene*/)
|
||||
need_update = true;
|
||||
}
|
||||
|
||||
int LightManager::add_ies_from_file(ustring filename)
|
||||
{
|
||||
string content;
|
||||
|
||||
/* If the file can't be opened, call with an empty line */
|
||||
if(filename.empty() || !path_read_text(filename.c_str(), content)) {
|
||||
content = "\n";
|
||||
}
|
||||
|
||||
return add_ies(ustring(content));
|
||||
}
|
||||
|
||||
int LightManager::add_ies(ustring content)
|
||||
{
|
||||
uint hash = hash_string(content.c_str());
|
||||
|
||||
thread_scoped_lock ies_lock(ies_mutex);
|
||||
|
||||
/* Check whether this IES already has a slot. */
|
||||
size_t slot;
|
||||
for(slot = 0; slot < ies_slots.size(); slot++) {
|
||||
if(ies_slots[slot]->hash == hash) {
|
||||
ies_slots[slot]->users++;
|
||||
return slot;
|
||||
}
|
||||
}
|
||||
|
||||
/* Try to find an empty slot for the new IES. */
|
||||
for(slot = 0; slot < ies_slots.size(); slot++) {
|
||||
if(ies_slots[slot]->users == 0 && ies_slots[slot]->hash == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* If there's no free slot, add one. */
|
||||
if(slot == ies_slots.size()) {
|
||||
ies_slots.push_back(new IESSlot());
|
||||
}
|
||||
|
||||
ies_slots[slot]->ies.load(content);
|
||||
ies_slots[slot]->users = 1;
|
||||
ies_slots[slot]->hash = hash;
|
||||
|
||||
need_update = true;
|
||||
|
||||
return slot;
|
||||
}
|
||||
|
||||
void LightManager::remove_ies(int slot)
|
||||
{
|
||||
thread_scoped_lock ies_lock(ies_mutex);
|
||||
|
||||
if(slot < 0 || slot >= ies_slots.size()) {
|
||||
assert(false);
|
||||
return;
|
||||
}
|
||||
|
||||
assert(ies_slots[slot]->users > 0);
|
||||
ies_slots[slot]->users--;
|
||||
|
||||
/* If the slot has no more users, update the device to remove it. */
|
||||
need_update |= (ies_slots[slot]->users == 0);
|
||||
}
|
||||
|
||||
void LightManager::device_update_ies(DeviceScene *dscene)
|
||||
{
|
||||
/* Clear empty slots. */
|
||||
foreach(IESSlot *slot, ies_slots) {
|
||||
if(slot->users == 0) {
|
||||
slot->hash = 0;
|
||||
slot->ies.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/* Shrink the slot table by removing empty slots at the end. */
|
||||
int slot_end;
|
||||
for(slot_end = ies_slots.size(); slot_end; slot_end--) {
|
||||
if(ies_slots[slot_end-1]->users > 0) {
|
||||
/* If the preceding slot has users, we found the new end of the table. */
|
||||
break;
|
||||
}
|
||||
else {
|
||||
/* The slot will be past the new end of the table, so free it. */
|
||||
delete ies_slots[slot_end-1];
|
||||
}
|
||||
}
|
||||
ies_slots.resize(slot_end);
|
||||
|
||||
if(ies_slots.size() > 0) {
|
||||
int packed_size = 0;
|
||||
foreach(IESSlot *slot, ies_slots) {
|
||||
packed_size += slot->ies.packed_size();
|
||||
}
|
||||
|
||||
/* ies_lights starts with an offset table that contains the offset of every slot,
|
||||
* or -1 if the slot is invalid.
|
||||
* Following that table, the packed valid IES lights are stored. */
|
||||
float *data = dscene->ies_lights.alloc(ies_slots.size() + packed_size);
|
||||
|
||||
int offset = ies_slots.size();
|
||||
for(int i = 0; i < ies_slots.size(); i++) {
|
||||
int size = ies_slots[i]->ies.packed_size();
|
||||
if(size > 0) {
|
||||
data[i] = __int_as_float(offset);
|
||||
ies_slots[i]->ies.pack(data + offset);
|
||||
offset += size;
|
||||
}
|
||||
else {
|
||||
data[i] = __int_as_float(-1);
|
||||
}
|
||||
}
|
||||
|
||||
dscene->ies_lights.copy_to_device();
|
||||
}
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
|
@@ -21,8 +21,6 @@
|
||||
|
||||
#include "graph/node.h"
|
||||
|
||||
#include "util/util_ies.h"
|
||||
#include "util/util_thread.h"
|
||||
#include "util/util_types.h"
|
||||
#include "util/util_vector.h"
|
||||
|
||||
@@ -51,7 +49,6 @@ public:
|
||||
float sizeu;
|
||||
float3 axisv;
|
||||
float sizev;
|
||||
bool round;
|
||||
|
||||
Transform tfm;
|
||||
|
||||
@@ -89,11 +86,6 @@ public:
|
||||
LightManager();
|
||||
~LightManager();
|
||||
|
||||
/* IES texture management */
|
||||
int add_ies(ustring ies);
|
||||
int add_ies_from_file(ustring filename);
|
||||
void remove_ies(int slot);
|
||||
|
||||
void device_update(Device *device,
|
||||
DeviceScene *dscene,
|
||||
Scene *scene,
|
||||
@@ -123,19 +115,9 @@ protected:
|
||||
DeviceScene *dscene,
|
||||
Scene *scene,
|
||||
Progress& progress);
|
||||
void device_update_ies(DeviceScene *dscene);
|
||||
|
||||
/* Check whether light manager can use the object as a light-emissive. */
|
||||
bool object_usable_as_light(Object *object);
|
||||
|
||||
struct IESSlot {
|
||||
IESFile ies;
|
||||
uint hash;
|
||||
int users;
|
||||
};
|
||||
|
||||
vector<IESSlot*> ies_slots;
|
||||
thread_mutex ies_mutex;
|
||||
};
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
@@ -1307,7 +1307,7 @@ void MeshManager::update_svm_attributes(Device *, DeviceScene *dscene, Scene *sc
|
||||
return;
|
||||
|
||||
/* create attribute map */
|
||||
uint4 *attr_map = dscene->attributes_map.alloc(attr_map_size);
|
||||
uint4 *attr_map = dscene->attributes_map.alloc(attr_map_size*scene->meshes.size());
|
||||
memset(attr_map, 0, dscene->attributes_map.size()*sizeof(uint));
|
||||
|
||||
for(size_t i = 0; i < scene->meshes.size(); i++) {
|
||||
|
@@ -16,7 +16,6 @@
|
||||
|
||||
#include "render/image.h"
|
||||
#include "render/integrator.h"
|
||||
#include "render/light.h"
|
||||
#include "render/nodes.h"
|
||||
#include "render/scene.h"
|
||||
#include "render/svm.h"
|
||||
@@ -385,10 +384,10 @@ void ImageTextureNode::compile(OSLCompiler& compiler)
|
||||
/* TODO(sergey): It's not so simple to pass custom attribute
|
||||
* to the texture() function in order to make builtin images
|
||||
* support more clear. So we use special file name which is
|
||||
* "@i<slot_number>" and check whether file name matches this
|
||||
* "@<slot_number>" and check whether file name matches this
|
||||
* mask in the OSLRenderServices::texture().
|
||||
*/
|
||||
compiler.parameter("filename", string_printf("@i%d", slot).c_str());
|
||||
compiler.parameter("filename", string_printf("@%d", slot).c_str());
|
||||
}
|
||||
if(is_linear || color_space != NODE_COLOR_SPACE_COLOR)
|
||||
compiler.parameter("color_space", "linear");
|
||||
@@ -568,7 +567,7 @@ void EnvironmentTextureNode::compile(OSLCompiler& compiler)
|
||||
compiler.parameter(this, "filename");
|
||||
}
|
||||
else {
|
||||
compiler.parameter("filename", string_printf("@i%d", slot).c_str());
|
||||
compiler.parameter("filename", string_printf("@%d", slot).c_str());
|
||||
}
|
||||
compiler.parameter(this, "projection");
|
||||
if(is_linear || color_space != NODE_COLOR_SPACE_COLOR)
|
||||
@@ -955,97 +954,6 @@ void VoronoiTextureNode::compile(OSLCompiler& compiler)
|
||||
compiler.add(this, "node_voronoi_texture");
|
||||
}
|
||||
|
||||
/* IES Light */
|
||||
|
||||
NODE_DEFINE(IESLightNode)
|
||||
{
|
||||
NodeType* type = NodeType::add("ies_light", create, NodeType::SHADER);
|
||||
|
||||
TEXTURE_MAPPING_DEFINE(IESLightNode);
|
||||
|
||||
SOCKET_STRING(ies, "IES", ustring());
|
||||
SOCKET_STRING(filename, "File Name", ustring());
|
||||
|
||||
SOCKET_IN_FLOAT(strength, "Strength", 1.0f);
|
||||
SOCKET_IN_POINT(vector, "Vector", make_float3(0.0f, 0.0f, 0.0f), SocketType::LINK_TEXTURE_NORMAL);
|
||||
|
||||
SOCKET_OUT_FLOAT(fac, "Fac");
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
IESLightNode::IESLightNode()
|
||||
: TextureNode(node_type)
|
||||
{
|
||||
light_manager = NULL;
|
||||
slot = -1;
|
||||
}
|
||||
|
||||
ShaderNode *IESLightNode::clone() const
|
||||
{
|
||||
IESLightNode *node = new IESLightNode(*this);
|
||||
|
||||
node->light_manager = NULL;
|
||||
node->slot = -1;
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
IESLightNode::~IESLightNode()
|
||||
{
|
||||
if(light_manager) {
|
||||
light_manager->remove_ies(slot);
|
||||
}
|
||||
}
|
||||
|
||||
void IESLightNode::get_slot()
|
||||
{
|
||||
assert(light_manager);
|
||||
|
||||
if(slot == -1) {
|
||||
if(ies.empty()) {
|
||||
slot = light_manager->add_ies_from_file(filename);
|
||||
}
|
||||
else {
|
||||
slot = light_manager->add_ies(ies);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IESLightNode::compile(SVMCompiler& compiler)
|
||||
{
|
||||
light_manager = compiler.light_manager;
|
||||
get_slot();
|
||||
|
||||
ShaderInput *strength_in = input("Strength");
|
||||
ShaderInput *vector_in = input("Vector");
|
||||
ShaderOutput *fac_out = output("Fac");
|
||||
|
||||
int vector_offset = tex_mapping.compile_begin(compiler, vector_in);
|
||||
|
||||
compiler.add_node(NODE_IES,
|
||||
compiler.encode_uchar4(
|
||||
compiler.stack_assign_if_linked(strength_in),
|
||||
vector_offset,
|
||||
compiler.stack_assign(fac_out),
|
||||
0),
|
||||
slot,
|
||||
__float_as_int(strength));
|
||||
|
||||
tex_mapping.compile_end(compiler, vector_in, vector_offset);
|
||||
}
|
||||
|
||||
void IESLightNode::compile(OSLCompiler& compiler)
|
||||
{
|
||||
light_manager = compiler.light_manager;
|
||||
get_slot();
|
||||
|
||||
tex_mapping.compile(compiler);
|
||||
|
||||
compiler.parameter("slot", slot);
|
||||
compiler.add(this, "node_ies_light");
|
||||
}
|
||||
|
||||
/* Musgrave Texture */
|
||||
|
||||
NODE_DEFINE(MusgraveTextureNode)
|
||||
@@ -1562,7 +1470,7 @@ void PointDensityTextureNode::compile(OSLCompiler& compiler)
|
||||
}
|
||||
|
||||
if(slot != -1) {
|
||||
compiler.parameter("filename", string_printf("@i%d", slot).c_str());
|
||||
compiler.parameter("filename", string_printf("@%d", slot).c_str());
|
||||
}
|
||||
if(space == NODE_TEX_VOXEL_SPACE_WORLD) {
|
||||
compiler.parameter("mapping", tfm);
|
||||
@@ -5045,7 +4953,6 @@ NODE_DEFINE(MathNode)
|
||||
type_enum.insert("greater_than", NODE_MATH_GREATER_THAN);
|
||||
type_enum.insert("modulo", NODE_MATH_MODULO);
|
||||
type_enum.insert("absolute", NODE_MATH_ABSOLUTE);
|
||||
type_enum.insert("arctan2", NODE_MATH_ARCTAN2);
|
||||
SOCKET_ENUM(type, "Type", type_enum, NODE_MATH_ADD);
|
||||
|
||||
SOCKET_BOOLEAN(use_clamp, "Use Clamp", false);
|
||||
|
@@ -25,7 +25,6 @@
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
class ImageManager;
|
||||
class LightManager;
|
||||
class Scene;
|
||||
class Shader;
|
||||
|
||||
@@ -282,27 +281,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class IESLightNode : public TextureNode {
|
||||
public:
|
||||
SHADER_NODE_NO_CLONE_CLASS(IESLightNode)
|
||||
|
||||
~IESLightNode();
|
||||
ShaderNode *clone() const;
|
||||
virtual int get_group() { return NODE_GROUP_LEVEL_2; }
|
||||
|
||||
ustring filename;
|
||||
ustring ies;
|
||||
|
||||
float strength;
|
||||
float3 vector;
|
||||
|
||||
private:
|
||||
LightManager *light_manager;
|
||||
int slot;
|
||||
|
||||
void get_slot();
|
||||
};
|
||||
|
||||
class MappingNode : public ShaderNode {
|
||||
public:
|
||||
SHADER_NODE_CLASS(MappingNode)
|
||||
|
@@ -99,9 +99,7 @@ void OSLShaderManager::device_update(Device *device, DeviceScene *dscene, Scene
|
||||
* compile shaders alternating */
|
||||
thread_scoped_lock lock(ss_mutex);
|
||||
|
||||
OSLCompiler compiler((void*)this, (void*)ss,
|
||||
scene->image_manager,
|
||||
scene->light_manager);
|
||||
OSLCompiler compiler((void*)this, (void*)ss, scene->image_manager);
|
||||
compiler.background = (shader == scene->default_background);
|
||||
compiler.compile(scene, og, shader);
|
||||
|
||||
@@ -548,14 +546,11 @@ OSLNode *OSLShaderManager::osl_node(const std::string& filepath,
|
||||
|
||||
/* Graph Compiler */
|
||||
|
||||
OSLCompiler::OSLCompiler(void *manager_, void *shadingsys_,
|
||||
ImageManager *image_manager_,
|
||||
LightManager *light_manager_)
|
||||
OSLCompiler::OSLCompiler(void *manager_, void *shadingsys_, ImageManager *image_manager_)
|
||||
{
|
||||
manager = manager_;
|
||||
shadingsys = shadingsys_;
|
||||
image_manager = image_manager_;
|
||||
light_manager = light_manager_;
|
||||
current_type = SHADER_TYPE_SURFACE;
|
||||
current_shader = NULL;
|
||||
background = false;
|
||||
|
@@ -120,9 +120,7 @@ protected:
|
||||
|
||||
class OSLCompiler {
|
||||
public:
|
||||
OSLCompiler(void *manager, void *shadingsys,
|
||||
ImageManager *image_manager,
|
||||
LightManager *light_manager);
|
||||
OSLCompiler(void *manager, void *shadingsys, ImageManager *image_manager);
|
||||
void compile(Scene *scene, OSLGlobals *og, Shader *shader);
|
||||
|
||||
void add(ShaderNode *node, const char *name, bool isfilepath = false);
|
||||
@@ -148,7 +146,6 @@ public:
|
||||
|
||||
bool background;
|
||||
ImageManager *image_manager;
|
||||
LightManager *light_manager;
|
||||
|
||||
private:
|
||||
#ifdef WITH_OSL
|
||||
|
@@ -76,8 +76,7 @@ DeviceScene::DeviceScene(Device *device)
|
||||
svm_nodes(device, "__svm_nodes", MEM_TEXTURE),
|
||||
shaders(device, "__shaders", MEM_TEXTURE),
|
||||
lookup_table(device, "__lookup_table", MEM_TEXTURE),
|
||||
sobol_directions(device, "__sobol_directions", MEM_TEXTURE),
|
||||
ies_lights(device, "__ies", MEM_TEXTURE)
|
||||
sobol_directions(device, "__sobol_directions", MEM_TEXTURE)
|
||||
{
|
||||
memset(&data, 0, sizeof(data));
|
||||
}
|
||||
|
@@ -119,9 +119,6 @@ public:
|
||||
/* integrator */
|
||||
device_vector<uint> sobol_directions;
|
||||
|
||||
/* ies lights */
|
||||
device_vector<float> ies_lights;
|
||||
|
||||
KernelData data;
|
||||
|
||||
DeviceScene(Device *device);
|
||||
|
@@ -58,7 +58,7 @@ void SVMShaderManager::device_update_shader(Scene *scene,
|
||||
svm_nodes.push_back_slow(make_int4(NODE_SHADER_JUMP, 0, 0, 0));
|
||||
|
||||
SVMCompiler::Summary summary;
|
||||
SVMCompiler compiler(scene->shader_manager, scene->image_manager, scene->light_manager);
|
||||
SVMCompiler compiler(scene->shader_manager, scene->image_manager);
|
||||
compiler.background = (shader == scene->default_background);
|
||||
compiler.compile(scene, shader, svm_nodes, 0, &summary);
|
||||
|
||||
@@ -154,13 +154,10 @@ void SVMShaderManager::device_free(Device *device, DeviceScene *dscene, Scene *s
|
||||
|
||||
/* Graph Compiler */
|
||||
|
||||
SVMCompiler::SVMCompiler(ShaderManager *shader_manager_,
|
||||
ImageManager *image_manager_,
|
||||
LightManager *light_manager_)
|
||||
SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_manager_)
|
||||
{
|
||||
shader_manager = shader_manager_;
|
||||
image_manager = image_manager_;
|
||||
light_manager = light_manager_;
|
||||
max_stack_use = 0;
|
||||
current_type = SHADER_TYPE_SURFACE;
|
||||
current_shader = NULL;
|
||||
|
@@ -95,9 +95,7 @@ public:
|
||||
string full_report() const;
|
||||
};
|
||||
|
||||
SVMCompiler(ShaderManager *shader_manager,
|
||||
ImageManager *image_manager,
|
||||
LightManager *light_manager);
|
||||
SVMCompiler(ShaderManager *shader_manager, ImageManager *image_manager);
|
||||
void compile(Scene *scene,
|
||||
Shader *shader,
|
||||
array<int4>& svm_nodes,
|
||||
@@ -127,7 +125,6 @@ public:
|
||||
|
||||
ImageManager *image_manager;
|
||||
ShaderManager *shader_manager;
|
||||
LightManager *light_manager;
|
||||
bool background;
|
||||
|
||||
protected:
|
||||
|
@@ -11,7 +11,6 @@ set(INC_SYS
|
||||
set(SRC
|
||||
util_aligned_malloc.cpp
|
||||
util_debug.cpp
|
||||
util_ies.cpp
|
||||
util_logging.cpp
|
||||
util_math_cdf.cpp
|
||||
util_md5.cpp
|
||||
@@ -46,7 +45,6 @@ set(SRC_HEADERS
|
||||
util_guarded_allocator.h
|
||||
util_half.h
|
||||
util_hash.h
|
||||
util_ies.h
|
||||
util_image.h
|
||||
util_image_impl.h
|
||||
util_list.h
|
||||
|
@@ -1,396 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011-2018 Blender Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "util/util_foreach.h"
|
||||
#include "util/util_ies.h"
|
||||
#include "util/util_math.h"
|
||||
#include "util/util_string.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
bool IESFile::load(ustring ies)
|
||||
{
|
||||
clear();
|
||||
if(!parse(ies) || !process()) {
|
||||
clear();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void IESFile::clear()
|
||||
{
|
||||
intensity.clear();
|
||||
v_angles.clear();
|
||||
h_angles.clear();
|
||||
}
|
||||
|
||||
int IESFile::packed_size()
|
||||
{
|
||||
if(v_angles.size() && h_angles.size() > 0) {
|
||||
return 2 + h_angles.size() + v_angles.size() + h_angles.size()*v_angles.size();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void IESFile::pack(float *data)
|
||||
{
|
||||
if(v_angles.size() && h_angles.size()) {
|
||||
*(data++) = __int_as_float(h_angles.size());
|
||||
*(data++) = __int_as_float(v_angles.size());
|
||||
|
||||
memcpy(data, &h_angles[0], h_angles.size()*sizeof(float));
|
||||
data += h_angles.size();
|
||||
memcpy(data, &v_angles[0], v_angles.size()*sizeof(float));
|
||||
data += v_angles.size();
|
||||
|
||||
for(int h = 0; h < intensity.size(); h++) {
|
||||
memcpy(data, &intensity[h][0], v_angles.size()*sizeof(float));
|
||||
data += v_angles.size();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class IESTextParser {
|
||||
public:
|
||||
vector<char> text;
|
||||
char *data;
|
||||
|
||||
IESTextParser(ustring str)
|
||||
: text(str.begin(), str.end())
|
||||
{
|
||||
std::replace(text.begin(), text.end(), ',', ' ');
|
||||
data = strstr(&text[0], "\nTILT=");
|
||||
}
|
||||
|
||||
bool eof() {
|
||||
return (data == NULL) || (data[0] == '\0');
|
||||
}
|
||||
|
||||
double get_double() {
|
||||
if(eof()) {
|
||||
return 0.0;
|
||||
}
|
||||
char *old_data = data;
|
||||
double val = strtod(data, &data);
|
||||
if(data == old_data) {
|
||||
data = NULL;
|
||||
return 0.0;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
long get_long() {
|
||||
if(eof()) {
|
||||
return 0;
|
||||
}
|
||||
char *old_data = data;
|
||||
long val = strtol(data, &data, 10);
|
||||
if(data == old_data) {
|
||||
data = NULL;
|
||||
return 0;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
bool IESFile::parse(ustring ies)
|
||||
{
|
||||
if(ies.empty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
IESTextParser parser(ies);
|
||||
if(parser.eof()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Handle the tilt data block. */
|
||||
if(strncmp(parser.data, "\nTILT=INCLUDE", 13) == 0) {
|
||||
parser.data += 13;
|
||||
parser.get_double(); /* Lamp to Luminaire geometry */
|
||||
int num_tilt = parser.get_long(); /* Amount of tilt angles and factors */
|
||||
/* Skip over angles and factors. */
|
||||
for(int i = 0; i < 2*num_tilt; i++) {
|
||||
parser.get_double();
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Skip to next line. */
|
||||
parser.data = strstr(parser.data+1, "\n");
|
||||
}
|
||||
|
||||
if(parser.eof()) {
|
||||
return false;
|
||||
}
|
||||
parser.data++;
|
||||
|
||||
parser.get_long(); /* Number of lamps */
|
||||
parser.get_double(); /* Lumens per lamp */
|
||||
double factor = parser.get_double(); /* Candela multiplier */
|
||||
int v_angles_num = parser.get_long(); /* Number of vertical angles */
|
||||
int h_angles_num = parser.get_long(); /* Number of horizontal angles */
|
||||
type = (IESType) parser.get_long(); /* Photometric type */
|
||||
|
||||
/* TODO(lukas): Test whether the current type B processing can also deal with type A files.
|
||||
* In theory the only difference should be orientation which we ignore anyways, but with IES you never know...
|
||||
*/
|
||||
if(type != TYPE_B && type != TYPE_C) {
|
||||
return false;
|
||||
}
|
||||
|
||||
parser.get_long(); /* Unit of the geometry data */
|
||||
parser.get_double(); /* Width */
|
||||
parser.get_double(); /* Length */
|
||||
parser.get_double(); /* Height */
|
||||
factor *= parser.get_double(); /* Ballast factor */
|
||||
factor *= parser.get_double(); /* Ballast-Lamp Photometric factor */
|
||||
parser.get_double(); /* Input Watts */
|
||||
|
||||
/* Intensity values in IES files are specified in candela (lumen/sr), a photometric quantity.
|
||||
* Cycles expects radiometric quantities, though, which requires a conversion.
|
||||
* However, the Luminous efficacy (ratio of lumens per Watt) depends on the spectral distribution
|
||||
* of the light source since lumens take human perception into account.
|
||||
* Since this spectral distribution is not known from the IES file, a typical one must be assumed.
|
||||
* The D65 standard illuminant has a Luminous efficacy of 177.83, which is used here to convert to Watt/sr.
|
||||
* A more advanced approach would be to add a Blackbody Temperature input to the node and numerically
|
||||
* integrate the Luminous efficacy from the resulting spectral distribution.
|
||||
* Also, the Watt/sr value must be multiplied by 4*pi to get the Watt value that Cycles expects
|
||||
* for lamp strength. Therefore, the conversion here uses 4*pi/177.83 as a Candela to Watt factor.
|
||||
*/
|
||||
factor *= 0.0706650768394;
|
||||
|
||||
v_angles.reserve(v_angles_num);
|
||||
for(int i = 0; i < v_angles_num; i++) {
|
||||
v_angles.push_back((float) parser.get_double());
|
||||
}
|
||||
|
||||
h_angles.reserve(h_angles_num);
|
||||
for(int i = 0; i < h_angles_num; i++) {
|
||||
h_angles.push_back((float) parser.get_double());
|
||||
}
|
||||
|
||||
intensity.resize(h_angles_num);
|
||||
for(int i = 0; i < h_angles_num; i++) {
|
||||
intensity[i].reserve(v_angles_num);
|
||||
for(int j = 0; j < v_angles_num; j++) {
|
||||
intensity[i].push_back((float) (factor * parser.get_double()));
|
||||
}
|
||||
}
|
||||
|
||||
return !parser.eof();
|
||||
}
|
||||
|
||||
bool IESFile::process_type_b()
|
||||
{
|
||||
vector<vector<float> > newintensity;
|
||||
newintensity.resize(v_angles.size());
|
||||
for(int i = 0; i < v_angles.size(); i++) {
|
||||
newintensity[i].reserve(h_angles.size());
|
||||
for(int j = 0; j < h_angles.size(); j++) {
|
||||
newintensity[i].push_back(intensity[j][i]);
|
||||
}
|
||||
}
|
||||
intensity.swap(newintensity);
|
||||
h_angles.swap(v_angles);
|
||||
|
||||
float h_first = h_angles[0], h_last = h_angles[h_angles.size()-1];
|
||||
if(h_last != 90.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(h_first == 0.0f) {
|
||||
/* The range in the file corresponds to 90°-180°, we need to mirror that to get the
|
||||
* full 180° range. */
|
||||
vector<float> new_h_angles;
|
||||
vector<vector<float> > new_intensity;
|
||||
int hnum = h_angles.size();
|
||||
new_h_angles.reserve(2*hnum-1);
|
||||
new_intensity.reserve(2*hnum-1);
|
||||
for(int i = hnum-1; i > 0; i--) {
|
||||
new_h_angles.push_back(90.0f - h_angles[i]);
|
||||
new_intensity.push_back(intensity[i]);
|
||||
}
|
||||
for(int i = 0; i < hnum; i++) {
|
||||
new_h_angles.push_back(90.0f + h_angles[i]);
|
||||
new_intensity.push_back(intensity[i]);
|
||||
}
|
||||
h_angles.swap(new_h_angles);
|
||||
intensity.swap(new_intensity);
|
||||
}
|
||||
else if(h_first == -90.0f) {
|
||||
/* We have full 180° coverage, so just shift to match the angle range convention. */
|
||||
for(int i = 0; i < h_angles.size(); i++) {
|
||||
h_angles[i] += 90.0f;
|
||||
}
|
||||
}
|
||||
/* To get correct results with the cubic interpolation in the kernel, the horizontal range
|
||||
* has to cover all 360°. Therefore, we copy the 0° entry to 360° to ensure full coverage
|
||||
* and seamless interpolation. */
|
||||
h_angles.push_back(360.0f);
|
||||
intensity.push_back(intensity[0]);
|
||||
|
||||
float v_first = v_angles[0], v_last = v_angles[v_angles.size()-1];
|
||||
if(v_last != 90.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(v_first == 0.0f) {
|
||||
/* The range in the file corresponds to 90°-180°, we need to mirror that to get the
|
||||
* full 180° range. */
|
||||
vector<float> new_v_angles;
|
||||
int hnum = h_angles.size();
|
||||
int vnum = v_angles.size();
|
||||
new_v_angles.reserve(2*vnum-1);
|
||||
for(int i = vnum-1; i > 0; i--) {
|
||||
new_v_angles.push_back(90.0f - v_angles[i]);
|
||||
}
|
||||
for(int i = 0; i < vnum; i++) {
|
||||
new_v_angles.push_back(90.0f + v_angles[i]);
|
||||
}
|
||||
for(int i = 0; i < hnum; i++) {
|
||||
vector<float> new_intensity;
|
||||
new_intensity.reserve(2*vnum-1);
|
||||
for(int j = vnum-2; j >= 0; j--) {
|
||||
new_intensity.push_back(intensity[i][j]);
|
||||
}
|
||||
new_intensity.insert(new_intensity.end(), intensity[i].begin(), intensity[i].end());
|
||||
intensity[i].swap(new_intensity);
|
||||
}
|
||||
v_angles.swap(new_v_angles);
|
||||
}
|
||||
else if(v_first == -90.0f) {
|
||||
/* We have full 180° coverage, so just shift to match the angle range convention. */
|
||||
for(int i = 0; i < v_angles.size(); i++) {
|
||||
v_angles[i] += 90.0f;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IESFile::process_type_c()
|
||||
{
|
||||
if(h_angles[0] == 90.0f) {
|
||||
/* Some files are stored from 90° to 270°, so we just rotate them to the regular 0°-180° range here. */
|
||||
for(int i = 0; i < v_angles.size(); i++) {
|
||||
h_angles[i] -= 90.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if(h_angles[0] != 0.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(h_angles.size() == 1) {
|
||||
h_angles.push_back(360.0f);
|
||||
intensity.push_back(intensity[0]);
|
||||
}
|
||||
|
||||
if(h_angles[h_angles.size()-1] == 90.0f) {
|
||||
/* Only one quadrant is defined, so we need to mirror twice (from one to two, then to four).
|
||||
* Since the two->four mirroring step might also be required if we get an input of two quadrants,
|
||||
* we only do the first mirror here and later do the second mirror in either case. */
|
||||
int hnum = h_angles.size();
|
||||
for(int i = hnum-2; i >= 0; i--) {
|
||||
h_angles.push_back(180.0f - h_angles[i]);
|
||||
intensity.push_back(intensity[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if(h_angles[h_angles.size()-1] == 180.0f) {
|
||||
/* Mirror half to the full range. */
|
||||
int hnum = h_angles.size();
|
||||
for(int i = hnum-2; i >= 0; i--) {
|
||||
h_angles.push_back(360.0f - h_angles[i]);
|
||||
intensity.push_back(intensity[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Some files skip the 360° entry (contrary to standard) because it's supposed to be identical to the 0° entry.
|
||||
* If the file has a discernible order in its spacing, just fix this. */
|
||||
if(h_angles[h_angles.size()-1] != 360.0f) {
|
||||
int hnum = h_angles.size();
|
||||
float last_step = h_angles[hnum-1]-h_angles[hnum-2];
|
||||
float first_step = h_angles[1]-h_angles[0];
|
||||
float difference = 360.0f - h_angles[hnum-1];
|
||||
if(last_step == difference || first_step == difference) {
|
||||
h_angles.push_back(360.0f);
|
||||
intensity.push_back(intensity[0]);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
float v_first = v_angles[0], v_last = v_angles[v_angles.size()-1];
|
||||
if(v_first == 90.0f) {
|
||||
if(v_last == 180.0f) {
|
||||
/* Flip to ensure that vertical angles always start at 0°. */
|
||||
for(int i = 0; i < v_angles.size(); i++) {
|
||||
v_angles[i] = 180.0f - v_angles[i];
|
||||
}
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if(v_first != 0.0f) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IESFile::process()
|
||||
{
|
||||
if(h_angles.size() == 0 || v_angles.size() == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if(type == TYPE_B) {
|
||||
if(!process_type_b()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
assert(type == TYPE_C);
|
||||
if(!process_type_c()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
assert(v_angles[0] == 0.0f);
|
||||
assert(h_angles[0] == 0.0f);
|
||||
assert(h_angles[h_angles.size()-1] == 360.0f);
|
||||
|
||||
/* Convert from deg to rad. */
|
||||
for(int i = 0; i < v_angles.size(); i++) {
|
||||
v_angles[i] *= M_PI_F / 180.f;
|
||||
}
|
||||
for(int i = 0; i < h_angles.size(); i++) {
|
||||
h_angles[i] *= M_PI_F / 180.f;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
IESFile::~IESFile()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright 2011-2018 Blender Foundation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __UTIL_IES_H__
|
||||
#define __UTIL_IES_H__
|
||||
|
||||
#include "util/util_param.h"
|
||||
#include "util/util_vector.h"
|
||||
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
class IESFile {
|
||||
public:
|
||||
IESFile() {}
|
||||
~IESFile();
|
||||
|
||||
int packed_size();
|
||||
void pack(float *data);
|
||||
|
||||
bool load(ustring ies);
|
||||
void clear();
|
||||
|
||||
protected:
|
||||
bool parse(ustring ies);
|
||||
bool process();
|
||||
bool process_type_b();
|
||||
bool process_type_c();
|
||||
|
||||
/* The brightness distribution is stored in spherical coordinates.
|
||||
* The horizontal angles correspond to to theta in the regular notation
|
||||
* and always span the full range from 0° to 360°.
|
||||
* The vertical angles correspond to phi and always start at 0°. */
|
||||
vector<float> v_angles, h_angles;
|
||||
/* The actual values are stored here, with every entry storing the values
|
||||
* of one horizontal segment. */
|
||||
vector<vector<float> > intensity;
|
||||
|
||||
/* Types of angle representation in IES files. Currently, only B and C are supported. */
|
||||
enum IESType {
|
||||
TYPE_A = 3,
|
||||
TYPE_B = 2,
|
||||
TYPE_C = 1
|
||||
} type;
|
||||
};
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
#endif /* __UTIL_IES_H__ */
|
@@ -310,17 +310,6 @@ ccl_device_inline float4 float3_to_float4(const float3 a)
|
||||
return make_float4(a.x, a.y, a.z, 1.0f);
|
||||
}
|
||||
|
||||
ccl_device_inline float inverse_lerp(float a, float b, float x)
|
||||
{
|
||||
return (x - a) / (b - a);
|
||||
}
|
||||
|
||||
/* Cubic interpolation between b and c, a and d are the previous and next point. */
|
||||
ccl_device_inline float cubic_interp(float a, float b, float c, float d, float x)
|
||||
{
|
||||
return 0.5f*(((d + 3.0f*(b-c) - a)*x + (2.0f*a - 5.0f*b + 4.0f*c - d))*x + (c - a))*x + b;
|
||||
}
|
||||
|
||||
CCL_NAMESPACE_END
|
||||
|
||||
#include "util/util_math_int2.h"
|
||||
|
@@ -186,17 +186,12 @@ ccl_device_forceinline bool ray_triangle_intersect(
|
||||
#undef dot3
|
||||
}
|
||||
|
||||
/* Tests for an intersection between a ray and a quad defined by
|
||||
* its midpoint, normal and sides.
|
||||
* If ellipse is true, hits outside the ellipse that's enclosed by the
|
||||
* quad are rejected.
|
||||
*/
|
||||
ccl_device bool ray_quad_intersect(float3 ray_P, float3 ray_D,
|
||||
float ray_mint, float ray_maxt,
|
||||
float3 quad_P,
|
||||
float3 quad_u, float3 quad_v, float3 quad_n,
|
||||
float3 *isect_P, float *isect_t,
|
||||
float *isect_u, float *isect_v, bool ellipse)
|
||||
float *isect_u, float *isect_v)
|
||||
{
|
||||
/* Perform intersection test. */
|
||||
float t = -(dot(ray_P, quad_n) - dot(quad_P, quad_n)) / dot(ray_D, quad_n);
|
||||
@@ -205,23 +200,20 @@ ccl_device bool ray_quad_intersect(float3 ray_P, float3 ray_D,
|
||||
}
|
||||
const float3 hit = ray_P + t*ray_D;
|
||||
const float3 inplane = hit - quad_P;
|
||||
const float u = dot(inplane, quad_u) / dot(quad_u, quad_u);
|
||||
if(u < -0.5f || u > 0.5f) {
|
||||
const float u = dot(inplane, quad_u) / dot(quad_u, quad_u) + 0.5f;
|
||||
if(u < 0.0f || u > 1.0f) {
|
||||
return false;
|
||||
}
|
||||
const float v = dot(inplane, quad_v) / dot(quad_v, quad_v);
|
||||
if(v < -0.5f || v > 0.5f) {
|
||||
return false;
|
||||
}
|
||||
if(ellipse && (u*u + v*v > 0.25f)) {
|
||||
const float v = dot(inplane, quad_v) / dot(quad_v, quad_v) + 0.5f;
|
||||
if(v < 0.0f || v > 1.0f) {
|
||||
return false;
|
||||
}
|
||||
/* Store the result. */
|
||||
/* TODO(sergey): Check whether we can avoid some checks here. */
|
||||
if(isect_P != NULL) *isect_P = hit;
|
||||
if(isect_t != NULL) *isect_t = t;
|
||||
if(isect_u != NULL) *isect_u = u + 0.5f;
|
||||
if(isect_v != NULL) *isect_v = v + 0.5f;
|
||||
if(isect_u != NULL) *isect_u = u;
|
||||
if(isect_v != NULL) *isect_v = v;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@@ -144,18 +144,6 @@ ccl_device_inline void math_trimatrix_add_gramian_strided(ccl_global float *A,
|
||||
}
|
||||
}
|
||||
|
||||
ccl_device_inline void math_trimatrix_add_gramian(ccl_global float *A,
|
||||
int n,
|
||||
const float *ccl_restrict v,
|
||||
float weight)
|
||||
{
|
||||
for(int row = 0; row < n; row++) {
|
||||
for(int col = 0; col <= row; col++) {
|
||||
MATHS(A, row, col, 1) += v[row]*v[col]*weight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Transpose matrix A inplace. */
|
||||
ccl_device_inline void math_matrix_transpose(ccl_global float *A, int n, int stride)
|
||||
{
|
||||
|
@@ -119,45 +119,6 @@ int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt)
|
||||
|
||||
#endif
|
||||
|
||||
/* XXX TODO Probably fix to correct modern flags in code? Not sure how old FFMPEG we want to support though,
|
||||
* so for now this will do. */
|
||||
|
||||
#ifndef FF_MIN_BUFFER_SIZE
|
||||
# ifdef AV_INPUT_BUFFER_MIN_SIZE
|
||||
# define FF_MIN_BUFFER_SIZE AV_INPUT_BUFFER_MIN_SIZE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef FF_INPUT_BUFFER_PADDING_SIZE
|
||||
# ifdef AV_INPUT_BUFFER_PADDING_SIZE
|
||||
# define FF_INPUT_BUFFER_PADDING_SIZE AV_INPUT_BUFFER_PADDING_SIZE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CODEC_FLAG_GLOBAL_HEADER
|
||||
# ifdef AV_CODEC_FLAG_GLOBAL_HEADER
|
||||
# define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CODEC_FLAG_GLOBAL_HEADER
|
||||
# ifdef AV_CODEC_FLAG_GLOBAL_HEADER
|
||||
# define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CODEC_FLAG_INTERLACED_DCT
|
||||
# ifdef AV_CODEC_FLAG_INTERLACED_DCT
|
||||
# define CODEC_FLAG_INTERLACED_DCT AV_CODEC_FLAG_INTERLACED_DCT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CODEC_FLAG_INTERLACED_ME
|
||||
# ifdef AV_CODEC_FLAG_INTERLACED_ME
|
||||
# define CODEC_FLAG_INTERLACED_ME AV_CODEC_FLAG_INTERLACED_ME
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* FFmpeg upstream 1.0 is the first who added AV_ prefix. */
|
||||
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 59, 100)
|
||||
# define AV_CODEC_ID_NONE CODEC_ID_NONE
|
||||
|
@@ -61,7 +61,6 @@ void GWN_indexbuf_add_primitive_restart(Gwn_IndexBufBuilder*);
|
||||
void GWN_indexbuf_add_point_vert(Gwn_IndexBufBuilder*, unsigned v);
|
||||
void GWN_indexbuf_add_line_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2);
|
||||
void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2, unsigned v3);
|
||||
void GWN_indexbuf_add_line_adj_verts(Gwn_IndexBufBuilder*, unsigned v1, unsigned v2, unsigned v3, unsigned v4);
|
||||
|
||||
Gwn_IndexBuf* GWN_indexbuf_build(Gwn_IndexBufBuilder*);
|
||||
void GWN_indexbuf_build_in_place(Gwn_IndexBufBuilder*, Gwn_IndexBuf*);
|
||||
|
@@ -22,7 +22,6 @@ typedef enum {
|
||||
GWN_PRIM_TRI_STRIP,
|
||||
GWN_PRIM_TRI_FAN,
|
||||
|
||||
GWN_PRIM_LINES_ADJ,
|
||||
GWN_PRIM_TRIS_ADJ,
|
||||
GWN_PRIM_LINE_STRIP_ADJ,
|
||||
|
||||
|
@@ -63,9 +63,6 @@ void GWN_indexbuf_init(Gwn_IndexBufBuilder* builder, Gwn_PrimType prim_type, uns
|
||||
case GWN_PRIM_TRIS:
|
||||
verts_per_prim = 3;
|
||||
break;
|
||||
case GWN_PRIM_LINES_ADJ:
|
||||
verts_per_prim = 4;
|
||||
break;
|
||||
default:
|
||||
#if TRUST_NO_ONE
|
||||
assert(false);
|
||||
@@ -130,19 +127,6 @@ void GWN_indexbuf_add_tri_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsig
|
||||
GWN_indexbuf_add_generic_vert(builder, v3);
|
||||
}
|
||||
|
||||
void GWN_indexbuf_add_line_adj_verts(Gwn_IndexBufBuilder* builder, unsigned v1, unsigned v2, unsigned v3, unsigned v4)
|
||||
{
|
||||
#if TRUST_NO_ONE
|
||||
assert(builder->prim_type == GWN_PRIM_LINES_ADJ);
|
||||
assert(v2 != v3); /* only the line need diff indices */
|
||||
#endif
|
||||
|
||||
GWN_indexbuf_add_generic_vert(builder, v1);
|
||||
GWN_indexbuf_add_generic_vert(builder, v2);
|
||||
GWN_indexbuf_add_generic_vert(builder, v3);
|
||||
GWN_indexbuf_add_generic_vert(builder, v4);
|
||||
}
|
||||
|
||||
#if GWN_TRACK_INDEX_RANGE
|
||||
// Everything remains 32 bit while building to keep things simple.
|
||||
// Find min/max after, then convert to smallest index type possible.
|
||||
|
@@ -24,7 +24,6 @@ Gwn_PrimClass GWN_primtype_class(Gwn_PrimType prim_type)
|
||||
[GWN_PRIM_TRI_STRIP] = GWN_PRIM_CLASS_SURFACE,
|
||||
[GWN_PRIM_TRI_FAN] = GWN_PRIM_CLASS_SURFACE,
|
||||
|
||||
[GWN_PRIM_LINES_ADJ] = GWN_PRIM_CLASS_LINE,
|
||||
[GWN_PRIM_LINE_STRIP_ADJ] = GWN_PRIM_CLASS_LINE,
|
||||
[GWN_PRIM_TRIS_ADJ] = GWN_PRIM_CLASS_SURFACE,
|
||||
|
||||
@@ -58,7 +57,6 @@ GLenum convert_prim_type_to_gl(Gwn_PrimType prim_type)
|
||||
[GWN_PRIM_TRI_STRIP] = GL_TRIANGLE_STRIP,
|
||||
[GWN_PRIM_TRI_FAN] = GL_TRIANGLE_FAN,
|
||||
|
||||
[GWN_PRIM_LINES_ADJ] = GL_LINES_ADJACENCY,
|
||||
[GWN_PRIM_LINE_STRIP_ADJ] = GL_LINE_STRIP_ADJACENCY,
|
||||
[GWN_PRIM_TRIS_ADJ] = GL_TRIANGLES_ADJACENCY,
|
||||
};
|
||||
|
@@ -192,7 +192,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char
|
||||
|
||||
char *GHOST_DropTargetX11::FileUrlDecode(char *fileUrl)
|
||||
{
|
||||
if (strncmp(fileUrl, "file://", 7) == 0) {
|
||||
if (strncpy(fileUrl, "file://", 7) != 0) {
|
||||
/* assume one character of encoded URL can be expanded to 4 chars max */
|
||||
int decodedSize = 4 * strlen(fileUrl) + 1;
|
||||
char *decodedPath = (char *)malloc(decodedSize);
|
||||
|
@@ -171,7 +171,7 @@ void *MEM_lockfree_dupallocN(const void *vmemh)
|
||||
void *newp = NULL;
|
||||
if (vmemh) {
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
const size_t prev_size = MEM_lockfree_allocN_len(vmemh);
|
||||
const size_t prev_size = MEM_allocN_len(vmemh);
|
||||
if (UNLIKELY(MEMHEAD_IS_MMAP(memh))) {
|
||||
newp = MEM_lockfree_mapallocN(prev_size, "dupli_mapalloc");
|
||||
}
|
||||
@@ -196,7 +196,7 @@ void *MEM_lockfree_reallocN_id(void *vmemh, size_t len, const char *str)
|
||||
|
||||
if (vmemh) {
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
size_t old_len = MEM_lockfree_allocN_len(vmemh);
|
||||
size_t old_len = MEM_allocN_len(vmemh);
|
||||
|
||||
if (LIKELY(!MEMHEAD_IS_ALIGNED(memh))) {
|
||||
newp = MEM_lockfree_mallocN(len, "realloc");
|
||||
@@ -204,9 +204,9 @@ void *MEM_lockfree_reallocN_id(void *vmemh, size_t len, const char *str)
|
||||
else {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
newp = MEM_lockfree_mallocN_aligned(
|
||||
len,
|
||||
(size_t)memh_aligned->alignment,
|
||||
"realloc");
|
||||
old_len,
|
||||
(size_t)memh_aligned->alignment,
|
||||
"realloc");
|
||||
}
|
||||
|
||||
if (newp) {
|
||||
@@ -235,17 +235,16 @@ void *MEM_lockfree_recallocN_id(void *vmemh, size_t len, const char *str)
|
||||
|
||||
if (vmemh) {
|
||||
MemHead *memh = MEMHEAD_FROM_PTR(vmemh);
|
||||
size_t old_len = MEM_lockfree_allocN_len(vmemh);
|
||||
size_t old_len = MEM_allocN_len(vmemh);
|
||||
|
||||
if (LIKELY(!MEMHEAD_IS_ALIGNED(memh))) {
|
||||
newp = MEM_lockfree_mallocN(len, "recalloc");
|
||||
}
|
||||
else {
|
||||
MemHeadAligned *memh_aligned = MEMHEAD_ALIGNED_FROM_PTR(vmemh);
|
||||
newp = MEM_lockfree_mallocN_aligned(
|
||||
len,
|
||||
(size_t)memh_aligned->alignment,
|
||||
"recalloc");
|
||||
newp = MEM_lockfree_mallocN_aligned(old_len,
|
||||
(size_t)memh_aligned->alignment,
|
||||
"recalloc");
|
||||
}
|
||||
|
||||
if (newp) {
|
||||
|
391
make.bat
391
make.bat
@@ -4,66 +4,359 @@ REM This is for users who like to configure & build Blender with a single comman
|
||||
setlocal EnableDelayedExpansion
|
||||
setlocal ENABLEEXTENSIONS
|
||||
set BLENDER_DIR=%~dp0
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\reset_variables.cmd"
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\check_spaces_in_path.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\parse_arguments.cmd" %*
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\find_dependencies.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
if "%SHOW_HELP%" == "1" (
|
||||
call "%BLENDER_DIR%\build_files\windows\show_help.cmd"
|
||||
set BLENDER_DIR_NOSPACES=%BLENDER_DIR: =%
|
||||
for %%X in (svn.exe) do (set HAS_SVN=%%~$PATH:X)
|
||||
if not "%BLENDER_DIR%"=="%BLENDER_DIR_NOSPACES%" (
|
||||
echo There are spaces detected in the build path "%BLENDER_DIR%", this is currently not supported, exiting....
|
||||
goto EOF
|
||||
)
|
||||
set BUILD_DIR=%BLENDER_DIR%..\build_windows
|
||||
set BUILD_TYPE=Release
|
||||
rem reset all variables so they do not get accidentally get carried over from previous builds
|
||||
set BUILD_DIR_OVERRRIDE=
|
||||
set BUILD_CMAKE_ARGS=
|
||||
set BUILD_ARCH=
|
||||
set BUILD_VS_VER=
|
||||
set BUILD_VS_YEAR=
|
||||
set BUILD_VS_LIBDIRPOST=
|
||||
set BUILD_VS_LIBDIR=
|
||||
set BUILD_VS_SVNDIR=
|
||||
set BUILD_NGE=
|
||||
set KEY_NAME=
|
||||
set MSBUILD_PLATFORM=
|
||||
set MUST_CLEAN=
|
||||
set NOBUILD=
|
||||
set TARGET=
|
||||
set WINDOWS_ARCH=
|
||||
set TESTS_CMAKE_ARGS=
|
||||
:argv_loop
|
||||
if NOT "%1" == "" (
|
||||
|
||||
if "%BUILD_UPDATE%" == "1" (
|
||||
call "%BLENDER_DIR%\build_files\windows\update_sources.cmd"
|
||||
goto EOF
|
||||
)
|
||||
REM Help Message
|
||||
if "%1" == "help" (
|
||||
goto HELP
|
||||
)
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\detect_architecture.cmd"
|
||||
|
||||
if "%BUILD_VS_YEAR%" == "" (
|
||||
call "%BLENDER_DIR%\build_files\windows\autodetect_msvc.cmd"
|
||||
if errorlevel 1 (
|
||||
echo Visual Studio not found ^(try with the 'verbose' switch for more information^)
|
||||
REM Build Types
|
||||
if "%1" == "debug" (
|
||||
set BUILD_TYPE=Debug
|
||||
REM Build Configurations
|
||||
) else if "%1" == "noge" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_GAMEENGINE=OFF -DWITH_PLAYER=OFF
|
||||
set BUILD_NGE=_noge
|
||||
) else if "%1" == "builddir" (
|
||||
set BUILD_DIR_OVERRRIDE="%BLENDER_DIR%..\%2"
|
||||
shift /1
|
||||
) else if "%1" == "with_tests" (
|
||||
set TESTS_CMAKE_ARGS=-DWITH_GTESTS=On
|
||||
) else if "%1" == "full" (
|
||||
set TARGET=Full
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\blender_full.cmake"
|
||||
) else if "%1" == "lite" (
|
||||
set TARGET=Lite
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\blender_lite.cmake"
|
||||
) else if "%1" == "cycles" (
|
||||
set TARGET=Cycles
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\cycles_standalone.cmake"
|
||||
) else if "%1" == "headless" (
|
||||
set TARGET=Headless
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\blender_headless.cmake"
|
||||
) else if "%1" == "bpy" (
|
||||
set TARGET=Bpy
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\bpy_module.cmake"
|
||||
) else if "%1" == "release" (
|
||||
set TARGET=Release
|
||||
) else if "%1" == "x86" (
|
||||
set BUILD_ARCH=x86
|
||||
) else if "%1" == "x64" (
|
||||
set BUILD_ARCH=x64
|
||||
) else if "%1" == "2017" (
|
||||
set BUILD_VS_VER=15
|
||||
set BUILD_VS_YEAR=2017
|
||||
set BUILD_VS_LIBDIRPOST=vc14
|
||||
) else if "%1" == "2015" (
|
||||
set BUILD_VS_VER=14
|
||||
set BUILD_VS_YEAR=2015
|
||||
set BUILD_VS_LIBDIRPOST=vc14
|
||||
) else if "%1" == "2013" (
|
||||
set BUILD_VS_VER=12
|
||||
set BUILD_VS_YEAR=2013
|
||||
set BUILD_VS_LIBDIRPOST=vc12
|
||||
) else if "%1" == "packagename" (
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DCPACK_OVERRIDE_PACKAGENAME="%2"
|
||||
shift /1
|
||||
) else if "%1" == "nobuild" (
|
||||
set NOBUILD=1
|
||||
) else if "%1" == "showhash" (
|
||||
for /f "delims=" %%i in ('git rev-parse HEAD') do echo Branch_hash=%%i
|
||||
cd release/datafiles/locale
|
||||
for /f "delims=" %%i in ('git rev-parse HEAD') do echo Locale_hash=%%i
|
||||
cd %~dp0
|
||||
cd release/scripts/addons
|
||||
for /f "delims=" %%i in ('git rev-parse HEAD') do echo Addons_Hash=%%i
|
||||
cd %~dp0
|
||||
goto EOF
|
||||
REM Non-Build Commands
|
||||
) else if "%1" == "update" (
|
||||
svn up ../lib/*
|
||||
git pull --rebase
|
||||
git submodule update --remote
|
||||
goto EOF
|
||||
) else if "%1" == "clean" (
|
||||
set MUST_CLEAN=1
|
||||
) else (
|
||||
echo Command "%1" unknown, aborting!
|
||||
goto EOF
|
||||
)
|
||||
) else (
|
||||
call "%BLENDER_DIR%\build_files\windows\detect_msvc%BUILD_VS_YEAR%.cmd"
|
||||
if errorlevel 1 (
|
||||
echo Visual Studio %BUILD_VS_YEAR% not found ^(try with the 'verbose' switch for more information^)
|
||||
|
||||
shift /1
|
||||
goto argv_loop
|
||||
)
|
||||
if "%BUILD_ARCH%"=="" (
|
||||
if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
set BUILD_ARCH=x64
|
||||
) else if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
set BUILD_ARCH=x64
|
||||
) else (
|
||||
set WINDOWS_ARCH=
|
||||
set BUILD_ARCH=x86
|
||||
)
|
||||
) else if "%BUILD_ARCH%"=="x64" (
|
||||
set WINDOWS_ARCH= Win64
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set WINDOWS_ARCH=
|
||||
)
|
||||
|
||||
if "%BUILD_VS_VER%"=="" (
|
||||
set BUILD_VS_VER=12
|
||||
set BUILD_VS_YEAR=2013
|
||||
set BUILD_VS_LIBDIRPOST=vc12
|
||||
)
|
||||
|
||||
if "%BUILD_ARCH%"=="x64" (
|
||||
set MSBUILD_PLATFORM=x64
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set MSBUILD_PLATFORM=win32
|
||||
)
|
||||
|
||||
|
||||
if "%target%"=="Release" (
|
||||
rem for vc12 check for both cuda 7.5 and 8
|
||||
if "%CUDA_PATH%"=="" (
|
||||
echo Cuda Not found, aborting!
|
||||
goto EOF
|
||||
)
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% ^
|
||||
-C"%BLENDER_DIR%\build_files\cmake\config\blender_release.cmake"
|
||||
)
|
||||
|
||||
:DetectMSVC
|
||||
REM Detect MSVC Installation for 2013-2015
|
||||
if DEFINED VisualStudioVersion goto msvc_detect_finally
|
||||
set VALUE_NAME=ProductDir
|
||||
REM Check 64 bits
|
||||
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO set MSVC_VC_DIR=%%C
|
||||
if DEFINED MSVC_VC_DIR goto msvc_detect_finally
|
||||
REM Check 32 bits
|
||||
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\%BUILD_VS_VER%.0\Setup\VC"
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO set MSVC_VC_DIR=%%C
|
||||
if DEFINED MSVC_VC_DIR goto msvc_detect_finally
|
||||
:msvc_detect_finally
|
||||
if DEFINED MSVC_VC_DIR call "%MSVC_VC_DIR%\vcvarsall.bat"
|
||||
if DEFINED MSVC_VC_DIR goto sanity_checks
|
||||
|
||||
rem MSVC Build environment 2017 and up.
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SXS\VS7" /v %BUILD_VS_VER%.0 2^>nul`) DO set MSVC_VS_DIR=%%C
|
||||
if DEFINED MSVC_VS_DIR goto msvc_detect_finally_2017
|
||||
REM Check 32 bits
|
||||
for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\sxs\vs7" /v %BUILD_VS_VER%.0 2^>nul`) DO set MSVC_VS_DIR=%%C
|
||||
if DEFINED MSVC_VS_DIR goto msvc_detect_finally_2017
|
||||
:msvc_detect_finally_2017
|
||||
if DEFINED MSVC_VS_DIR call "%MSVC_VS_DIR%\Common7\Tools\VsDevCmd.bat"
|
||||
|
||||
:sanity_checks
|
||||
REM Sanity Checks
|
||||
where /Q msbuild
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
if "%BUILD_VS_VER%"=="12" (
|
||||
rem vs12 not found, try vs14
|
||||
echo Visual Studio 2013 not found, trying Visual Studio 2015.
|
||||
set BUILD_VS_VER=14
|
||||
set BUILD_VS_YEAR=2015
|
||||
set BUILD_VS_LIBDIRPOST=vc14
|
||||
goto DetectMSVC
|
||||
) else (
|
||||
echo Error: "MSBuild" command not in the PATH.
|
||||
echo You must have MSVC installed and run this from the "Developer Command Prompt"
|
||||
echo ^(available from Visual Studio's Start menu entry^), aborting!
|
||||
goto EOF
|
||||
)
|
||||
)
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\set_build_dir.cmd"
|
||||
|
||||
echo Building blender with VS%BUILD_VS_YEAR% for %BUILD_ARCH% in %BUILD_DIR%
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\check_libraries.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\check_submodules.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
if "%BUILD_WITH_NINJA%" == "" (
|
||||
call "%BLENDER_DIR%\build_files\windows\configure_msbuild.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\build_msbuild.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
) else (
|
||||
call "%BLENDER_DIR%\build_files\windows\configure_ninja.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
|
||||
call "%BLENDER_DIR%\build_files\windows\build_ninja.cmd"
|
||||
if errorlevel 1 goto EOF
|
||||
set BUILD_DIR=%BUILD_DIR%_%TARGET%%BUILD_NGE%_%BUILD_ARCH%_vc%BUILD_VS_VER%_%BUILD_TYPE%
|
||||
if NOT "%BUILD_DIR_OVERRRIDE%"=="" (
|
||||
set BUILD_DIR=%BUILD_DIR_OVERRRIDE%
|
||||
)
|
||||
|
||||
where /Q cmake
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo Error: "CMake" command not in the PATH.
|
||||
echo You must have CMake installed and added to your PATH, aborting!
|
||||
goto EOF
|
||||
)
|
||||
|
||||
if "%BUILD_ARCH%"=="x64" (
|
||||
set BUILD_VS_SVNDIR=win64_%BUILD_VS_LIBDIRPOST%
|
||||
) else if "%BUILD_ARCH%"=="x86" (
|
||||
set BUILD_VS_SVNDIR=windows_%BUILD_VS_LIBDIRPOST%
|
||||
)
|
||||
set BUILD_VS_LIBDIR="%BLENDER_DIR%..\lib\%BUILD_VS_SVNDIR%"
|
||||
|
||||
if NOT EXIST %BUILD_VS_LIBDIR% (
|
||||
rem libs not found, but svn is on the system
|
||||
if not "%HAS_SVN%"=="" (
|
||||
echo.
|
||||
echo The required external libraries in %BUILD_VS_LIBDIR% are missing
|
||||
echo.
|
||||
set /p GetLibs= "Would you like to download them? (y/n)"
|
||||
if /I "!GetLibs!"=="Y" (
|
||||
echo.
|
||||
echo Downloading %BUILD_VS_SVNDIR% libraries, please wait.
|
||||
echo.
|
||||
svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/%BUILD_VS_SVNDIR% %BUILD_VS_LIBDIR%
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if NOT EXIST %BUILD_VS_LIBDIR% (
|
||||
echo Error: Path to libraries not found "%BUILD_VS_LIBDIR%"
|
||||
echo This is needed for building, aborting!
|
||||
goto EOF
|
||||
)
|
||||
|
||||
if "%TARGET%"=="" (
|
||||
echo Error: Convenience target not set
|
||||
echo This is required for building, aborting!
|
||||
echo .
|
||||
goto HELP
|
||||
)
|
||||
|
||||
set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -G "Visual Studio %BUILD_VS_VER% %BUILD_VS_YEAR%%WINDOWS_ARCH%" %TESTS_CMAKE_ARGS%
|
||||
if NOT EXIST %BUILD_DIR%\nul (
|
||||
mkdir %BUILD_DIR%
|
||||
)
|
||||
if "%MUST_CLEAN%"=="1" (
|
||||
echo Cleaning %BUILD_DIR%
|
||||
msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:clean ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM%
|
||||
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo Cleaned "%BUILD_DIR%"
|
||||
)
|
||||
goto EOF
|
||||
)
|
||||
REM Only configure on first run or when called with nobuild
|
||||
if NOT EXIST %BUILD_DIR%\Blender.sln set MUST_CONFIGURE=1
|
||||
if "%NOBUILD%"=="1" set MUST_CONFIGURE=1
|
||||
|
||||
if "%MUST_CONFIGURE%"=="1" (
|
||||
cmake ^
|
||||
%BUILD_CMAKE_ARGS% ^
|
||||
-H%BLENDER_DIR% ^
|
||||
-B%BUILD_DIR% ^
|
||||
%BUILD_CMAKE_ARGS%
|
||||
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo "Configuration Failed"
|
||||
goto EOF
|
||||
)
|
||||
)
|
||||
if DEFINED MSVC_VC_DIR echo call "%MSVC_VC_DIR%\vcvarsall.bat" > %BUILD_DIR%\rebuild.cmd
|
||||
if DEFINED MSVC_VS_DIR echo call "%MSVC_VS_DIR%\Common7\Tools\VsDevCmd.bat" > %BUILD_DIR%\rebuild.cmd
|
||||
echo cmake . >> %BUILD_DIR%\rebuild.cmd
|
||||
echo msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:build ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/maxcpucount:2 ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% ^
|
||||
/flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log >> %BUILD_DIR%\rebuild.cmd
|
||||
echo msbuild ^
|
||||
%BUILD_DIR%\INSTALL.vcxproj ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% >> %BUILD_DIR%\rebuild.cmd
|
||||
|
||||
if "%NOBUILD%"=="1" goto EOF
|
||||
|
||||
msbuild ^
|
||||
%BUILD_DIR%\Blender.sln ^
|
||||
/target:build ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/maxcpucount:2 ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM% ^
|
||||
/flp:Summary;Verbosity=minimal;LogFile=%BUILD_DIR%\Build.log
|
||||
|
||||
if %ERRORLEVEL% NEQ 0 (
|
||||
echo "Build Failed"
|
||||
goto EOF
|
||||
)
|
||||
|
||||
msbuild ^
|
||||
%BUILD_DIR%\INSTALL.vcxproj ^
|
||||
/property:Configuration=%BUILD_TYPE% ^
|
||||
/verbosity:minimal ^
|
||||
/p:platform=%MSBUILD_PLATFORM%
|
||||
|
||||
echo.
|
||||
echo At any point you can optionally modify your build configuration by editing:
|
||||
echo "%BUILD_DIR%\CMakeCache.txt", then run "rebuild.cmd" in the build folder to build with the changes applied.
|
||||
echo.
|
||||
echo Blender successfully built, run from: "%BUILD_DIR%\bin\%BUILD_TYPE%\blender.exe"
|
||||
echo.
|
||||
goto EOF
|
||||
:HELP
|
||||
echo.
|
||||
echo Convenience targets
|
||||
echo - release ^(identical to the official blender.org builds^)
|
||||
echo - full ^(same as release minus the cuda kernels^)
|
||||
echo - lite
|
||||
echo - headless
|
||||
echo - cycles
|
||||
echo - bpy
|
||||
echo.
|
||||
echo Utilities ^(not associated with building^)
|
||||
echo - clean ^(Target must be set^)
|
||||
echo - update
|
||||
echo - nobuild ^(only generate project files^)
|
||||
echo - showhash ^(Show git hashes of source tree^)
|
||||
echo.
|
||||
echo Configuration options
|
||||
echo - with_tests ^(enable building unit tests^)
|
||||
echo - noge ^(disable building game enginge and player^)
|
||||
echo - debug ^(Build an unoptimized debuggable build^)
|
||||
echo - packagename [newname] ^(override default cpack package name^)
|
||||
echo - buildir [newdir] ^(override default build folder^)
|
||||
echo - x86 ^(override host auto-detect and build 32 bit code^)
|
||||
echo - x64 ^(override host auto-detect and build 64 bit code^)
|
||||
echo - 2013 ^(build with visual studio 2013^)
|
||||
echo - 2015 ^(build with visual studio 2015^) [EXPERIMENTAL]
|
||||
echo - 2017 ^(build with visual studio 2017^) [EXPERIMENTAL]
|
||||
echo.
|
||||
|
||||
:EOF
|
||||
|
@@ -31674,242 +31674,6 @@
|
||||
y1="75"
|
||||
x2="477.5"
|
||||
y2="77.5" />
|
||||
<linearGradient
|
||||
id="linearGradient32083">
|
||||
<stop
|
||||
style="stop-color:#3465a5;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop32075" />
|
||||
<stop
|
||||
id="stop32077"
|
||||
offset="0.4636974"
|
||||
style="stop-color:#6d92bf;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop32079"
|
||||
offset="0.56071091"
|
||||
style="stop-color:#422200;stop-opacity:1" />
|
||||
<stop
|
||||
style="stop-color:#ae977b;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop32081" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient16201"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop16197"
|
||||
offset="0"
|
||||
style="stop-color:#3162a3;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop16199"
|
||||
offset="1"
|
||||
style="stop-color:#f7fefe;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient32049">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0.502"
|
||||
offset="0"
|
||||
id="stop32045" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop32047" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient32083"
|
||||
id="linearGradient1839"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)"
|
||||
x1="130.96371"
|
||||
y1="93.79351"
|
||||
x2="130.95943"
|
||||
y2="102.0938" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient32049"
|
||||
id="linearGradient1843"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.99959671,0,0,1.0002103,-77.491851,-1.6095542)"
|
||||
x1="134.59244"
|
||||
y1="102.70123"
|
||||
x2="129.80527"
|
||||
y2="99.260376" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0756796,0,0,1.0756796,169.29413,52.235312)"
|
||||
r="2.5804064"
|
||||
fy="221.18524"
|
||||
fx="126.53663"
|
||||
cy="221.18524"
|
||||
cx="126.53663"
|
||||
id="radialGradient16215-8-6"
|
||||
xlink:href="#linearGradient18134"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient32275"
|
||||
id="linearGradient1837"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.24672296,0,0,0.24587247,48.791231,-7.4945859)"
|
||||
x1="-106.86201"
|
||||
y1="54.004005"
|
||||
x2="-118.21918"
|
||||
y2="42.824642" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient32275">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.502"
|
||||
offset="0"
|
||||
id="stop32271" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.502"
|
||||
offset="1"
|
||||
id="stop32273" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientTransform="matrix(0.74982815,0,0,0.74524045,-395.41513,-347.41042)"
|
||||
r="8"
|
||||
fy="116.10581"
|
||||
fx="135.00543"
|
||||
cy="116.10581"
|
||||
cx="135.00543"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient16343-7"
|
||||
xlink:href="#linearGradient20909"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
id="linearGradient20909">
|
||||
<stop
|
||||
id="stop20905"
|
||||
offset="0"
|
||||
style="stop-color:#f3b979;stop-opacity:1" />
|
||||
<stop
|
||||
id="stop20907"
|
||||
offset="1"
|
||||
style="stop-color:#be6405;stop-opacity:1" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient18134"
|
||||
id="linearGradient1833"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.68749955,0,0,0.68749925,174.25458,209.80705)"
|
||||
x1="125.81818"
|
||||
y1="111.81818"
|
||||
x2="143.88347"
|
||||
y2="129.27184" />
|
||||
<radialGradient
|
||||
r="4.0908751"
|
||||
fy="224.26517"
|
||||
fx="129.04718"
|
||||
cy="224.26517"
|
||||
cx="129.04718"
|
||||
gradientTransform="matrix(2.3313393,0.09414236,-0.07778124,1.9261749,-17.080128,-154.09391)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient16345-9"
|
||||
xlink:href="#linearGradient20915"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient20915">
|
||||
<stop
|
||||
style="stop-color:#efa351;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop20911" />
|
||||
<stop
|
||||
style="stop-color:#f7fefe;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop20913" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0756796,0,0,1.0756796,126.28771,52.31486)"
|
||||
r="2.5804064"
|
||||
fy="221.18524"
|
||||
fx="126.53663"
|
||||
cy="221.18524"
|
||||
cx="126.53663"
|
||||
id="radialGradient16215-2"
|
||||
xlink:href="#linearGradient18134"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient37542"
|
||||
id="linearGradient15186"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.9995967,0,0,1.0002103,-78.949724,-0.02739749)"
|
||||
x1="109.04134"
|
||||
y1="75.666725"
|
||||
x2="135.45256"
|
||||
y2="103.11092" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient319"
|
||||
id="linearGradient15188"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.1000194,0,0,1.0998287,-4.6508478,-9.2334126)"
|
||||
x1="47.655102"
|
||||
y1="93.805557"
|
||||
x2="59.057678"
|
||||
y2="105.27895" />
|
||||
<linearGradient
|
||||
id="linearGradient16192">
|
||||
<stop
|
||||
style="stop-color:#b69f83;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop16188" />
|
||||
<stop
|
||||
style="stop-color:#422200;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop16190" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientTransform="matrix(0.74982815,0,0,0.74524045,-395.41513,-347.41042)"
|
||||
r="8"
|
||||
fy="116.10581"
|
||||
fx="135.00543"
|
||||
cy="116.10581"
|
||||
cx="135.00543"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient16343"
|
||||
xlink:href="#linearGradient16192"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
gradientTransform="matrix(0.68749955,0,0,0.68749925,174.25458,209.80705)"
|
||||
y2="129.27184"
|
||||
x2="143.88347"
|
||||
y1="111.81818"
|
||||
x1="125.81818"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient15938"
|
||||
xlink:href="#linearGradient18134"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="4.0908751"
|
||||
fy="224.26517"
|
||||
fx="129.04718"
|
||||
cy="224.26517"
|
||||
cx="129.04718"
|
||||
gradientTransform="matrix(2.3313393,0.09414236,-0.07778124,1.9261749,-17.080128,-154.09391)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient16345"
|
||||
xlink:href="#linearGradient16201"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.0756796,0,0,1.0756796,126.28771,52.31486)"
|
||||
r="2.5804064"
|
||||
fy="221.18524"
|
||||
fx="126.53663"
|
||||
cy="221.18524"
|
||||
cx="126.53663"
|
||||
id="radialGradient16215"
|
||||
xlink:href="#linearGradient18134"
|
||||
inkscape:collect="always" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@@ -92095,245 +91859,9 @@
|
||||
inkscape:transform-center-x="1"
|
||||
inkscape:transform-center-y="2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
y="388.14911"
|
||||
x="236.65889"
|
||||
height="15.857694"
|
||||
width="15.371461"
|
||||
id="rect24007-4-3"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.73221993;marker:none;enable-background:accumulate" />
|
||||
<rect
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8.5497179;marker:none;enable-background:accumulate"
|
||||
id="rect15296-7-7"
|
||||
width="48.855526"
|
||||
height="48.855526"
|
||||
x="-358.88776"
|
||||
y="435.15311" />
|
||||
<g
|
||||
transform="matrix(1.0409533,0,0,1.0409533,-31.873537,156.12279)"
|
||||
id="ICON_OUTLINER_OB_LIGHTPROBE"
|
||||
style="display:inline;opacity:1;enable-background:new">
|
||||
<ellipse
|
||||
id="path15301-7-9"
|
||||
style="display:inline;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:#422200;stroke-width:0.90000004;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
|
||||
cx="265.0126"
|
||||
cy="290.93195"
|
||||
rx="6.4540777"
|
||||
ry="6.4615378" />
|
||||
<ellipse
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16343-7);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.74753082;enable-background:new"
|
||||
id="path15303-40-2"
|
||||
transform="matrix(-0.99371287,-0.11195862,0.11396043,-0.99348529,0,0)"
|
||||
cx="-296.43781"
|
||||
cy="-259.47205"
|
||||
rx="5.9986253"
|
||||
ry="5.9619236" />
|
||||
<ellipse
|
||||
id="path15305-1-2"
|
||||
style="display:inline;fill:none;stroke:url(#linearGradient1833);stroke-width:1.00000083;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
|
||||
cx="265.00449"
|
||||
cy="290.93195"
|
||||
rx="5.4999962"
|
||||
ry="5.4999943" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16345-9);fill-opacity:1;stroke:none;stroke-width:1.70456684;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;enable-background:new"
|
||||
d="m 269.25291,290.16569 c 0,1.9641 -1.9029,2.10245 -4.25024,2.10245 -2.34735,0 -4.25025,-0.13833 -4.25025,-2.10245 0,-1.96408 1.9029,-3.5563 4.25025,-3.5563 2.34734,0 4.25024,1.59222 4.25024,3.5563 z"
|
||||
id="path16194-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsc" />
|
||||
<circle
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16215-2);fill-opacity:1;stroke:none;stroke-width:1.70456684;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;enable-background:new"
|
||||
id="path16207-97"
|
||||
cx="262.40057"
|
||||
cy="290.23932"
|
||||
r="2.7756906" />
|
||||
</g>
|
||||
<rect
|
||||
y="388.53351"
|
||||
x="276.20624"
|
||||
height="15.857694"
|
||||
width="15.371461"
|
||||
id="rect41257-5-3"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.73221993;marker:none;enable-background:accumulate" />
|
||||
<g
|
||||
style="display:inline;opacity:1;stroke-width:0.92378205;enable-background:new"
|
||||
id="ICON_LIGHTPROBE_GRID"
|
||||
transform="matrix(4.1824085,0,0,4.3147085,197.8811,376.91182)"
|
||||
inkscape:label="#ICON_LIGHTPROBE_GRID">
|
||||
<g
|
||||
id="g41259-1-1"
|
||||
style="display:inline;stroke-width:0.92378205;enable-background:new"
|
||||
transform="matrix(0.26467734,0,0,0.26447615,7.1493505,-21.614208)">
|
||||
<rect
|
||||
style="fill:url(#linearGradient15186);fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:0.73904407;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect41261-7-2"
|
||||
width="11.995742"
|
||||
height="12.004883"
|
||||
x="46.499645"
|
||||
y="92.490814" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#fdfefe;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="m 46.907234,96.606288 v -3.716421 l 3.713597,5e-6 v 3.716421 z"
|
||||
id="path41263-3-9"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#6289b8;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 50.631333,96.588054 v -3.698738 l 3.695921,1.2e-5 v 3.698738 z"
|
||||
id="path41263-3-7-3"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#4e709a;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 54.316208,96.645534 v -3.751799 l 3.784289,1.2e-5 v 3.751798 z"
|
||||
id="path41263-3-7-9-19"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#6289b8;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 46.906687,100.31554 v -3.703172 l 3.709175,1.2e-5 v 3.70317 z"
|
||||
id="path41263-3-7-2-4"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#3c5d86;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 54.325051,100.3509 v -3.796008 l 3.810799,1.2e-5 v 3.796016 z"
|
||||
id="path41263-3-7-9-1-7"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#4e709a;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 50.57831,100.31995 v -3.769487 l 3.748939,1e-5 v 3.769487 z"
|
||||
id="path41263-3-7-9-2-8"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#bba891;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 46.904544,104.10308 v -3.78489 l 3.691501,1e-5 v 3.7849 z"
|
||||
id="path41263-3-7-9-2-2-4"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#65492b;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 50.595983,104.10048 v -3.77389 l 3.771034,1e-5 v 3.77389 z"
|
||||
id="path41263-3-7-9-2-2-7-5"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#422200;fill-opacity:1;stroke:none;stroke-width:0.92380506px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;enable-background:new"
|
||||
d="m 54.355973,104.10187 v -3.76645 l 3.763582,1e-5 v 3.76645 z"
|
||||
id="path41263-3-7-9-2-2-7-6-0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 21.528344,3.0779311 v 2.704597 m -0.986891,-2.704597 v 2.704597 m 1.850422,-0.860554 h -2.713953 m 2.713953,-0.983488 h -2.713953"
|
||||
style="display:inline;fill:none;stroke:url(#linearGradient1837);stroke-width:0.24441732;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new"
|
||||
id="path41281-4-3" />
|
||||
</g>
|
||||
<rect
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.73221993;marker:none;enable-background:accumulate"
|
||||
id="rect31205-8-6"
|
||||
width="15.371461"
|
||||
height="15.857694"
|
||||
x="256.10117"
|
||||
y="388.50687" />
|
||||
<g
|
||||
transform="matrix(0.96071629,0,0,0.99110589,-29.963907,107.82778)"
|
||||
id="ICON_LIGHTPROBE_PLANAR"
|
||||
style="display:inline;opacity:1;enable-background:new">
|
||||
<g
|
||||
transform="matrix(1.0003553,0,0,0.9995949,255.07114,193.09317)"
|
||||
style="display:inline"
|
||||
id="g9148-9-0">
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect9150-2-6"
|
||||
d="m 45.5,91.491928 12.995382,2.511515 v 8.228337 L 45.5,104.49568 Z"
|
||||
style="fill:url(#linearGradient1839);fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path9152-7-3"
|
||||
d="M 46.49945,103.49527 V 92.492523 l 10.996287,2.228527 v 6.75793 z"
|
||||
style="fill:none;stroke:url(#linearGradient15188);stroke-width:1.0000248px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"/>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="rect9150-2-7-2"
|
||||
d="m 47.081592,93.111072 9.92023,2.069352 0.01767,5.911376 -10.061616,1.82172 z"
|
||||
style="display:inline;fill:url(#linearGradient1843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80001998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" />
|
||||
</g>
|
||||
<circle
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16215-8-6);fill-opacity:1;stroke:none;stroke-width:1.70456684;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;enable-background:new"
|
||||
id="path16207-4-0"
|
||||
cx="305.40698"
|
||||
cy="290.15979"
|
||||
r="2.7756906" />
|
||||
</g>
|
||||
<g
|
||||
id="layer1-2"
|
||||
inkscape:label="Capa 1"
|
||||
transform="matrix(3.7795276,0,0,3.7795276,-191.20889,408.4512)">
|
||||
<rect
|
||||
y="1.3906925"
|
||||
x="7.0330977"
|
||||
height="4.2333331"
|
||||
width="4.2333331"
|
||||
id="rect24007-4"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74083334;marker:none;enable-background:accumulate" />
|
||||
<rect
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.74083334;marker:none;enable-background:accumulate"
|
||||
id="rect15296-7"
|
||||
width="4.2333331"
|
||||
height="4.2333331"
|
||||
x="1.4538921"
|
||||
y="1.3897316" />
|
||||
<g
|
||||
id="ICON_LIGHTPROBE_CUBEMAP"
|
||||
style="display:inline;opacity:1;enable-background:new"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,45.041487,-80.256633)">
|
||||
<ellipse
|
||||
id="path15301-7"
|
||||
style="display:inline;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:0.90000004;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
|
||||
cx="265.0126"
|
||||
cy="290.93195"
|
||||
rx="6.4540777"
|
||||
ry="6.4615378" />
|
||||
<ellipse
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16343);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.74753082;enable-background:new"
|
||||
id="path15303-40"
|
||||
transform="matrix(-0.99371287,-0.11195862,0.11396043,-0.99348529,0,0)"
|
||||
cx="-296.43781"
|
||||
cy="-259.47205"
|
||||
rx="5.9986253"
|
||||
ry="5.9619236" />
|
||||
<ellipse
|
||||
id="path15305-1"
|
||||
style="display:inline;fill:none;stroke:url(#linearGradient15938);stroke-width:1.00000083;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"
|
||||
cx="265.00449"
|
||||
cy="290.93195"
|
||||
rx="5.4999962"
|
||||
ry="5.4999943" />
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16345);fill-opacity:1;stroke:none;stroke-width:1.70456684;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;enable-background:new"
|
||||
d="m 269.25291,290.16569 c 0,1.9641 -1.9029,2.10245 -4.25024,2.10245 -2.34735,0 -4.25025,-0.13833 -4.25025,-2.10245 0,-1.96408 1.9029,-3.5563 4.25025,-3.5563 2.34734,0 4.25024,1.59222 4.25024,3.5563 z"
|
||||
id="path16194"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cscsc" />
|
||||
<circle
|
||||
style="display:inline;opacity:1;fill:url(#radialGradient16215);fill-opacity:1;stroke:none;stroke-width:1.70456684;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers;enable-background:new"
|
||||
id="path16207"
|
||||
cx="262.40057"
|
||||
cy="290.23932"
|
||||
r="2.7756906" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="path14068"
|
||||
id="path39836-9"
|
||||
style="display:inline;overflow:visible;visibility:visible;opacity:0.35;fill:none;stroke:url(#radialGradient23167-6);stroke-width:2.12000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
|
||||
d="m 456.1861,210.99286 c -2.96123,-0.16251 -3.0761,-7.48662 -5.17509,-7.48662"
|
||||
sodipodi:nodetypes="cc"
|
||||
|
Before Width: | Height: | Size: 4.4 MiB After Width: | Height: | Size: 4.3 MiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user