Merge branch 'master' into blender2.8
This commit is contained in:
@@ -253,6 +253,8 @@ option(WITH_OPENSUBDIV "Enable OpenSubdiv for surface subdivision" _init_OPEN
|
||||
|
||||
option(WITH_OPENVDB "Enable features relying on OpenVDB" OFF)
|
||||
option(WITH_OPENVDB_BLOSC "Enable blosc compression for OpenVDB, only enable if OpenVDB was built with blosc support" OFF)
|
||||
option(WITH_OPENVDB_3_ABI_COMPATIBLE "Assume OpenVDB library has been compiled with version 3 ABI compatibility" OFF)
|
||||
mark_as_advanced(WITH_OPENVDB_3_ABI_COMPATIBLE)
|
||||
|
||||
# GHOST Windowing Library Options
|
||||
option(WITH_GHOST_DEBUG "Enable debugging output for the GHOST library" OFF)
|
||||
@@ -1443,8 +1445,8 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||
ADD_CHECK_CXX_COMPILER_FLAG(CXX_WARNINGS CXX_WARN_NO_SIGN_COMPARE -Wno-sign-compare)
|
||||
|
||||
# disable numbered, false positives
|
||||
set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556")
|
||||
set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556")
|
||||
set(C_WARNINGS "${C_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
|
||||
set(CXX_WARNINGS "${CXX_WARNINGS} -wd188,186,144,913,556,858,597,177,1292,167,279,592,94,2722,3199")
|
||||
elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC")
|
||||
# most msvc warnings are C & C++
|
||||
set(_WARNINGS
|
||||
|
@@ -822,7 +822,7 @@ macro(TEST_SSE_SUPPORT
|
||||
endif()
|
||||
elseif(CMAKE_C_COMPILER_ID MATCHES "Intel")
|
||||
set(${_sse_flags} "") # icc defaults to -msse
|
||||
set(${_sse2_flags} "-msse2")
|
||||
set(${_sse2_flags} "") # icc defaults to -msse2
|
||||
else()
|
||||
message(WARNING "SSE flags for this compiler: '${CMAKE_C_COMPILER_ID}' not known")
|
||||
set(${_sse_flags})
|
||||
|
@@ -104,6 +104,54 @@ elseif(CMAKE_COMPILER_IS_GNUCC OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CYCLES_KERNEL_FLAGS}")
|
||||
elseif(WIN32 AND CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||
check_cxx_compiler_flag(/QxSSE2 CXX_HAS_SSE)
|
||||
check_cxx_compiler_flag(/arch:AVX CXX_HAS_AVX)
|
||||
check_cxx_compiler_flag(/QxCORE-AVX2 CXX_HAS_AVX2)
|
||||
|
||||
if(CXX_HAS_SSE)
|
||||
set(CYCLES_SSE2_KERNEL_FLAGS "/QxSSE2")
|
||||
set(CYCLES_SSE3_KERNEL_FLAGS "/QxSSSE3")
|
||||
set(CYCLES_SSE41_KERNEL_FLAGS "/QxSSE4.1")
|
||||
|
||||
if(CXX_HAS_AVX)
|
||||
set(CYCLES_AVX_KERNEL_FLAGS "/arch:AVX")
|
||||
endif()
|
||||
|
||||
if(CXX_HAS_AVX2)
|
||||
set(CYCLES_AVX2_KERNEL_FLAGS "/QxCORE-AVX2")
|
||||
endif()
|
||||
endif()
|
||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||
if(APPLE)
|
||||
# ICC does not support SSE2 flag on MacOSX
|
||||
check_cxx_compiler_flag(-xssse3 CXX_HAS_SSE)
|
||||
else()
|
||||
check_cxx_compiler_flag(-xsse2 CXX_HAS_SSE)
|
||||
endif()
|
||||
|
||||
check_cxx_compiler_flag(-xavx CXX_HAS_AVX)
|
||||
check_cxx_compiler_flag(-xcore-avx2 CXX_HAS_AVX2)
|
||||
|
||||
if(CXX_HAS_SSE)
|
||||
if(APPLE)
|
||||
# ICC does not support SSE2 flag on MacOSX
|
||||
set(CYCLES_SSE2_KERNEL_FLAGS "-xssse3")
|
||||
else()
|
||||
set(CYCLES_SSE2_KERNEL_FLAGS "-xsse2")
|
||||
endif()
|
||||
|
||||
set(CYCLES_SSE3_KERNEL_FLAGS "-xssse3")
|
||||
set(CYCLES_SSE41_KERNEL_FLAGS "-xsse4.1")
|
||||
|
||||
if(CXX_HAS_AVX)
|
||||
set(CYCLES_AVX_KERNEL_FLAGS "-xavx")
|
||||
endif()
|
||||
|
||||
if(CXX_HAS_AVX2)
|
||||
set(CYCLES_AVX2_KERNEL_FLAGS "-xcore-avx2")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CXX_HAS_SSE)
|
||||
|
@@ -34,7 +34,6 @@ struct ccl_try_align(16) float4 {
|
||||
};
|
||||
|
||||
__forceinline float4();
|
||||
__forceinline float4(const float4& a);
|
||||
__forceinline explicit float4(const __m128& a);
|
||||
|
||||
__forceinline operator const __m128&(void) const;
|
||||
|
@@ -33,11 +33,6 @@ __forceinline float4::float4()
|
||||
{
|
||||
}
|
||||
|
||||
__forceinline float4::float4(const float4& a)
|
||||
: m128(a.m128)
|
||||
{
|
||||
}
|
||||
|
||||
__forceinline float4::float4(const __m128& a)
|
||||
: m128(a)
|
||||
{
|
||||
|
@@ -38,8 +38,13 @@ set(SRC
|
||||
if(WITH_OPENVDB)
|
||||
add_definitions(
|
||||
-DWITH_OPENVDB
|
||||
)
|
||||
|
||||
if(WITH_OPENVDB_3_ABI_COMPATIBLE)
|
||||
add_definitions(
|
||||
-DOPENVDB_3_ABI_COMPATIBLE
|
||||
)
|
||||
endif()
|
||||
|
||||
list(APPEND INC_SYS
|
||||
${BOOST_INCLUDE_DIR}
|
||||
|
@@ -45,7 +45,7 @@ void OpenVDBWriter::insert(const openvdb::GridBase::Ptr &grid)
|
||||
|
||||
void OpenVDBWriter::insert(const openvdb::GridBase &grid)
|
||||
{
|
||||
#if (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER >= 3)
|
||||
#if (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER <= 3) || defined(OPENVDB_3_ABI_COMPATIBLE)
|
||||
m_grids->push_back(grid.copyGrid());
|
||||
#else
|
||||
m_grids->push_back(grid.copyGridWithNewTree());
|
||||
|
@@ -299,7 +299,10 @@ bool BKE_displist_surfindex_get(DispList *dl, int a, int *b, int *p1, int *p2, i
|
||||
}
|
||||
|
||||
/* ****************** make displists ********************* */
|
||||
|
||||
#ifdef __INTEL_COMPILER
|
||||
/* ICC with the optimization -02 causes crashes. */
|
||||
# pragma intel optimization_level 1
|
||||
#endif
|
||||
static void curve_to_displist(Curve *cu, ListBase *nubase, ListBase *dispbase,
|
||||
const bool for_render, const bool use_render_resolution)
|
||||
{
|
||||
|
@@ -411,7 +411,7 @@ extern "C" {
|
||||
} (void)0
|
||||
|
||||
/* assuming a static array */
|
||||
#if defined(__GNUC__) && !defined(__cplusplus) && !defined(__clang__)
|
||||
#if defined(__GNUC__) && !defined(__cplusplus) && !defined(__clang__) && !defined(__INTEL_COMPILER)
|
||||
# define ARRAY_SIZE(arr) \
|
||||
((sizeof(struct {int isnt_array : ((const void *)&(arr) == &(arr)[0]);}) * 0) + \
|
||||
(sizeof(arr) / sizeof(*(arr))))
|
||||
|
@@ -46,7 +46,6 @@
|
||||
|
||||
#include "PIL_time.h"
|
||||
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_gpencil.h"
|
||||
#include "BKE_context.h"
|
||||
|
@@ -45,7 +45,6 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_gpencil.h"
|
||||
#include "BKE_main.h"
|
||||
|
||||
#include "ED_gpencil.h"
|
||||
|
||||
|
@@ -51,6 +51,8 @@ void ED_undo_operator_repeat_cb_evt(struct bContext *C, void *arg_op, int arg
|
||||
|
||||
bool ED_undo_is_valid(const struct bContext *C, const char *undoname);
|
||||
|
||||
struct UndoStack *ED_undo_stack_get(void);
|
||||
|
||||
/* undo_system_types.c */
|
||||
void ED_undosys_type_init(void);
|
||||
void ED_undosys_type_free(void);
|
||||
|
@@ -36,7 +36,6 @@
|
||||
#include "BLI_listbase.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_editmesh.h"
|
||||
|
@@ -43,7 +43,6 @@
|
||||
|
||||
#include "BKE_DerivedMesh.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_mesh_mapping.h"
|
||||
#include "BKE_report.h"
|
||||
|
@@ -4436,6 +4436,7 @@ void PE_create_particle_edit(
|
||||
recalc_lengths(edit);
|
||||
if (psys && !cache)
|
||||
recalc_emitter_field(ob, psys);
|
||||
|
||||
PE_update_object(eval_ctx, scene, ob, 1);
|
||||
}
|
||||
}
|
||||
|
@@ -44,11 +44,9 @@
|
||||
#include "BLI_string.h"
|
||||
#include "BLI_utildefines.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_particle.h"
|
||||
#include "BKE_pointcache.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
||||
#include "DEG_depsgraph.h"
|
||||
|
@@ -48,7 +48,6 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_customdata.h"
|
||||
#include "BKE_fluidsim.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_modifier.h"
|
||||
#include "BKE_object.h"
|
||||
#include "BKE_report.h"
|
||||
|
@@ -34,11 +34,10 @@
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
||||
#include "ED_paint.h"
|
||||
#include "ED_undo.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
@@ -155,15 +154,15 @@ void ED_paintcurve_undosys_type(UndoType *ut)
|
||||
|
||||
void ED_paintcurve_undo_push_begin(const char *name)
|
||||
{
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
bContext *C = NULL; /* special case, we never read from this. */
|
||||
wmWindowManager *wm = G.main->wm.first;
|
||||
BKE_undosys_step_push_init_with_type(wm->undo_stack, C, name, BKE_UNDOSYS_TYPE_PAINTCURVE);
|
||||
BKE_undosys_step_push_init_with_type(ustack, C, name, BKE_UNDOSYS_TYPE_PAINTCURVE);
|
||||
}
|
||||
|
||||
void ED_paintcurve_undo_push_end(void)
|
||||
{
|
||||
wmWindowManager *wm = G.main->wm.first; /* XXX, avoids adding extra arg. */
|
||||
BKE_undosys_step_push(wm->undo_stack, NULL, NULL);
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
BKE_undosys_step_push(ustack, NULL, NULL);
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
@@ -41,12 +41,12 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_image.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
||||
#include "DEG_depsgraph.h"
|
||||
|
||||
#include "ED_paint.h"
|
||||
#include "ED_undo.h"
|
||||
|
||||
#include "GPU_draw.h"
|
||||
|
||||
@@ -360,15 +360,15 @@ static void image_undo_free_list(ListBase *lb)
|
||||
|
||||
void ED_image_undo_push_begin(const char *name)
|
||||
{
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
bContext *C = NULL; /* special case, we never read from this. */
|
||||
wmWindowManager *wm = G.main->wm.first;
|
||||
BKE_undosys_step_push_init_with_type(wm->undo_stack, C, name, BKE_UNDOSYS_TYPE_IMAGE);
|
||||
BKE_undosys_step_push_init_with_type(ustack, C, name, BKE_UNDOSYS_TYPE_IMAGE);
|
||||
}
|
||||
|
||||
void ED_image_undo_push_end(void)
|
||||
{
|
||||
wmWindowManager *wm = G.main->wm.first; /* XXX, avoids adding extra arg. */
|
||||
BKE_undosys_step_push(wm->undo_stack, NULL, NULL);
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
BKE_undosys_step_push(ustack, NULL, NULL);
|
||||
}
|
||||
|
||||
static void image_undo_invalidate(void)
|
||||
@@ -489,8 +489,8 @@ ListBase *ED_image_undosys_step_get_tiles(UndoStep *us_p)
|
||||
|
||||
ListBase *ED_image_undo_get_tiles(void)
|
||||
{
|
||||
wmWindowManager *wm = G.main->wm.first; /* XXX, avoids adding extra arg. */
|
||||
UndoStep *us = BKE_undosys_stack_init_or_active_with_type(wm->undo_stack, BKE_UNDOSYS_TYPE_IMAGE);
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
UndoStep *us = BKE_undosys_stack_init_or_active_with_type(ustack, BKE_UNDOSYS_TYPE_IMAGE);
|
||||
return ED_image_undosys_step_get_tiles(us);
|
||||
}
|
||||
|
||||
|
@@ -59,11 +59,10 @@
|
||||
#include "BKE_key.h"
|
||||
#include "BKE_mesh.h"
|
||||
#include "BKE_subsurf.h"
|
||||
#include "DEG_depsgraph.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
||||
#include "DEG_depsgraph.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
@@ -72,6 +71,7 @@
|
||||
#include "ED_paint.h"
|
||||
#include "ED_object.h"
|
||||
#include "ED_sculpt.h"
|
||||
#include "ED_undo.h"
|
||||
|
||||
#include "bmesh.h"
|
||||
#include "paint_intern.h"
|
||||
@@ -981,9 +981,9 @@ SculptUndoNode *sculpt_undo_push_node(
|
||||
|
||||
void sculpt_undo_push_begin(const char *name)
|
||||
{
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
bContext *C = NULL; /* special case, we never read from this. */
|
||||
wmWindowManager *wm = G.main->wm.first;
|
||||
BKE_undosys_step_push_init_with_type(wm->undo_stack, C, name, BKE_UNDOSYS_TYPE_SCULPT);
|
||||
BKE_undosys_step_push_init_with_type(ustack, C, name, BKE_UNDOSYS_TYPE_SCULPT);
|
||||
}
|
||||
|
||||
void sculpt_undo_push_end(void)
|
||||
@@ -1002,8 +1002,8 @@ void sculpt_undo_push_end(void)
|
||||
BKE_pbvh_node_layer_disp_free(unode->node);
|
||||
}
|
||||
|
||||
wmWindowManager *wm = G.main->wm.first; /* XXX, avoids adding extra arg. */
|
||||
BKE_undosys_step_push(wm->undo_stack, NULL, NULL);
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
BKE_undosys_step_push(ustack, NULL, NULL);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
@@ -1091,8 +1091,8 @@ static UndoSculpt *sculpt_undosys_step_get_nodes(UndoStep *us_p)
|
||||
|
||||
static UndoSculpt *sculpt_undo_get_nodes(void)
|
||||
{
|
||||
wmWindowManager *wm = G.main->wm.first; /* XXX, avoids adding extra arg. */
|
||||
UndoStep *us = BKE_undosys_stack_init_or_active_with_type(wm->undo_stack, BKE_UNDOSYS_TYPE_SCULPT);
|
||||
UndoStack *ustack = ED_undo_stack_get();
|
||||
UndoStep *us = BKE_undosys_stack_init_or_active_with_type(ustack, BKE_UNDOSYS_TYPE_SCULPT);
|
||||
return sculpt_undosys_step_get_nodes(us);
|
||||
}
|
||||
|
||||
|
@@ -49,7 +49,6 @@
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_curve.h"
|
||||
#include "BKE_fcurve.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_screen.h"
|
||||
#include "BKE_unit.h"
|
||||
|
||||
|
@@ -56,7 +56,6 @@
|
||||
#include "BKE_fcurve.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_key.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_nla.h"
|
||||
#include "BKE_scene.h"
|
||||
#include "BKE_context.h"
|
||||
|
@@ -59,7 +59,6 @@
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_key.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_nla.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_report.h"
|
||||
|
@@ -38,7 +38,6 @@
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_report.h"
|
||||
#include "BKE_text.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
@@ -42,6 +42,7 @@
|
||||
#include "BKE_blender_undo.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_screen.h"
|
||||
#include "BKE_undo_system.h"
|
||||
|
||||
@@ -190,6 +191,19 @@ bool ED_undo_is_valid(const bContext *C, const char *undoname)
|
||||
return BKE_undosys_stack_has_undo(wm->undo_stack, undoname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ideally we wont access the stack directly,
|
||||
* this is needed for modes which handle undo themselves (bypassing #ED_undo_push).
|
||||
*
|
||||
* Using global isn't great, this just avoids doing inline,
|
||||
* causing 'BKE_global.h' & 'BKE_main.h' includes.
|
||||
*/
|
||||
UndoStack *ED_undo_stack_get(void)
|
||||
{
|
||||
wmWindowManager *wm = G.main->wm.first;
|
||||
return wm->undo_stack;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@@ -380,13 +380,13 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
|
||||
*
|
||||
* \attention Defined in scaling.c
|
||||
*/
|
||||
struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
|
||||
bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
|
||||
|
||||
/**
|
||||
*
|
||||
* \attention Defined in scaling.c
|
||||
*/
|
||||
struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
|
||||
bool IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -399,7 +399,7 @@ void IMB_scaleImBuf_threaded(struct ImBuf *ibuf, unsigned int newx, unsigned int
|
||||
* \attention Defined in writeimage.c
|
||||
*/
|
||||
short IMB_saveiff(struct ImBuf *ibuf, const char *filepath, int flags);
|
||||
struct ImBuf *IMB_prepare_write_ImBuf(const bool isfloat, struct ImBuf *ibuf);
|
||||
bool IMB_prepare_write_ImBuf(const bool isfloat, struct ImBuf *ibuf);
|
||||
|
||||
/**
|
||||
*
|
||||
|
@@ -1550,12 +1550,17 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, int newx, int newy)
|
||||
}
|
||||
}
|
||||
|
||||
struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
|
||||
/**
|
||||
* Return true if \a ibuf is modified.
|
||||
*/
|
||||
bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
|
||||
{
|
||||
if (ibuf == NULL) return (NULL);
|
||||
if (ibuf->rect == NULL && ibuf->rect_float == NULL) return (ibuf);
|
||||
if (ibuf == NULL) return false;
|
||||
if (ibuf->rect == NULL && ibuf->rect_float == NULL) return false;
|
||||
|
||||
if (newx == ibuf->x && newy == ibuf->y) { return ibuf; }
|
||||
if (newx == ibuf->x && newy == ibuf->y) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* scaleup / scaledown functions below change ibuf->x and ibuf->y
|
||||
* so we first scale the Z-buffer (if any) */
|
||||
@@ -1564,7 +1569,7 @@ struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int
|
||||
/* try to scale common cases in a fast way */
|
||||
/* disabled, quality loss is unacceptable, see report #18609 (ton) */
|
||||
if (0 && q_scale_linear_interpolation(ibuf, newx, newy)) {
|
||||
return ibuf;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (newx && (newx < ibuf->x)) scaledownx(ibuf, newx);
|
||||
@@ -1572,14 +1577,17 @@ struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int
|
||||
if (newx && (newx > ibuf->x)) scaleupx(ibuf, newx);
|
||||
if (newy && (newy > ibuf->y)) scaleupy(ibuf, newy);
|
||||
|
||||
return(ibuf);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct imbufRGBA {
|
||||
float r, g, b, a;
|
||||
};
|
||||
|
||||
struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
|
||||
/**
|
||||
* Return true if \a ibuf is modified.
|
||||
*/
|
||||
bool IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
|
||||
{
|
||||
unsigned int *rect, *_newrect, *newrect;
|
||||
struct imbufRGBA *rectf, *_newrectf, *newrectf;
|
||||
@@ -1590,16 +1598,16 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
|
||||
rect = NULL; _newrect = NULL; newrect = NULL;
|
||||
rectf = NULL; _newrectf = NULL; newrectf = NULL;
|
||||
|
||||
if (ibuf == NULL) return(NULL);
|
||||
if (ibuf == NULL) return false;
|
||||
if (ibuf->rect) do_rect = true;
|
||||
if (ibuf->rect_float) do_float = true;
|
||||
if (do_rect == false && do_float == false) return(ibuf);
|
||||
if (do_rect == false && do_float == false) return false;
|
||||
|
||||
if (newx == ibuf->x && newy == ibuf->y) return(ibuf);
|
||||
if (newx == ibuf->x && newy == ibuf->y) return false;
|
||||
|
||||
if (do_rect) {
|
||||
_newrect = MEM_mallocN(newx * newy * sizeof(int), "scalefastimbuf");
|
||||
if (_newrect == NULL) return(ibuf);
|
||||
if (_newrect == NULL) return false;
|
||||
newrect = _newrect;
|
||||
}
|
||||
|
||||
@@ -1607,7 +1615,7 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
|
||||
_newrectf = MEM_mallocN(newx * newy * sizeof(float) * 4, "scalefastimbuf f");
|
||||
if (_newrectf == NULL) {
|
||||
if (_newrect) MEM_freeN(_newrect);
|
||||
return(ibuf);
|
||||
return false;
|
||||
}
|
||||
newrectf = _newrectf;
|
||||
}
|
||||
@@ -1654,7 +1662,7 @@ struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned
|
||||
|
||||
ibuf->x = newx;
|
||||
ibuf->y = newy;
|
||||
return(ibuf);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ******** threaded scaling ******** */
|
||||
|
@@ -46,7 +46,7 @@
|
||||
#include "IMB_colormanagement.h"
|
||||
#include "IMB_colormanagement_intern.h"
|
||||
|
||||
static ImBuf *prepare_write_imbuf(const ImFileType *type, ImBuf *ibuf)
|
||||
static bool prepare_write_imbuf(const ImFileType *type, ImBuf *ibuf)
|
||||
{
|
||||
return IMB_prepare_write_ImBuf((type->flag & IM_FTYPE_FLOAT), ibuf);
|
||||
}
|
||||
@@ -64,15 +64,11 @@ short IMB_saveiff(struct ImBuf *ibuf, const char *name, int flags)
|
||||
|
||||
for (type = IMB_FILE_TYPES; type < IMB_FILE_TYPES_LAST; type++) {
|
||||
if (type->save && type->ftype(type, ibuf)) {
|
||||
ImBuf *write_ibuf;
|
||||
short result = false;
|
||||
|
||||
write_ibuf = prepare_write_imbuf(type, ibuf);
|
||||
prepare_write_imbuf(type, ibuf);
|
||||
|
||||
result = type->save(write_ibuf, name, flags);
|
||||
|
||||
if (write_ibuf != ibuf)
|
||||
IMB_freeImBuf(write_ibuf);
|
||||
result = type->save(ibuf, name, flags);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -83,9 +79,9 @@ short IMB_saveiff(struct ImBuf *ibuf, const char *name, int flags)
|
||||
return false;
|
||||
}
|
||||
|
||||
ImBuf *IMB_prepare_write_ImBuf(const bool isfloat, ImBuf *ibuf)
|
||||
bool IMB_prepare_write_ImBuf(const bool isfloat, ImBuf *ibuf)
|
||||
{
|
||||
ImBuf *write_ibuf = ibuf;
|
||||
bool changed = false;
|
||||
|
||||
if (isfloat) {
|
||||
/* pass */
|
||||
@@ -94,8 +90,11 @@ ImBuf *IMB_prepare_write_ImBuf(const bool isfloat, ImBuf *ibuf)
|
||||
if (ibuf->rect == NULL && ibuf->rect_float) {
|
||||
ibuf->rect_colorspace = colormanage_colorspace_get_roled(COLOR_ROLE_DEFAULT_BYTE);
|
||||
IMB_rect_from_float(ibuf);
|
||||
if (ibuf->rect != NULL) {
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return write_ibuf;
|
||||
return changed;
|
||||
}
|
||||
|
@@ -146,6 +146,15 @@ PyObject *PyC_Tuple_PackArray_F32(const float *array, uint len)
|
||||
return tuple;
|
||||
}
|
||||
|
||||
PyObject *PyC_Tuple_PackArray_F64(const double *array, uint len)
|
||||
{
|
||||
PyObject *tuple = PyTuple_New(len);
|
||||
for (uint i = 0; i < len; i++) {
|
||||
PyTuple_SET_ITEM(tuple, i, PyFloat_FromDouble(array[i]));
|
||||
}
|
||||
return tuple;
|
||||
}
|
||||
|
||||
PyObject *PyC_Tuple_PackArray_I32(const int *array, uint len)
|
||||
{
|
||||
PyObject *tuple = PyTuple_New(len);
|
||||
|
@@ -51,12 +51,15 @@ int PyC_AsArray(
|
||||
const PyTypeObject *type, const bool is_double, const char *error_prefix);
|
||||
|
||||
PyObject *PyC_Tuple_PackArray_F32(const float *array, uint len);
|
||||
PyObject *PyC_Tuple_PackArray_F64(const double *array, uint len);
|
||||
PyObject *PyC_Tuple_PackArray_I32(const int *array, uint len);
|
||||
PyObject *PyC_Tuple_PackArray_I32FromBool(const int *array, uint len);
|
||||
PyObject *PyC_Tuple_PackArray_Bool(const bool *array, uint len);
|
||||
|
||||
#define PyC_Tuple_Pack_F32(...) \
|
||||
PyC_Tuple_PackArray_F32(((const float []){__VA_ARGS__}), VA_NARGS_COUNT(__VA_ARGS__))
|
||||
#define PyC_Tuple_Pack_F64(...) \
|
||||
PyC_Tuple_PackArray_F64(((const double []){__VA_ARGS__}), VA_NARGS_COUNT(__VA_ARGS__))
|
||||
#define PyC_Tuple_Pack_I32(...) \
|
||||
PyC_Tuple_PackArray_I32(((const int []){__VA_ARGS__}), VA_NARGS_COUNT(__VA_ARGS__))
|
||||
#define PyC_Tuple_Pack_I32FromBool(...) \
|
||||
|
@@ -1422,8 +1422,8 @@ static PyObject *pyrna_enum_to_py(PointerRNA *ptr, PropertyRNA *prop, int val)
|
||||
|
||||
/* prefer not fail silently in case of api errors, maybe disable it later */
|
||||
CLOG_WARN(BPY_LOG_RNA,
|
||||
"Current value \"%d\" "
|
||||
"matches no enum in '%s', '%s', '%s'\n",
|
||||
"current value '%d' "
|
||||
"matches no enum in '%s', '%s', '%s'",
|
||||
val, RNA_struct_identifier(ptr->type),
|
||||
ptr_name, RNA_property_identifier(prop));
|
||||
|
||||
@@ -6609,7 +6609,7 @@ static PyObject *pyrna_srna_ExternalType(StructRNA *srna)
|
||||
if (bpy_types == NULL) {
|
||||
PyErr_Print();
|
||||
PyErr_Clear();
|
||||
CLOG_ERROR(BPY_LOG_RNA, "failed to find 'bpy_types' module\n");
|
||||
CLOG_ERROR(BPY_LOG_RNA, "failed to find 'bpy_types' module");
|
||||
return NULL;
|
||||
}
|
||||
bpy_types_dict = PyModule_GetDict(bpy_types); /* borrow */
|
||||
@@ -6627,7 +6627,7 @@ static PyObject *pyrna_srna_ExternalType(StructRNA *srna)
|
||||
PyObject *tp_slots = PyDict_GetItem(((PyTypeObject *)newclass)->tp_dict, bpy_intern_str___slots__);
|
||||
|
||||
if (tp_slots == NULL) {
|
||||
CLOG_ERROR(BPY_LOG_RNA, "expected class '%s' to have __slots__ defined, see bpy_types.py\n", idname);
|
||||
CLOG_ERROR(BPY_LOG_RNA, "expected class '%s' to have __slots__ defined, see bpy_types.py", idname);
|
||||
newclass = NULL;
|
||||
}
|
||||
else if (PyTuple_GET_SIZE(tp_bases)) {
|
||||
@@ -6637,12 +6637,12 @@ static PyObject *pyrna_srna_ExternalType(StructRNA *srna)
|
||||
char pyob_info[256];
|
||||
PyC_ObSpitStr(pyob_info, sizeof(pyob_info), base_compare);
|
||||
CLOG_ERROR(BPY_LOG_RNA,
|
||||
"incorrect subclassing of SRNA '%s', expected '%s', see bpy_types.py\n",
|
||||
"incorrect subclassing of SRNA '%s', expected '%s', see bpy_types.py",
|
||||
idname, pyob_info);
|
||||
newclass = NULL;
|
||||
}
|
||||
else {
|
||||
CLOG_INFO(BPY_LOG_RNA, 2, "SRNA sub-classed: '%s'\n", idname);
|
||||
CLOG_INFO(BPY_LOG_RNA, 2, "SRNA sub-classed: '%s'", idname);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6740,7 +6740,7 @@ static PyObject *pyrna_srna_Subtype(StructRNA *srna)
|
||||
}
|
||||
else {
|
||||
/* this should not happen */
|
||||
CLOG_ERROR(BPY_LOG_RNA, "error registering '%s'", idname);
|
||||
CLOG_ERROR(BPY_LOG_RNA, "failed to register '%s'", idname);
|
||||
PyErr_Print();
|
||||
PyErr_Clear();
|
||||
}
|
||||
@@ -7613,7 +7613,7 @@ static int bpy_class_call(bContext *C, PointerRNA *ptr, FunctionRNA *func, Param
|
||||
py_class = RNA_struct_py_type_get(ptr->type);
|
||||
/* rare case. can happen when registering subclasses */
|
||||
if (py_class == NULL) {
|
||||
CLOG_WARN(BPY_LOG_RNA, "unable to get Python class for rna struct '%.200s'\n", RNA_struct_identifier(ptr->type));
|
||||
CLOG_WARN(BPY_LOG_RNA, "unable to get Python class for rna struct '%.200s'", RNA_struct_identifier(ptr->type));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user