forked from bartvdbraak/blender
Merge branch 'master' into blender2.8
This commit is contained in:
commit
146b39a45d
@ -44,3 +44,26 @@ ExternalProject_Add(external_embree
|
|||||||
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
|
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${DEFAULT_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
|
||||||
INSTALL_DIR ${LIBDIR}/embree
|
INSTALL_DIR ${LIBDIR}/embree
|
||||||
)
|
)
|
||||||
|
if(WIN32)
|
||||||
|
|
||||||
|
if(BUILD_MODE STREQUAL Release)
|
||||||
|
ExternalProject_Add_Step(external_embree after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/embree ${HARVEST_TARGET}/embree
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add_Step(external_embree after_install
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/embree3.lib ${HARVEST_TARGET}/embree/lib/embree3_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/embree_avx.lib ${HARVEST_TARGET}/embree/lib/embree_avx_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/embree_avx2.lib ${HARVEST_TARGET}/embree/lib/embree_avx2_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/embree_sse42.lib ${HARVEST_TARGET}/embree/lib/embree_sse42_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/lexers.lib ${HARVEST_TARGET}/embree/lib/lexers_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/math.lib ${HARVEST_TARGET}/embree/lib/math_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/simd.lib ${HARVEST_TARGET}/embree/lib/simd_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/sys.lib ${HARVEST_TARGET}/embree/lib/sys_d.lib
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/tasking.lib ${HARVEST_TARGET}/embree/lib/tasking_d.lib
|
||||||
|
DEPENDEES install
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
@ -58,8 +58,6 @@ if(BUILD_MODE STREQUAL Release)
|
|||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/hidapi/ ${HARVEST_TARGET}/hidapi/ &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/hidapi/ ${HARVEST_TARGET}/hidapi/ &&
|
||||||
# webp, straight up copy
|
# webp, straight up copy
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/webp ${HARVEST_TARGET}/webp &&
|
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/webp ${HARVEST_TARGET}/webp &&
|
||||||
# embree
|
|
||||||
${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/embree ${HARVEST_TARGET}/embree
|
|
||||||
DEPENDS
|
DEPENDS
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
@ -68,6 +68,8 @@ goto usage
|
|||||||
setlocal ENABLEEXTENSIONS
|
setlocal ENABLEEXTENSIONS
|
||||||
set CMAKE_DEBUG_OPTIONS=-DWITH_OPTIMIZED_DEBUG=On
|
set CMAKE_DEBUG_OPTIONS=-DWITH_OPTIMIZED_DEBUG=On
|
||||||
if "%3" == "debug" set CMAKE_DEBUG_OPTIONS=-DWITH_OPTIMIZED_DEBUG=Off
|
if "%3" == "debug" set CMAKE_DEBUG_OPTIONS=-DWITH_OPTIMIZED_DEBUG=Off
|
||||||
|
set dobuild=1
|
||||||
|
if "%4" == "nobuild" set dobuild=0
|
||||||
|
|
||||||
set SOURCE_DIR=%~dp0\..
|
set SOURCE_DIR=%~dp0\..
|
||||||
set BUILD_DIR=%cd%\build
|
set BUILD_DIR=%cd%\build
|
||||||
@ -117,20 +119,24 @@ cd %Staging%\%BuildDir%%ARCH%R
|
|||||||
echo %DATE% %TIME% : Start > %StatusFile%
|
echo %DATE% %TIME% : Start > %StatusFile%
|
||||||
cmake -G "%CMAKE_BUILDER%" %SOURCE_DIR% -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DBUILD_MODE=Release -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/
|
cmake -G "%CMAKE_BUILDER%" %SOURCE_DIR% -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DBUILD_MODE=Release -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/
|
||||||
echo %DATE% %TIME% : Release Configuration done >> %StatusFile%
|
echo %DATE% %TIME% : Release Configuration done >> %StatusFile%
|
||||||
msbuild /m "ll.vcxproj" /p:Configuration=Release /fl /flp:logfile=BlenderDeps_llvm.log;Verbosity=normal
|
if "%dobuild%" == "1" (
|
||||||
msbuild /m "BlenderDependencies.sln" /p:Configuration=Release /fl /flp:logfile=BlenderDeps.log;Verbosity=minimal /verbosity:minimal
|
msbuild /m "ll.vcxproj" /p:Configuration=Release /fl /flp:logfile=BlenderDeps_llvm.log;Verbosity=normal
|
||||||
echo %DATE% %TIME% : Release Build done >> %StatusFile%
|
msbuild /m "BlenderDependencies.sln" /p:Configuration=Release /fl /flp:logfile=BlenderDeps.log;Verbosity=minimal /verbosity:minimal
|
||||||
cmake --build . --target Harvest_Release_Results > Harvest_Release.txt
|
echo %DATE% %TIME% : Release Build done >> %StatusFile%
|
||||||
|
cmake --build . --target Harvest_Release_Results > Harvest_Release.txt
|
||||||
|
)
|
||||||
echo %DATE% %TIME% : Release Harvest done >> %StatusFile%
|
echo %DATE% %TIME% : Release Harvest done >> %StatusFile%
|
||||||
cd %BUILD_DIR%
|
cd %BUILD_DIR%
|
||||||
mkdir %STAGING%\%BuildDir%%ARCH%D
|
mkdir %STAGING%\%BuildDir%%ARCH%D
|
||||||
cd %Staging%\%BuildDir%%ARCH%D
|
cd %Staging%\%BuildDir%%ARCH%D
|
||||||
cmake -G "%CMAKE_BUILDER%" %SOURCE_DIR% -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DCMAKE_BUILD_TYPE=Debug -DBUILD_MODE=Debug -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/ %CMAKE_DEBUG_OPTIONS%
|
cmake -G "%CMAKE_BUILDER%" %SOURCE_DIR% -DDOWNLOAD_DIR=%BUILD_DIR%/downloads -DCMAKE_BUILD_TYPE=Debug -DBUILD_MODE=Debug -DHARVEST_TARGET=%HARVEST_DIR%/%HARVESTROOT%%VSVER_SHORT%/ %CMAKE_DEBUG_OPTIONS%
|
||||||
echo %DATE% %TIME% : Debug Configuration done >> %StatusFile%
|
echo %DATE% %TIME% : Debug Configuration done >> %StatusFile%
|
||||||
msbuild /m "ll.vcxproj" /p:Configuration=Debug /fl /flp:logfile=BlenderDeps_llvm.log;;Verbosity=normal
|
if "%dobuild%" == "1" (
|
||||||
msbuild /m "BlenderDependencies.sln" /p:Configuration=Debug /verbosity:n /fl /flp:logfile=BlenderDeps.log;;Verbosity=normal
|
msbuild /m "ll.vcxproj" /p:Configuration=Debug /fl /flp:logfile=BlenderDeps_llvm.log;;Verbosity=normal
|
||||||
echo %DATE% %TIME% : Debug Build done >> %StatusFile%
|
msbuild /m "BlenderDependencies.sln" /p:Configuration=Debug /verbosity:n /fl /flp:logfile=BlenderDeps.log;;Verbosity=normal
|
||||||
cmake --build . --target Harvest_Debug_Results> Harvest_Debug.txt
|
echo %DATE% %TIME% : Debug Build done >> %StatusFile%
|
||||||
|
cmake --build . --target Harvest_Debug_Results> Harvest_Debug.txt
|
||||||
|
)
|
||||||
echo %DATE% %TIME% : Debug Harvest done >> %StatusFile%
|
echo %DATE% %TIME% : Debug Harvest done >> %StatusFile%
|
||||||
cd %BUILD_DIR%
|
cd %BUILD_DIR%
|
||||||
|
|
||||||
|
@ -608,7 +608,30 @@ if(WITH_CYCLES_OSL)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_CYCLES_EMBREE)
|
if(WITH_CYCLES_EMBREE)
|
||||||
find_package(Embree 3.2.4 REQUIRED)
|
windows_find_package(Embree)
|
||||||
|
if(NOT EMBREE_FOUND)
|
||||||
|
set(EMBREE_INCLUDE_DIRS ${LIBDIR}/embree/include)
|
||||||
|
set(EMBREE_LIBRARIES
|
||||||
|
optimized ${LIBDIR}/embree/lib/embree3.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/embree_avx2.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/embree_avx.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/embree_sse42.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/lexers.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/math.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/simd.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/sys.lib
|
||||||
|
optimized ${LIBDIR}/embree/lib/tasking.lib
|
||||||
|
|
||||||
|
debug ${LIBDIR}/embree/lib/embree3_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/embree_avx2_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/embree_avx_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/embree_sse42_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/lexers_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/math_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/simd_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/sys_d.lib
|
||||||
|
debug ${LIBDIR}/embree/lib/tasking_d.lib)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WINDOWS_PYTHON_DEBUG)
|
if (WINDOWS_PYTHON_DEBUG)
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "util/util_function.h"
|
#include "util/util_function.h"
|
||||||
#include "util/util_hash.h"
|
#include "util/util_hash.h"
|
||||||
#include "util/util_logging.h"
|
#include "util/util_logging.h"
|
||||||
|
#include "util/util_murmurhash.h"
|
||||||
#include "util/util_progress.h"
|
#include "util/util_progress.h"
|
||||||
#include "util/util_time.h"
|
#include "util/util_time.h"
|
||||||
|
|
||||||
@ -382,6 +383,17 @@ void BlenderSession::update_render_tile(RenderTile& rtile, bool highlight)
|
|||||||
do_write_update_render_tile(rtile, false, false);
|
do_write_update_render_tile(rtile, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_cryptomatte_layer(BL::RenderResult& b_rr, string name, string manifest)
|
||||||
|
{
|
||||||
|
string identifier = string_printf("%08x", util_murmur_hash3(name.c_str(), name.length(), 0));
|
||||||
|
string prefix = "cryptomatte/" + identifier.substr(0, 7) + "/";
|
||||||
|
|
||||||
|
render_add_metadata(b_rr, prefix+"name", name);
|
||||||
|
render_add_metadata(b_rr, prefix+"hash", "MurmurHash3_32");
|
||||||
|
render_add_metadata(b_rr, prefix+"conversion", "uint32_to_float32");
|
||||||
|
render_add_metadata(b_rr, prefix+"manifest", manifest);
|
||||||
|
}
|
||||||
|
|
||||||
void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
|
void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
|
||||||
{
|
{
|
||||||
b_depsgraph = b_depsgraph_;
|
b_depsgraph = b_depsgraph_;
|
||||||
@ -405,6 +417,7 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
|
|||||||
BL::RenderResult::layers_iterator b_single_rlay;
|
BL::RenderResult::layers_iterator b_single_rlay;
|
||||||
b_rr.layers.begin(b_single_rlay);
|
b_rr.layers.begin(b_single_rlay);
|
||||||
BL::RenderLayer b_rlay = *b_single_rlay;
|
BL::RenderLayer b_rlay = *b_single_rlay;
|
||||||
|
b_rlay_name = b_view_layer.name();
|
||||||
|
|
||||||
/* add passes */
|
/* add passes */
|
||||||
vector<Pass> passes = sync->sync_render_passes(b_rlay, b_view_layer, session_params);
|
vector<Pass> passes = sync->sync_render_passes(b_rlay, b_view_layer, session_params);
|
||||||
@ -440,7 +453,6 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
|
|||||||
BL::RenderResult::views_iterator b_view_iter;
|
BL::RenderResult::views_iterator b_view_iter;
|
||||||
int view_index = 0;
|
int view_index = 0;
|
||||||
for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) {
|
for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) {
|
||||||
b_rlay_name = b_view_layer.name();
|
|
||||||
b_rview_name = b_view_iter->name();
|
b_rview_name = b_view_iter->name();
|
||||||
|
|
||||||
/* set the current view */
|
/* set the current view */
|
||||||
@ -500,6 +512,20 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Write cryptomatte metadata. */
|
||||||
|
if(scene->film->cryptomatte_passes & CRYPT_OBJECT) {
|
||||||
|
add_cryptomatte_layer(b_rr, b_rlay_name+".CryptoObject",
|
||||||
|
scene->object_manager->get_cryptomatte_objects(scene));
|
||||||
|
}
|
||||||
|
if(scene->film->cryptomatte_passes & CRYPT_MATERIAL) {
|
||||||
|
add_cryptomatte_layer(b_rr, b_rlay_name+".CryptoMaterial",
|
||||||
|
scene->shader_manager->get_cryptomatte_materials(scene));
|
||||||
|
}
|
||||||
|
if(scene->film->cryptomatte_passes & CRYPT_ASSET) {
|
||||||
|
add_cryptomatte_layer(b_rr, b_rlay_name+".CryptoAsset",
|
||||||
|
scene->object_manager->get_cryptomatte_assets(scene));
|
||||||
|
}
|
||||||
|
|
||||||
/* free result without merging */
|
/* free result without merging */
|
||||||
end_render_result(b_engine, b_rr, true, true, false);
|
end_render_result(b_engine, b_rr, true, true, false);
|
||||||
|
|
||||||
|
@ -172,6 +172,9 @@ protected:
|
|||||||
|
|
||||||
/* Update tile manager to reflect resumable render settings. */
|
/* Update tile manager to reflect resumable render settings. */
|
||||||
void update_resumable_tile_manager(int num_samples);
|
void update_resumable_tile_manager(int num_samples);
|
||||||
|
|
||||||
|
/* Add metadata for cryptomatte layers to the render result. */
|
||||||
|
void add_cryptomatte_metadata(string layer_prefix);
|
||||||
};
|
};
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@ -243,6 +243,12 @@ static inline float *image_get_float_pixels_for_frame(BL::Image& image,
|
|||||||
return BKE_image_get_float_pixels_for_frame(image.ptr.data, frame);
|
return BKE_image_get_float_pixels_for_frame(image.ptr.data, frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void render_add_metadata(BL::RenderResult& b_rr, string name, string value)
|
||||||
|
{
|
||||||
|
b_rr.stamp_data_add_field(name.c_str(), value.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Utilities */
|
/* Utilities */
|
||||||
|
|
||||||
static inline Transform get_transform(const BL::Array<float, 16>& array)
|
static inline Transform get_transform(const BL::Array<float, 16>& array)
|
||||||
|
@ -1411,20 +1411,23 @@ typedef enum KernelBVHLayout {
|
|||||||
} KernelBVHLayout;
|
} KernelBVHLayout;
|
||||||
|
|
||||||
typedef struct KernelBVH {
|
typedef struct KernelBVH {
|
||||||
/* root node */
|
/* Own BVH */
|
||||||
int root;
|
int root;
|
||||||
int have_motion;
|
int have_motion;
|
||||||
int have_curves;
|
int have_curves;
|
||||||
int have_instancing;
|
int have_instancing;
|
||||||
int bvh_layout;
|
int bvh_layout;
|
||||||
int use_bvh_steps;
|
int use_bvh_steps;
|
||||||
int pad1;
|
|
||||||
|
/* Embree */
|
||||||
#ifdef __EMBREE__
|
#ifdef __EMBREE__
|
||||||
RTCScene scene;
|
RTCScene scene;
|
||||||
|
# ifndef __KERNEL_64_BIT__
|
||||||
|
int pad1;
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
void *unused;
|
int pad1, pad2;
|
||||||
#endif
|
#endif
|
||||||
int pad2, pad3;
|
|
||||||
} KernelBVH;
|
} KernelBVH;
|
||||||
static_assert_align(KernelBVH, 16);
|
static_assert_align(KernelBVH, 16);
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "util/util_logging.h"
|
#include "util/util_logging.h"
|
||||||
#include "util/util_map.h"
|
#include "util/util_map.h"
|
||||||
#include "util/util_progress.h"
|
#include "util/util_progress.h"
|
||||||
|
#include "util/util_set.h"
|
||||||
#include "util/util_vector.h"
|
#include "util/util_vector.h"
|
||||||
#include "util/util_murmurhash.h"
|
#include "util/util_murmurhash.h"
|
||||||
|
|
||||||
@ -844,4 +845,37 @@ void ObjectManager::tag_update(Scene *scene)
|
|||||||
scene->light_manager->need_update = true;
|
scene->light_manager->need_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string ObjectManager::get_cryptomatte_objects(Scene *scene)
|
||||||
|
{
|
||||||
|
string manifest = "{";
|
||||||
|
|
||||||
|
unordered_set<ustring, ustringHash> objects;
|
||||||
|
foreach(Object *object, scene->objects) {
|
||||||
|
if(objects.count(object->name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
objects.insert(object->name);
|
||||||
|
uint32_t hash_name = util_murmur_hash3(object->name.c_str(), object->name.length(), 0);
|
||||||
|
manifest += string_printf("\"%s\":\"%08x\",", object->name.c_str(), hash_name);
|
||||||
|
}
|
||||||
|
manifest[manifest.size()-1] = '}';
|
||||||
|
return manifest;
|
||||||
|
}
|
||||||
|
|
||||||
|
string ObjectManager::get_cryptomatte_assets(Scene *scene)
|
||||||
|
{
|
||||||
|
string manifest = "{";
|
||||||
|
unordered_set<ustring, ustringHash> assets;
|
||||||
|
foreach(Object *ob, scene->objects) {
|
||||||
|
if(assets.count(ob->asset_name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
assets.insert(ob->asset_name);
|
||||||
|
uint32_t hash_asset = util_murmur_hash3(ob->asset_name.c_str(), ob->asset_name.length(), 0);
|
||||||
|
manifest += string_printf("\"%s\":\"%08x\",", ob->asset_name.c_str(), hash_asset);
|
||||||
|
}
|
||||||
|
manifest[manifest.size()-1] = '}';
|
||||||
|
return manifest;
|
||||||
|
}
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@ -116,6 +116,9 @@ public:
|
|||||||
|
|
||||||
void apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress& progress);
|
void apply_static_transforms(DeviceScene *dscene, Scene *scene, Progress& progress);
|
||||||
|
|
||||||
|
string get_cryptomatte_objects(Scene *scene);
|
||||||
|
string get_cryptomatte_assets(Scene *scene);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void device_update_object_transform(UpdateObjectTransformState *state,
|
void device_update_object_transform(UpdateObjectTransformState *state,
|
||||||
Object *ob,
|
Object *ob,
|
||||||
|
@ -700,4 +700,20 @@ float ShaderManager::linear_rgb_to_gray(float3 c)
|
|||||||
return dot(c, rgb_to_y);
|
return dot(c, rgb_to_y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string ShaderManager::get_cryptomatte_materials(Scene *scene)
|
||||||
|
{
|
||||||
|
string manifest = "{";
|
||||||
|
unordered_set<ustring, ustringHash> materials;
|
||||||
|
foreach(Shader *shader, scene->shaders) {
|
||||||
|
if(materials.count(shader->name)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
materials.insert(shader->name);
|
||||||
|
uint32_t cryptomatte_id = util_murmur_hash3(shader->name.c_str(), shader->name.length(), 0);
|
||||||
|
manifest += string_printf("\"%s\":\"%08x\",", shader->name.c_str(), cryptomatte_id);
|
||||||
|
}
|
||||||
|
manifest[manifest.size()-1] = '}';
|
||||||
|
return manifest;
|
||||||
|
}
|
||||||
|
|
||||||
CCL_NAMESPACE_END
|
CCL_NAMESPACE_END
|
||||||
|
@ -198,6 +198,8 @@ public:
|
|||||||
|
|
||||||
float linear_rgb_to_gray(float3 c);
|
float linear_rgb_to_gray(float3 c);
|
||||||
|
|
||||||
|
string get_cryptomatte_materials(Scene *scene);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ShaderManager();
|
ShaderManager();
|
||||||
|
|
||||||
|
@ -1526,7 +1526,7 @@ typedef struct StampDataCustomField {
|
|||||||
struct StampDataCustomField *next, *prev;
|
struct StampDataCustomField *next, *prev;
|
||||||
/* TODO(sergey): Think of better size here, maybe dynamically allocated even. */
|
/* TODO(sergey): Think of better size here, maybe dynamically allocated even. */
|
||||||
char key[512];
|
char key[512];
|
||||||
char value[512];
|
char *value;
|
||||||
/* TODO(sergey): Support non-string values. */
|
/* TODO(sergey): Support non-string values. */
|
||||||
} StampDataCustomField;
|
} StampDataCustomField;
|
||||||
|
|
||||||
@ -2091,12 +2091,9 @@ void BKE_stamp_info_callback(void *data, struct StampData *stamp_data, StampCall
|
|||||||
CALL(rendertime, "RenderTime");
|
CALL(rendertime, "RenderTime");
|
||||||
CALL(memory, "Memory");
|
CALL(memory, "Memory");
|
||||||
|
|
||||||
for (StampDataCustomField *custom_field = stamp_data->custom_fields.first;
|
LISTBASE_FOREACH(StampDataCustomField *, custom_field, &stamp_data->custom_fields) {
|
||||||
custom_field != NULL;
|
|
||||||
custom_field = custom_field->next)
|
|
||||||
{
|
|
||||||
if (noskip || custom_field->value[0]) {
|
if (noskip || custom_field->value[0]) {
|
||||||
callback(data, custom_field->key, custom_field->value, sizeof(custom_field->value));
|
callback(data, custom_field->key, custom_field->value, strlen(custom_field->value) + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2113,7 +2110,7 @@ void BKE_render_result_stamp_data(RenderResult *rr, const char *key, const char
|
|||||||
StampDataCustomField *field = MEM_mallocN(sizeof(StampDataCustomField),
|
StampDataCustomField *field = MEM_mallocN(sizeof(StampDataCustomField),
|
||||||
"StampData Custom Field");
|
"StampData Custom Field");
|
||||||
STRNCPY(field->key, key);
|
STRNCPY(field->key, key);
|
||||||
STRNCPY(field->value, value);
|
field->value = BLI_strdup(value);
|
||||||
BLI_addtail(&stamp_data->custom_fields, field);
|
BLI_addtail(&stamp_data->custom_fields, field);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2122,6 +2119,9 @@ void BKE_stamp_data_free(struct StampData *stamp_data)
|
|||||||
if (stamp_data == NULL) {
|
if (stamp_data == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
LISTBASE_FOREACH(StampDataCustomField *, custom_field, &stamp_data->custom_fields) {
|
||||||
|
MEM_freeN(custom_field->value);
|
||||||
|
}
|
||||||
BLI_freelistN(&stamp_data->custom_fields);
|
BLI_freelistN(&stamp_data->custom_fields);
|
||||||
MEM_freeN(stamp_data);
|
MEM_freeN(stamp_data);
|
||||||
}
|
}
|
||||||
|
@ -807,7 +807,7 @@ static void rna_def_render_result(BlenderRNA *brna)
|
|||||||
RNA_def_function_ui_description(func, "Add engine-specific stamp data to the result");
|
RNA_def_function_ui_description(func, "Add engine-specific stamp data to the result");
|
||||||
parm = RNA_def_string(func, "field", NULL, 1024, "Field", "Name of the stamp field to add");
|
parm = RNA_def_string(func, "field", NULL, 1024, "Field", "Name of the stamp field to add");
|
||||||
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
||||||
parm = RNA_def_string(func, "value", NULL, 1024, "Value", "Value of the stamp data");
|
parm = RNA_def_string(func, "value", NULL, 0, "Value", "Value of the stamp data");
|
||||||
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
|
||||||
|
|
||||||
RNA_define_verify_sdna(0);
|
RNA_define_verify_sdna(0);
|
||||||
|
Loading…
Reference in New Issue
Block a user