Merge branch 'master' into blender2.8
This commit is contained in:
commit
c850320b35
@ -202,7 +202,7 @@ ccl_device_inline float path_state_continuation_probability(KernelGlobals *kg,
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Probalistic termination: use sqrt() to roughly match typical view
|
||||
/* Probabilistic termination: use sqrt() to roughly match typical view
|
||||
* transform and do path termination a bit later on average. */
|
||||
return min(sqrtf(max3(fabs(throughput)) * state->branch_factor), 1.0f);
|
||||
}
|
||||
|
@ -20,7 +20,7 @@
|
||||
CCL_NAMESPACE_BEGIN
|
||||
|
||||
/* Pseudo random numbers, uncomment this for debugging correlations. Only run
|
||||
* this single threaded on a CPU for repeatable resutls. */
|
||||
* this single threaded on a CPU for repeatable results. */
|
||||
//#define __DEBUG_CORRELATION__
|
||||
|
||||
|
||||
|
@ -214,6 +214,11 @@ void Scene::device_update(Device *device_, Progress& progress)
|
||||
|
||||
if(progress.get_cancel() || device->have_error()) return;
|
||||
|
||||
progress.set_status("Updating Particle Systems");
|
||||
particle_system_manager->device_update(device, &dscene, this, progress);
|
||||
|
||||
if(progress.get_cancel() || device->have_error()) return;
|
||||
|
||||
progress.set_status("Updating Meshes");
|
||||
mesh_manager->device_update(device, &dscene, this, progress);
|
||||
|
||||
@ -249,11 +254,6 @@ void Scene::device_update(Device *device_, Progress& progress)
|
||||
|
||||
if(progress.get_cancel() || device->have_error()) return;
|
||||
|
||||
progress.set_status("Updating Particle Systems");
|
||||
particle_system_manager->device_update(device, &dscene, this, progress);
|
||||
|
||||
if(progress.get_cancel() || device->have_error()) return;
|
||||
|
||||
progress.set_status("Updating Integrator");
|
||||
integrator->device_update(device, &dscene, this);
|
||||
|
||||
|
@ -38,7 +38,7 @@ struct World;
|
||||
|
||||
void BKE_world_free(struct World *sc);
|
||||
void BKE_world_init(struct World *wrld);
|
||||
struct World *BKE_world_add(struct Main *bmian, const char *name);
|
||||
struct World *BKE_world_add(struct Main *bmain, const char *name);
|
||||
void BKE_world_copy_data(struct Main *bmain, struct World *wrld_dst, const struct World *wrld_src, const int flag);
|
||||
struct World *BKE_world_copy(struct Main *bmain, const struct World *wrld);
|
||||
struct World *BKE_world_localize(struct World *wrld);
|
||||
|
@ -2628,6 +2628,9 @@ void BKE_curve_bevelList_free(ListBase *bev)
|
||||
if (bl->segbevcount != NULL) {
|
||||
MEM_freeN(bl->segbevcount);
|
||||
}
|
||||
if (bl->bevpoints != NULL) {
|
||||
MEM_freeN(bl->bevpoints);
|
||||
}
|
||||
MEM_freeN(bl);
|
||||
}
|
||||
|
||||
|
@ -2803,7 +2803,9 @@ void psys_cache_edit_paths(const EvaluationContext *eval_ctx, Scene *scene, Obje
|
||||
|
||||
/* frs_sec = (psys || edit->pid.flag & PTCACHE_VEL_PER_SEC) ? 25.0f : 1.0f; */ /* UNUSED */
|
||||
|
||||
if (pset->brushtype == PE_BRUSH_WEIGHT) {
|
||||
const bool use_weight = (pset->brushtype == PE_BRUSH_WEIGHT) && (psys != NULL) && (psys->particles != NULL);
|
||||
|
||||
if (use_weight) {
|
||||
; /* use weight painting colors now... */
|
||||
}
|
||||
else {
|
||||
@ -2833,10 +2835,11 @@ void psys_cache_edit_paths(const EvaluationContext *eval_ctx, Scene *scene, Obje
|
||||
|
||||
|
||||
/* should init_particle_interpolation set this ? */
|
||||
if (pset->brushtype == PE_BRUSH_WEIGHT) {
|
||||
if (use_weight) {
|
||||
pind.hkey[0] = NULL;
|
||||
/* pa != NULL since the weight brush is only available for hair */
|
||||
pind.hkey[1] = pa->hair;
|
||||
pind.hkey[0] = pa->hair;
|
||||
pind.hkey[1] = pa->hair + 1;
|
||||
}
|
||||
|
||||
|
||||
@ -2893,13 +2896,27 @@ void psys_cache_edit_paths(const EvaluationContext *eval_ctx, Scene *scene, Obje
|
||||
}
|
||||
|
||||
/* selection coloring in edit mode */
|
||||
if (pset->brushtype == PE_BRUSH_WEIGHT) {
|
||||
float t2;
|
||||
|
||||
if (use_weight) {
|
||||
if (k == 0) {
|
||||
weight_to_rgb(ca->col, pind.hkey[1]->weight);
|
||||
}
|
||||
else {
|
||||
/* warning: copied from 'do_particle_interpolation' (without 'mvert' array stepping) */
|
||||
float real_t;
|
||||
if (result.time < 0.0f) {
|
||||
real_t = -result.time;
|
||||
}
|
||||
else {
|
||||
real_t = pind.hkey[0]->time + t * (pind.hkey[0][pa->totkey - 1].time - pind.hkey[0]->time);
|
||||
}
|
||||
|
||||
while (pind.hkey[1]->time < real_t) {
|
||||
pind.hkey[1]++;
|
||||
}
|
||||
pind.hkey[0] = pind.hkey[1] - 1;
|
||||
/* end copy */
|
||||
|
||||
|
||||
float w1[3], w2[3];
|
||||
keytime = (t - (*pind.ekey[0]->time)) / ((*pind.ekey[1]->time) - (*pind.ekey[0]->time));
|
||||
|
||||
@ -2908,13 +2925,6 @@ void psys_cache_edit_paths(const EvaluationContext *eval_ctx, Scene *scene, Obje
|
||||
|
||||
interp_v3_v3v3(ca->col, w1, w2, keytime);
|
||||
}
|
||||
|
||||
/* at the moment this is only used for weight painting.
|
||||
* will need to move out of this check if its used elsewhere. */
|
||||
t2 = birthtime + ((float)k / (float)segments) * (dietime - birthtime);
|
||||
|
||||
while (pind.hkey[1]->time < t2) pind.hkey[1]++;
|
||||
pind.hkey[0] = pind.hkey[1] - 1;
|
||||
}
|
||||
else {
|
||||
if ((ekey + (pind.ekey[0] - point->keys))->flag & PEK_SELECT) {
|
||||
|
@ -1172,6 +1172,10 @@ Scene *BKE_scene_find_from_collection(const Main *bmain, const SceneCollection *
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
Object *BKE_scene_camera_switch_find(Scene *scene)
|
||||
{
|
||||
if (scene->r.mode & R_NO_CAMERA_SWITCH) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TimeMarker *m;
|
||||
int cfra = scene->r.cfra;
|
||||
int frame = -(MAXFRAME + 1);
|
||||
|
@ -3203,11 +3203,12 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
|
||||
int scemode;
|
||||
int cfra;
|
||||
float subframe;
|
||||
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
ListBase markers;
|
||||
int mode;
|
||||
#endif
|
||||
} orig_data;
|
||||
|
||||
|
||||
/* Old info:
|
||||
* Hack! This function can be called from do_render_seq(), in that case
|
||||
* the seq->scene can already have a Render initialized with same name,
|
||||
@ -3271,7 +3272,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
|
||||
orig_data.cfra = scene->r.cfra;
|
||||
orig_data.subframe = scene->r.subframe;
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
orig_data.markers = scene->markers;
|
||||
orig_data.mode = scene->r.mode;
|
||||
#endif
|
||||
|
||||
BKE_scene_frame_set(scene, frame);
|
||||
@ -3294,10 +3295,10 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
|
||||
|
||||
/* prevent eternal loop */
|
||||
scene->r.scemode &= ~R_DOSEQ;
|
||||
|
||||
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
/* stooping to new low's in hackyness :( */
|
||||
BLI_listbase_clear(&scene->markers);
|
||||
scene->r.mode |= R_NO_CAMERA_SWITCH;
|
||||
#endif
|
||||
|
||||
is_frame_update = (orig_data.cfra != scene->r.cfra) || (orig_data.subframe != scene->r.subframe);
|
||||
@ -3426,7 +3427,7 @@ finally:
|
||||
|
||||
#ifdef DURIAN_CAMERA_SWITCH
|
||||
/* stooping to new low's in hackyness :( */
|
||||
scene->markers = orig_data.markers;
|
||||
scene->r.mode &= ~(orig_data.mode & R_NO_CAMERA_SWITCH);
|
||||
#endif
|
||||
|
||||
return ibuf;
|
||||
|
@ -162,7 +162,7 @@ static int draw_poly_v2i_n__span_y_sort(const void *a_p, const void *b_p, void *
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws a filled polyon with support for self intersections.
|
||||
* Draws a filled polygon with support for self intersections.
|
||||
*
|
||||
* \param callback: Takes the x, y coords and x-span (\a x_end is not inclusive),
|
||||
* note that \a x_end will always be greater than \a x, so we can use:
|
||||
|
@ -10316,7 +10316,7 @@ static void give_base_to_objects(
|
||||
|
||||
if (flag & FILE_AUTOSELECT) {
|
||||
/* Note that link_object_postprocess() already checks for FILE_AUTOSELECT flag,
|
||||
* but it will miss objects from non-instanciated groups... */
|
||||
* but it will miss objects from non-instantiated groups... */
|
||||
if (base->flag & BASE_SELECTABLED) {
|
||||
base->flag |= BASE_SELECTED;
|
||||
BKE_scene_object_base_flag_sync_from_base(base);
|
||||
|
@ -3198,7 +3198,7 @@ static void bevel_build_rings(BevelParams *bp, BMesh *bm, BevVert *bv)
|
||||
|
||||
/* If we make a poly out of verts around bv, snapping to rep frep, will uv poly have zero area?
|
||||
* The uv poly is made by snapping all outside-of-frep vertices to the closest edge in frep.
|
||||
* Assume that this funciton is called when the only inside-of-frep vertex is vm->boundstart.
|
||||
* Assume that this function is called when the only inside-of-frep vertex is vm->boundstart.
|
||||
* The poly will have zero area if the distance of that first vertex to some edge e is zero, and all
|
||||
* the other vertices snap to e or snap to an edge at a point that is essentially on e too. */
|
||||
static bool is_bad_uv_poly(BevVert *bv, BMFace *frep)
|
||||
|
@ -156,7 +156,7 @@ bool ED_do_pose_selectbuffer(
|
||||
* always give predictable behavior in weight paint mode - campbell */
|
||||
if ((ob_act == NULL) || ((ob_act != ob) && (ob_act->mode & OB_MODE_WEIGHT_PAINT) == 0)) {
|
||||
/* when we are entering into posemode via toggle-select,
|
||||
* frop another active object - always select the bone. */
|
||||
* from another active object - always select the bone. */
|
||||
if (!extend && !deselect && toggle) {
|
||||
/* re-select below */
|
||||
nearBone->flag &= ~BONE_SELECTED;
|
||||
|
@ -721,7 +721,7 @@ void ED_preview_draw(const bContext *C, void *idp, void *parentp, void *slotp, r
|
||||
if (ok)
|
||||
*rect = newrect;
|
||||
|
||||
/* start a new preview render job if signalled through sbuts->preview,
|
||||
/* start a new preview render job if signaled through sbuts->preview,
|
||||
* if no render result was found and no preview render job is running,
|
||||
* or if the job is running and the size of preview changed */
|
||||
if ((sbuts != NULL && sbuts->preview) ||
|
||||
|
@ -1152,9 +1152,10 @@ static int image_cmp_frame(const void *a, const void *b)
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Return the start (offset) and the length of the sequence of continuous frames in the list of frames
|
||||
* \param frames [in] the list of frame numbers, as a side-effect the list is sorted
|
||||
* \param ofs [out] offest, the first frame number in the sequence
|
||||
* Return the start (offset) and the length of the sequence of continuous frames in the list of frames
|
||||
*
|
||||
* \param frames: [in] the list of frame numbers, as a side-effect the list is sorted.
|
||||
* \param ofs: [out] offset the first frame number in the sequence.
|
||||
* \return the number of contiguous frames in the sequence
|
||||
*/
|
||||
static int image_sequence_get_len(ListBase *frames, int *ofs)
|
||||
|
@ -97,8 +97,8 @@ static eOLDrawState tree_element_active_renderlayer(
|
||||
|
||||
/**
|
||||
* Select object tree:
|
||||
* CTRL+LMB: Select/Deselect object and all cildren
|
||||
* CTRL+SHIFT+LMB: Add/Remove object and all children
|
||||
* CTRL+LMB: Select/Deselect object and all children.
|
||||
* CTRL+SHIFT+LMB: Add/Remove object and all children.
|
||||
*/
|
||||
static void do_outliner_object_select_recursive(ViewLayer *view_layer, Object *ob_parent, bool select)
|
||||
{
|
||||
|
@ -1732,7 +1732,8 @@ typedef struct Scene {
|
||||
#define R_BORDER 0x0200
|
||||
#define R_PANORAMA 0x0400 /* deprecated as scene option, still used in renderer */
|
||||
#define R_CROP 0x0800
|
||||
/*#define R_COSMO 0x1000 deprecated */
|
||||
/* Disable camera switching: runtime (DURIAN_CAMERA_SWITCH) */
|
||||
#define R_NO_CAMERA_SWITCH 0x1000
|
||||
#define R_ODDFIELD 0x2000
|
||||
#define R_MBLUR 0x4000
|
||||
/* unified was here */
|
||||
|
@ -792,7 +792,7 @@ FunctionRNA *RNA_struct_find_function(StructRNA *srna, const char *identifier)
|
||||
}
|
||||
return NULL;
|
||||
|
||||
/* funcitonal but slow */
|
||||
/* functional but slow */
|
||||
#else
|
||||
PointerRNA tptr;
|
||||
PropertyRNA *iterprop;
|
||||
|
@ -1641,9 +1641,9 @@ static PyObject *Matrix_rotate(MatrixObject *self, PyObject *value)
|
||||
PyDoc_STRVAR(Matrix_decompose_doc,
|
||||
".. method:: decompose()\n"
|
||||
"\n"
|
||||
" Return the translation, rotation and scale components of this matrix.\n"
|
||||
" Return the translation, rotation, and scale components of this matrix.\n"
|
||||
"\n"
|
||||
" :return: trans, rot, scale triple.\n"
|
||||
" :return: tuple of translation, rotation, and scale\n"
|
||||
" :rtype: (:class:`Vector`, :class:`Quaternion`, :class:`Vector`)"
|
||||
);
|
||||
static PyObject *Matrix_decompose(MatrixObject *self)
|
||||
@ -1680,7 +1680,8 @@ static PyObject *Matrix_decompose(MatrixObject *self)
|
||||
PyDoc_STRVAR(Matrix_lerp_doc,
|
||||
".. function:: lerp(other, factor)\n"
|
||||
"\n"
|
||||
" Returns the interpolation of two matrices.\n"
|
||||
" Returns the interpolation of two matrices. Uses polar decomposition, see"
|
||||
" \"Matrix Animation and Polar Decomposition\", Shoemake and Duff, 1992.\n"
|
||||
"\n"
|
||||
" :arg other: value to interpolate with.\n"
|
||||
" :type other: :class:`Matrix`\n"
|
||||
|
@ -89,7 +89,7 @@ const char *utf8_invalid_tests[][3] = {
|
||||
|
||||
// 3 Malformed sequences
|
||||
// 3.1 Unexpected continuation bytes
|
||||
// Each unexpected continuation byte should be separately signalled as a malformed sequence of its own.
|
||||
// Each unexpected continuation byte should be separately signaled as a malformed sequence of its own.
|
||||
{"3.1.1 First continuation byte 0x80: \"\x80\" |",
|
||||
"3.1.1 First continuation byte 0x80: \"\" |", "\x01"},
|
||||
{"3.1.2 Last continuation byte 0xbf: \"\xbf\" |",
|
||||
@ -130,7 +130,7 @@ const char *utf8_invalid_tests[][3] = {
|
||||
{"3.2.4 \"\xfc \xfd \" |",
|
||||
"3.2.4 \" \" |", "\x02"},
|
||||
// 3.3 Sequences with last continuation byte missing
|
||||
// All bytes of an incomplete sequence should be signalled as a single malformed sequence,
|
||||
// All bytes of an incomplete sequence should be signaled as a single malformed sequence,
|
||||
// i.e., you should see only a single replacement character in each of the next 10 tests.
|
||||
// (Characters as in section 2)
|
||||
{"3.3.1 2-byte sequence with last byte missing (U+0000): \"\xc0\" |",
|
||||
@ -154,7 +154,7 @@ const char *utf8_invalid_tests[][3] = {
|
||||
{"3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): \"\xfd\xbf\xbf\xbf\xbf\" |",
|
||||
"3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): \"\" |", "\x05"},
|
||||
// 3.4 Concatenation of incomplete sequences
|
||||
// All the 10 sequences of 3.3 concatenated, you should see 10 malformed sequences being signalled:
|
||||
// All the 10 sequences of 3.3 concatenated, you should see 10 malformed sequences being signaled:
|
||||
{"3.4 \"\xc0\xe0\x80\xf0\x80\x80\xf8\x80\x80\x80\xfc\x80\x80\x80\x80"
|
||||
"\xdf\xef\xbf\xf7\xbf\xbf\xfb\xbf\xbf\xbf\xfd\xbf\xbf\xbf\xbf\""
|
||||
" |",
|
||||
|
Loading…
Reference in New Issue
Block a user