Merge branch 'master' into blender2.8
This commit is contained in:
@@ -1101,9 +1101,6 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
|
||||
render = context.scene.render
|
||||
|
||||
col = layout.column()
|
||||
col.prop(render, "use_sequencer_gl_preview", text="OpenGL Preview")
|
||||
col = layout.column()
|
||||
#col.active = render.use_sequencer_gl_preview
|
||||
col.prop(render, "sequencer_gl_preview", text="")
|
||||
|
||||
row = col.row()
|
||||
|
||||
@@ -219,7 +219,7 @@ struct DerivedMesh {
|
||||
/** Recalculates mesh tessellation */
|
||||
void (*recalcTessellation)(DerivedMesh *dm);
|
||||
|
||||
/** Loop tessellation cache */
|
||||
/** Loop tessellation cache (WARNING! Only call inside threading-protected code!) */
|
||||
void (*recalcLoopTri)(DerivedMesh *dm);
|
||||
/** accessor functions */
|
||||
const struct MLoopTri *(*getLoopTriArray)(DerivedMesh * dm);
|
||||
@@ -605,7 +605,6 @@ void DM_ensure_normals(DerivedMesh *dm);
|
||||
void DM_ensure_tessface(DerivedMesh *dm);
|
||||
|
||||
void DM_ensure_looptri_data(DerivedMesh *dm);
|
||||
void DM_ensure_looptri(DerivedMesh *dm);
|
||||
void DM_verttri_from_looptri(MVertTri *verttri, const MLoop *mloop, const MLoopTri *looptri, int looptri_num);
|
||||
|
||||
void DM_update_tessface_data(DerivedMesh *dm);
|
||||
@@ -808,11 +807,5 @@ struct MEdge *DM_get_edge_array(struct DerivedMesh *dm, bool *r_allocated);
|
||||
struct MLoop *DM_get_loop_array(struct DerivedMesh *dm, bool *r_allocated);
|
||||
struct MPoly *DM_get_poly_array(struct DerivedMesh *dm, bool *r_allocated);
|
||||
struct MFace *DM_get_tessface_array(struct DerivedMesh *dm, bool *r_allocated);
|
||||
const MLoopTri *DM_get_looptri_array(
|
||||
DerivedMesh *dm,
|
||||
const MVert *mvert,
|
||||
const MPoly *mpoly, int mpoly_len,
|
||||
const MLoop *mloop, int mloop_len,
|
||||
bool *r_allocated);
|
||||
|
||||
#endif /* __BKE_DERIVEDMESH_H__ */
|
||||
|
||||
@@ -96,6 +96,10 @@ static DerivedMesh *navmesh_dm_createNavMeshForVisualization(DerivedMesh *dm);
|
||||
# define ASSERT_IS_VALID_DM(dm)
|
||||
#endif
|
||||
|
||||
|
||||
static ThreadMutex loops_cache_lock = BLI_MUTEX_INITIALIZER;
|
||||
|
||||
|
||||
static void add_shapekey_layers(DerivedMesh *dm, Mesh *me, Object *ob);
|
||||
static void shapekey_layers_to_keyblocks(DerivedMesh *dm, Mesh *me, int actshape_uid);
|
||||
|
||||
@@ -238,6 +242,23 @@ static int dm_getNumLoopTri(DerivedMesh *dm)
|
||||
return numlooptris;
|
||||
}
|
||||
|
||||
static const MLoopTri *dm_getLoopTriArray(DerivedMesh *dm)
|
||||
{
|
||||
if (dm->looptris.array) {
|
||||
BLI_assert(dm->getNumLoopTri(dm) == dm->looptris.num);
|
||||
}
|
||||
else {
|
||||
BLI_mutex_lock(&loops_cache_lock);
|
||||
/* We need to ensure array is still NULL inside mutex-protected code, some other thread might have already
|
||||
* recomputed those looptris. */
|
||||
if (dm->looptris.array == NULL) {
|
||||
dm->recalcLoopTri(dm);
|
||||
}
|
||||
BLI_mutex_unlock(&loops_cache_lock);
|
||||
}
|
||||
return dm->looptris.array;
|
||||
}
|
||||
|
||||
static CustomData *dm_getVertCData(DerivedMesh *dm)
|
||||
{
|
||||
return &dm->vertData;
|
||||
@@ -281,6 +302,8 @@ void DM_init_funcs(DerivedMesh *dm)
|
||||
dm->dupLoopArray = dm_dupLoopArray;
|
||||
dm->dupPolyArray = dm_dupPolyArray;
|
||||
|
||||
dm->getLoopTriArray = dm_getLoopTriArray;
|
||||
|
||||
/* subtypes handle getting actual data */
|
||||
dm->getNumLoopTri = dm_getNumLoopTri;
|
||||
|
||||
@@ -501,19 +524,6 @@ void DM_ensure_looptri_data(DerivedMesh *dm)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The purpose of this function is that we can call:
|
||||
* `dm->getLoopTriArray(dm)` and get the array returned.
|
||||
*/
|
||||
void DM_ensure_looptri(DerivedMesh *dm)
|
||||
{
|
||||
const int numPolys = dm->getNumPolys(dm);
|
||||
|
||||
if ((dm->looptris.num == 0) && (numPolys != 0)) {
|
||||
dm->recalcLoopTri(dm);
|
||||
}
|
||||
}
|
||||
|
||||
void DM_verttri_from_looptri(MVertTri *verttri, const MLoop *mloop, const MLoopTri *looptri, int looptri_num)
|
||||
{
|
||||
int i;
|
||||
@@ -2203,7 +2213,6 @@ static void mesh_calc_modifiers(
|
||||
if (dataMask & CD_MASK_MFACE) {
|
||||
DM_ensure_tessface(finaldm);
|
||||
}
|
||||
DM_ensure_looptri(finaldm);
|
||||
|
||||
/* without this, drawing ngon tri's faces will show ugly tessellated face
|
||||
* normals and will also have to calculate normals on the fly, try avoid
|
||||
@@ -3951,35 +3960,3 @@ MFace *DM_get_tessface_array(DerivedMesh *dm, bool *r_allocated)
|
||||
|
||||
return mface;
|
||||
}
|
||||
|
||||
const MLoopTri *DM_get_looptri_array(
|
||||
DerivedMesh *dm,
|
||||
const MVert *mvert,
|
||||
const MPoly *mpoly, int mpoly_len,
|
||||
const MLoop *mloop, int mloop_len,
|
||||
bool *r_allocated)
|
||||
{
|
||||
const MLoopTri *looptri = dm->getLoopTriArray(dm);
|
||||
*r_allocated = false;
|
||||
|
||||
if (looptri == NULL) {
|
||||
if (mpoly_len > 0) {
|
||||
const int looptris_num = poly_to_tri_count(mpoly_len, mloop_len);
|
||||
MLoopTri *looptri_data;
|
||||
|
||||
looptri_data = MEM_mallocN(sizeof(MLoopTri) * looptris_num, __func__);
|
||||
|
||||
BKE_mesh_recalc_looptri(
|
||||
mloop, mpoly,
|
||||
mvert,
|
||||
mloop_len, mpoly_len,
|
||||
looptri_data);
|
||||
|
||||
looptri = looptri_data;
|
||||
|
||||
*r_allocated = true;
|
||||
}
|
||||
}
|
||||
|
||||
return looptri;
|
||||
}
|
||||
|
||||
@@ -107,7 +107,7 @@ static char *blender_version_decimal(const int ver)
|
||||
{
|
||||
static char version_str[5];
|
||||
BLI_assert(ver < 1000);
|
||||
BLI_snprintf(version_str, sizeof(version_str),"%d.%02d", ver / 100, ver % 100);
|
||||
BLI_snprintf(version_str, sizeof(version_str), "%d.%02d", ver / 100, ver % 100);
|
||||
return version_str;
|
||||
}
|
||||
|
||||
|
||||
@@ -1137,7 +1137,6 @@ BVHTree *bvhtree_from_mesh_looptri(
|
||||
const MLoopTri *looptri = NULL;
|
||||
bool vert_allocated = false;
|
||||
bool loop_allocated = false;
|
||||
bool looptri_allocated = false;
|
||||
|
||||
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
|
||||
tree = bvhcache_find(dm->bvhCache, BVHTREE_FROM_LOOPTRI);
|
||||
@@ -1150,12 +1149,7 @@ BVHTree *bvhtree_from_mesh_looptri(
|
||||
mpoly = DM_get_poly_array(dm, &poly_allocated);
|
||||
|
||||
mloop = DM_get_loop_array(dm, &loop_allocated);
|
||||
looptri = DM_get_looptri_array(
|
||||
dm,
|
||||
mvert,
|
||||
mpoly, dm->getNumPolys(dm),
|
||||
mloop, dm->getNumLoops(dm),
|
||||
&looptri_allocated);
|
||||
looptri = dm->getLoopTriArray(dm);
|
||||
|
||||
if (poly_allocated) {
|
||||
MEM_freeN(mpoly);
|
||||
@@ -1193,7 +1187,7 @@ BVHTree *bvhtree_from_mesh_looptri(
|
||||
data, tree, true, epsilon,
|
||||
mvert, vert_allocated,
|
||||
mloop, loop_allocated,
|
||||
looptri, looptri_allocated);
|
||||
looptri, false);
|
||||
}
|
||||
else {
|
||||
if (vert_allocated) {
|
||||
@@ -1202,9 +1196,6 @@ BVHTree *bvhtree_from_mesh_looptri(
|
||||
if (loop_allocated) {
|
||||
MEM_freeN(mloop);
|
||||
}
|
||||
if (looptri_allocated) {
|
||||
MEM_freeN((void *)looptri);
|
||||
}
|
||||
memset(data, 0, sizeof(*data));
|
||||
}
|
||||
|
||||
|
||||
@@ -1807,19 +1807,6 @@ void CDDM_recalc_looptri(DerivedMesh *dm)
|
||||
cddm->dm.looptris.array);
|
||||
}
|
||||
|
||||
static const MLoopTri *cdDM_getLoopTriArray(DerivedMesh *dm)
|
||||
{
|
||||
if (dm->looptris.array) {
|
||||
BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num);
|
||||
}
|
||||
else {
|
||||
dm->recalcLoopTri(dm);
|
||||
|
||||
/* ccdm is an exception here, that recalcLoopTri will fill in the array too */
|
||||
}
|
||||
return dm->looptris.array;
|
||||
}
|
||||
|
||||
static void cdDM_free_internal(CDDerivedMesh *cddm)
|
||||
{
|
||||
if (cddm->pmap) MEM_freeN(cddm->pmap);
|
||||
@@ -1870,8 +1857,6 @@ static CDDerivedMesh *cdDM_create(const char *desc)
|
||||
dm->getEdgeDataArray = DM_get_edge_data_layer;
|
||||
dm->getTessFaceDataArray = DM_get_tessface_data_layer;
|
||||
|
||||
dm->getLoopTriArray = cdDM_getLoopTriArray;
|
||||
|
||||
dm->calcNormals = CDDM_calc_normals;
|
||||
dm->calcLoopNormals = CDDM_calc_loop_normals;
|
||||
dm->calcLoopNormalsSpaceArray = CDDM_calc_loop_normals_spacearr;
|
||||
@@ -3056,7 +3041,7 @@ DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap, const int
|
||||
MPoly *target_poly = cddm->mpoly + *(cddm->pmap[v_target].indices + i_poly);
|
||||
|
||||
if (cddm_poly_compare(cddm->mloop, mp, target_poly, vtargetmap, +1) ||
|
||||
cddm_poly_compare(cddm->mloop, mp, target_poly, vtargetmap, -1))
|
||||
cddm_poly_compare(cddm->mloop, mp, target_poly, vtargetmap, -1))
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
||||
@@ -806,7 +806,6 @@ static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *d
|
||||
if ( !dm )
|
||||
return 0;
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
cloth_from_mesh ( clmd, dm );
|
||||
|
||||
// create springs
|
||||
|
||||
@@ -2062,9 +2062,6 @@ DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, struct Eval
|
||||
if (pmd->canvas) {
|
||||
DerivedMesh *ret;
|
||||
|
||||
/* For now generate looptris in every case */
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
/* Update canvas data for a new frame */
|
||||
dynamicPaint_frameUpdate(pmd, eval_ctx, scene, ob, dm);
|
||||
|
||||
@@ -2074,9 +2071,6 @@ DerivedMesh *dynamicPaint_Modifier_do(DynamicPaintModifierData *pmd, struct Eval
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
/* For now generate looptris in every case */
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
/* Update canvas data for a new frame */
|
||||
dynamicPaint_frameUpdate(pmd, eval_ctx, scene, ob, dm);
|
||||
|
||||
|
||||
@@ -299,18 +299,6 @@ static void emDM_recalcLoopTri(DerivedMesh *dm)
|
||||
}
|
||||
}
|
||||
|
||||
static const MLoopTri *emDM_getLoopTriArray(DerivedMesh *dm)
|
||||
{
|
||||
if (dm->looptris.array) {
|
||||
BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num);
|
||||
}
|
||||
else {
|
||||
dm->recalcLoopTri(dm);
|
||||
}
|
||||
|
||||
return dm->looptris.array;
|
||||
}
|
||||
|
||||
static void emDM_foreachMappedVert(
|
||||
DerivedMesh *dm,
|
||||
void (*func)(void *userData, int index, const float co[3], const float no_f[3], const short no_s[3]),
|
||||
@@ -1639,8 +1627,6 @@ DerivedMesh *getEditDerivedBMesh(
|
||||
bmdm->dm.getNumLoops = emDM_getNumLoops;
|
||||
bmdm->dm.getNumPolys = emDM_getNumPolys;
|
||||
|
||||
bmdm->dm.getLoopTriArray = emDM_getLoopTriArray;
|
||||
|
||||
bmdm->dm.getVert = emDM_getVert;
|
||||
bmdm->dm.getVertCo = emDM_getVertCo;
|
||||
bmdm->dm.getVertNo = emDM_getVertNo;
|
||||
|
||||
@@ -80,8 +80,6 @@ void initElbeemMesh(struct EvaluationContext *eval_ctx, struct Scene *scene, str
|
||||
|
||||
dm = mesh_create_derived_index_render(eval_ctx, scene, ob, CD_MASK_BAREMESH, modifierIndex);
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
mvert = dm->getVertArray(dm);
|
||||
mloop = dm->getLoopArray(dm);
|
||||
looptri = dm->getLoopTriArray(dm);
|
||||
|
||||
@@ -1184,7 +1184,6 @@ void BKE_mesh_remap_calc_loops_from_dm(
|
||||
bool polys_allocated_src;
|
||||
MPoly *polys_src = DM_get_poly_array(dm_src, &polys_allocated_src);
|
||||
const int num_polys_src = dm_src->getNumPolys(dm_src);
|
||||
bool looptri_allocated_src = false;
|
||||
const MLoopTri *looptri_src = NULL;
|
||||
int num_looptri_src = 0;
|
||||
|
||||
@@ -1374,17 +1373,11 @@ void BKE_mesh_remap_calc_loops_from_dm(
|
||||
if (dirty_tess_flag) {
|
||||
dm_src->dirty &= ~dirty_tess_flag;
|
||||
}
|
||||
DM_ensure_looptri(dm_src);
|
||||
if (dirty_tess_flag) {
|
||||
dm_src->dirty |= dirty_tess_flag;
|
||||
}
|
||||
|
||||
looptri_src = DM_get_looptri_array(
|
||||
dm_src,
|
||||
verts_src,
|
||||
polys_src, num_polys_src,
|
||||
loops_src, num_loops_src,
|
||||
&looptri_allocated_src);
|
||||
looptri_src = dm_src->getLoopTriArray(dm_src);
|
||||
num_looptri_src = dm_src->getNumLoopTri(dm_src);
|
||||
looptri_active = BLI_BITMAP_NEW((size_t)num_looptri_src, __func__);
|
||||
|
||||
@@ -1403,7 +1396,7 @@ void BKE_mesh_remap_calc_loops_from_dm(
|
||||
&treedata[tindex],
|
||||
verts_src, verts_allocated_src,
|
||||
loops_src, loops_allocated_src,
|
||||
looptri_src, num_looptri_src, looptri_allocated_src,
|
||||
looptri_src, num_looptri_src, false,
|
||||
looptri_active, num_looptri_active, bvh_epsilon, 2, 6);
|
||||
if (verts_allocated_src) {
|
||||
verts_allocated_src = false; /* Only 'give' our verts once, to first tree! */
|
||||
@@ -1411,9 +1404,6 @@ void BKE_mesh_remap_calc_loops_from_dm(
|
||||
if (loops_allocated_src) {
|
||||
loops_allocated_src = false; /* Only 'give' our loops once, to first tree! */
|
||||
}
|
||||
if (looptri_allocated_src) {
|
||||
looptri_allocated_src = false; /* Only 'give' our looptri once, to first tree! */
|
||||
}
|
||||
}
|
||||
|
||||
MEM_freeN(looptri_active);
|
||||
@@ -1928,9 +1918,6 @@ void BKE_mesh_remap_calc_loops_from_dm(
|
||||
if (polys_allocated_src) {
|
||||
MEM_freeN(polys_src);
|
||||
}
|
||||
if (looptri_allocated_src) {
|
||||
MEM_freeN((void *)looptri_src);
|
||||
}
|
||||
if (vert_to_loop_map_src) {
|
||||
MEM_freeN(vert_to_loop_map_src);
|
||||
}
|
||||
|
||||
@@ -290,8 +290,6 @@ static rbCollisionShape *rigidbody_get_shape_trimesh_from_mesh(Object *ob)
|
||||
if (dm == NULL)
|
||||
return NULL;
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
mvert = dm->getVertArray(dm);
|
||||
totvert = dm->getNumVerts(dm);
|
||||
looptri = dm->getLoopTriArray(dm);
|
||||
@@ -523,8 +521,6 @@ void BKE_rigidbody_calc_volume(Object *ob, float *r_vol)
|
||||
if (dm == NULL)
|
||||
return;
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
mvert = dm->getVertArray(dm);
|
||||
totvert = dm->getNumVerts(dm);
|
||||
lt = dm->getLoopTriArray(dm);
|
||||
@@ -608,8 +604,6 @@ void BKE_rigidbody_calc_center_of_mass(Object *ob, float r_center[3])
|
||||
if (dm == NULL)
|
||||
return;
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
mvert = dm->getVertArray(dm);
|
||||
totvert = dm->getNumVerts(dm);
|
||||
looptri = dm->getLoopTriArray(dm);
|
||||
|
||||
@@ -803,7 +803,7 @@ void BKE_scene_init(Scene *sce)
|
||||
|
||||
sce->r.seq_prev_type = OB_SOLID;
|
||||
sce->r.seq_rend_type = OB_SOLID;
|
||||
sce->r.seq_flag = R_SEQ_GL_PREV;
|
||||
sce->r.seq_flag = 0;
|
||||
|
||||
sce->r.threads = 1;
|
||||
|
||||
|
||||
@@ -3235,7 +3235,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
|
||||
const bool is_background = G.background;
|
||||
const bool do_seq_gl = is_rendering ?
|
||||
0 /* (context->scene->r.seq_flag & R_SEQ_GL_REND) */ :
|
||||
(context->scene->r.seq_flag & R_SEQ_GL_PREV) != 0;
|
||||
(context->scene->r.seq_prev_type) != OB_RENDER;
|
||||
// bool have_seq = false; /* UNUSED */
|
||||
bool have_comp = false;
|
||||
bool use_gpencil = true;
|
||||
|
||||
@@ -2694,7 +2694,6 @@ static void smokeModifier_process(SmokeModifierData *smd, struct EvaluationConte
|
||||
|
||||
if (smd->flow->dm) smd->flow->dm->release(smd->flow->dm);
|
||||
smd->flow->dm = CDDM_copy(dm);
|
||||
DM_ensure_looptri(smd->flow->dm);
|
||||
|
||||
if (scene->r.cfra > smd->time)
|
||||
{
|
||||
@@ -2717,7 +2716,6 @@ static void smokeModifier_process(SmokeModifierData *smd, struct EvaluationConte
|
||||
smd->coll->dm->release(smd->coll->dm);
|
||||
|
||||
smd->coll->dm = CDDM_copy(dm);
|
||||
DM_ensure_looptri(smd->coll->dm);
|
||||
}
|
||||
|
||||
smd->time = scene->r.cfra;
|
||||
|
||||
@@ -4220,10 +4220,10 @@ static void ccgDM_recalcTessellation(DerivedMesh *UNUSED(dm))
|
||||
/* Nothing to do: CCG handles creating its own tessfaces */
|
||||
}
|
||||
|
||||
/* WARNING! *MUST* be called in an 'loops_cache_rwlock' protected thread context! */
|
||||
static void ccgDM_recalcLoopTri(DerivedMesh *dm)
|
||||
{
|
||||
BLI_rw_mutex_lock(&loops_cache_rwlock, THREAD_LOCK_WRITE);
|
||||
MLoopTri *mlooptri;
|
||||
MLoopTri *mlooptri = dm->looptris.array;
|
||||
const int tottri = dm->numPolyData * 2;
|
||||
int i, poly_index;
|
||||
|
||||
@@ -4248,19 +4248,6 @@ static void ccgDM_recalcLoopTri(DerivedMesh *dm)
|
||||
lt->tri[2] = (poly_index * 4) + 2;
|
||||
lt->poly = poly_index;
|
||||
}
|
||||
BLI_rw_mutex_unlock(&loops_cache_rwlock);
|
||||
}
|
||||
|
||||
static const MLoopTri *ccgDM_getLoopTriArray(DerivedMesh *dm)
|
||||
{
|
||||
if (dm->looptris.array) {
|
||||
BLI_assert(poly_to_tri_count(dm->numPolyData, dm->numLoopData) == dm->looptris.num);
|
||||
}
|
||||
else {
|
||||
dm->recalcLoopTri(dm);
|
||||
}
|
||||
|
||||
return dm->looptris.array;
|
||||
}
|
||||
|
||||
static void ccgDM_calcNormals(DerivedMesh *dm)
|
||||
@@ -4279,8 +4266,6 @@ static void set_default_ccgdm_callbacks(CCGDerivedMesh *ccgdm)
|
||||
ccgdm->dm.getNumPolys = ccgDM_getNumPolys;
|
||||
ccgdm->dm.getNumTessFaces = ccgDM_getNumTessFaces;
|
||||
|
||||
ccgdm->dm.getLoopTriArray = ccgDM_getLoopTriArray;
|
||||
|
||||
ccgdm->dm.getVert = ccgDM_getFinalVert;
|
||||
ccgdm->dm.getEdge = ccgDM_getFinalEdge;
|
||||
ccgdm->dm.getTessFace = ccgDM_getFinalFace;
|
||||
|
||||
@@ -876,7 +876,7 @@ static void accessor_release_image_callback(libmv_CacheKey cache_key)
|
||||
}
|
||||
|
||||
static libmv_CacheKey accessor_get_mask_for_track_callback(
|
||||
libmv_FrameAccessorUserData* user_data,
|
||||
libmv_FrameAccessorUserData *user_data,
|
||||
int clip_index,
|
||||
int frame,
|
||||
int track_index,
|
||||
|
||||
@@ -160,7 +160,8 @@ static char **get_keys_sorted(GHash *messages, const uint32_t num_keys)
|
||||
return keys;
|
||||
}
|
||||
|
||||
BLI_INLINE size_t uint32_to_bytes(const int value, char *bytes) {
|
||||
BLI_INLINE size_t uint32_to_bytes(const int value, char *bytes)
|
||||
{
|
||||
size_t i;
|
||||
for (i = 0; i < sizeof(value); i++) {
|
||||
bytes[i] = (char) ((value >> ((int)i * 8)) & 0xff);
|
||||
@@ -168,7 +169,8 @@ BLI_INLINE size_t uint32_to_bytes(const int value, char *bytes) {
|
||||
return i;
|
||||
}
|
||||
|
||||
BLI_INLINE size_t msg_to_bytes(char *msg, char *bytes, uint32_t size) {
|
||||
BLI_INLINE size_t msg_to_bytes(char *msg, char *bytes, uint32_t size)
|
||||
{
|
||||
/* Note that we also perform replacing of our NULLSEP placeholder by real NULL char... */
|
||||
size_t i;
|
||||
for (i = 0; i < size; i++, msg++, bytes++) {
|
||||
|
||||
@@ -430,7 +430,6 @@ static bool PE_create_shape_tree(PEData *data, Object *shapeob)
|
||||
return false;
|
||||
}
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
return (bvhtree_from_mesh_looptri(&data->shape_bvh, dm, 0.0f, 4, 8) != NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_mask_types.h"
|
||||
#include "DNA_object_types.h"
|
||||
#include "DNA_screen_types.h"
|
||||
#include "DNA_space_types.h"
|
||||
#include "DNA_userdef_types.h"
|
||||
@@ -1104,18 +1105,16 @@ void draw_image_seq(const bContext *C, Scene *scene, ARegion *ar, SpaceSeq *sseq
|
||||
const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
|
||||
bool draw_metadata = false;
|
||||
|
||||
if (G.is_rendering == false && (scene->r.seq_flag & R_SEQ_GL_PREV) == 0) {
|
||||
if (G.is_rendering == false && (scene->r.seq_prev_type) == OB_RENDER) {
|
||||
/* stop all running jobs, except screen one. currently previews frustrate Render
|
||||
* needed to make so sequencer's rendering doesn't conflict with compositor
|
||||
*/
|
||||
WM_jobs_kill_type(CTX_wm_manager(C), NULL, WM_JOB_TYPE_COMPOSITE);
|
||||
|
||||
if ((scene->r.seq_flag & R_SEQ_GL_PREV) == 0) {
|
||||
/* in case of final rendering used for preview, kill all previews,
|
||||
* otherwise threading conflict will happen in rendering module
|
||||
*/
|
||||
WM_jobs_kill_type(CTX_wm_manager(C), NULL, WM_JOB_TYPE_RENDER_PREVIEW);
|
||||
}
|
||||
/* in case of final rendering used for preview, kill all previews,
|
||||
* otherwise threading conflict will happen in rendering module
|
||||
*/
|
||||
WM_jobs_kill_type(CTX_wm_manager(C), NULL, WM_JOB_TYPE_RENDER_PREVIEW);
|
||||
}
|
||||
|
||||
if ((!draw_overlay || sseq->overlay_type == SEQ_DRAW_OVERLAY_REFERENCE) && !draw_backdrop) {
|
||||
|
||||
@@ -4750,7 +4750,7 @@ void ED_view3d_cursor3d_update(bContext *C, const int mval[2])
|
||||
float co_curr[2], co_prev[2];
|
||||
|
||||
if ((ED_view3d_project_float_global(ar, fp_prev, co_prev, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK) &&
|
||||
(ED_view3d_project_float_global(ar, fp_curr, co_curr, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK))
|
||||
(ED_view3d_project_float_global(ar, fp_curr, co_curr, V3D_PROJ_TEST_NOP) == V3D_PROJ_RET_OK))
|
||||
{
|
||||
rv3d->ofs_lock[0] += (co_curr[0] - co_prev[0]) / (ar->winx * 0.5f);
|
||||
rv3d->ofs_lock[1] += (co_curr[1] - co_prev[1]) / (ar->winy * 0.5f);
|
||||
|
||||
@@ -440,21 +440,18 @@ static bool raycastDerivedMesh(
|
||||
free_bvhtree_from_mesh(treedata);
|
||||
}
|
||||
else {
|
||||
if (!treedata->vert_allocated) {
|
||||
if (treedata->vert == NULL) {
|
||||
treedata->vert = DM_get_vert_array(dm, &treedata->vert_allocated);
|
||||
}
|
||||
if (!treedata->loop_allocated) {
|
||||
if (treedata->loop == NULL) {
|
||||
treedata->loop = DM_get_loop_array(dm, &treedata->loop_allocated);
|
||||
}
|
||||
if (!treedata->looptri_allocated) {
|
||||
if (!sod->poly_allocated) {
|
||||
if (treedata->looptri == NULL) {
|
||||
if (sod->mpoly == NULL) {
|
||||
sod->mpoly = DM_get_poly_array(dm, &sod->poly_allocated);
|
||||
}
|
||||
treedata->looptri = DM_get_looptri_array(
|
||||
dm, treedata->vert,
|
||||
sod->mpoly, dm->getNumPolys(dm),
|
||||
treedata->loop, dm->getNumLoops(dm),
|
||||
&treedata->looptri_allocated);
|
||||
treedata->looptri = dm->getLoopTriArray(dm);
|
||||
treedata->looptri_allocated = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1713,10 +1710,10 @@ static bool snapDerivedMesh(
|
||||
free_bvhtree_from_mesh(treedata);
|
||||
}
|
||||
else {
|
||||
if (!treedata->vert_allocated) {
|
||||
if (treedata->vert == NULL) {
|
||||
treedata->vert = DM_get_vert_array(dm, &treedata->vert_allocated);
|
||||
}
|
||||
if ((tree_index == 1) && !treedata->edge_allocated) {
|
||||
if ((tree_index == 1) && (treedata->edge == NULL)) {
|
||||
treedata->edge = DM_get_edge_array(dm, &treedata->edge_allocated);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -754,7 +754,7 @@ typedef struct RenderData {
|
||||
|
||||
/* sequencer options */
|
||||
char seq_prev_type;
|
||||
char seq_rend_type;
|
||||
char seq_rend_type; /* UNUSED! */
|
||||
char seq_flag; /* flag use for sequence render/draw */
|
||||
char pad5[5];
|
||||
|
||||
@@ -1793,7 +1793,7 @@ typedef struct Scene {
|
||||
#define R_USE_WS_SHADING 0x8000000 /* use world space interpretation of lighting data */
|
||||
|
||||
/* seq_flag */
|
||||
#define R_SEQ_GL_PREV 1
|
||||
// #define R_SEQ_GL_PREV 1 // UNUSED, we just use setting from seq_prev_type now.
|
||||
// #define R_SEQ_GL_REND 2 // UNUSED, opengl render has its own operator now.
|
||||
#define R_SEQ_SOLID_TEX 4
|
||||
|
||||
|
||||
@@ -8631,11 +8631,6 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
||||
|
||||
/* sequencer draw options */
|
||||
|
||||
prop = RNA_def_property(srna, "use_sequencer_gl_preview", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "seq_flag", R_SEQ_GL_PREV);
|
||||
RNA_def_property_ui_text(prop, "Sequencer OpenGL", "");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SceneSequencer_update");
|
||||
|
||||
#if 0 /* see R_SEQ_GL_REND comment */
|
||||
prop = RNA_def_property(srna, "use_sequencer_gl_render", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "seq_flag", R_SEQ_GL_REND);
|
||||
@@ -8648,10 +8643,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
|
||||
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SceneSequencer_update");
|
||||
|
||||
#if 0 /* UNUSED, see R_SEQ_GL_REND comment */
|
||||
prop = RNA_def_property(srna, "sequencer_gl_render", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "seq_rend_type");
|
||||
RNA_def_property_enum_items(prop, rna_enum_viewport_shade_items);
|
||||
/* XXX Label and tooltips are obviously wrong! */
|
||||
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
|
||||
#endif
|
||||
|
||||
prop = RNA_def_property(srna, "use_sequencer_gl_textured_solid", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "seq_flag", R_SEQ_SOLID_TEX);
|
||||
|
||||
@@ -153,8 +153,6 @@ static void deformVerts(ModifierData *md, struct EvaluationContext *UNUSED(eval_
|
||||
collmd->current_v = MEM_dupallocN(collmd->x); // inter-frame
|
||||
|
||||
collmd->mvert_num = mvert_num;
|
||||
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
collmd->tri_num = dm->getNumLoopTri(dm);
|
||||
{
|
||||
|
||||
@@ -539,7 +539,7 @@ static void initSystem(LaplacianDeformModifierData *lmd, Object *ob, DerivedMesh
|
||||
STACK_PUSH(index_anchors, i);
|
||||
}
|
||||
}
|
||||
DM_ensure_looptri(dm);
|
||||
|
||||
total_anchors = STACK_SIZE(index_anchors);
|
||||
lmd->cache_system = initLaplacianSystem(numVerts, dm->getNumEdges(dm), dm->getNumLoopTri(dm),
|
||||
total_anchors, lmd->anchor_grp_name, lmd->repeat);
|
||||
|
||||
@@ -1163,7 +1163,6 @@ static PyObject *C_BVHTree_FromObject(PyObject *UNUSED(cls), PyObject *args, PyO
|
||||
|
||||
/* Get data for tessellation */
|
||||
{
|
||||
DM_ensure_looptri(dm);
|
||||
lt = dm->getLoopTriArray(dm);
|
||||
|
||||
tris_len = (unsigned int)dm->getNumLoopTri(dm);
|
||||
|
||||
Reference in New Issue
Block a user