[Bf-blender-cvs] [bc2400963d2] new-object-types: Merge branch 'master' into new-object-types
Brecht Van Lommel
noreply at git.blender.org
Wed Jan 29 20:54:54 CET 2020
Commit: bc2400963d229c2318d5b630d0f0a47754ee0bc2
Author: Brecht Van Lommel
Date: Wed Jan 29 09:51:51 2020 +0100
Branches: new-object-types
https://developer.blender.org/rBbc2400963d229c2318d5b630d0f0a47754ee0bc2
Merge branch 'master' into new-object-types
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/object.c
index 9f6802b66ea,90205286a72..4bd0448fb2f
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@@ -460,21 -430,18 +460,20 @@@ void BKE_object_free_derived_caches(Obj
MEM_SAFE_FREE(ob->runtime.bb);
object_update_from_subsurf_ccg(ob);
- BKE_object_free_derived_mesh_caches(ob);
- /* Restore initial pointer. */
- if (ob->runtime.mesh_orig != NULL) {
- ob->data = ob->runtime.mesh_orig;
- }
-
- if (ob->runtime.mesh_eval != NULL) {
- if (ob->runtime.is_mesh_eval_owned) {
- Mesh *mesh_eval = ob->runtime.mesh_eval;
- BKE_mesh_eval_delete(mesh_eval);
+ if (ob->runtime.data_eval != NULL) {
+ if (ob->runtime.is_data_eval_owned) {
+ ID *data_eval = ob->runtime.data_eval;
+ if (GS(data_eval->name) == ID_ME) {
+ /* TODO: why exception? */
+ BKE_mesh_eval_delete((Mesh *)data_eval);
+ }
+ else {
+ BKE_libblock_free_datablock(data_eval, 0);
+ MEM_freeN(data_eval);
+ }
}
- ob->runtime.mesh_eval = NULL;
+ ob->runtime.data_eval = NULL;
}
if (ob->runtime.mesh_deform_eval != NULL) {
Mesh *mesh_deform_eval = ob->runtime.mesh_deform_eval;
diff --cc source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
index e5440ecc21b,df7338e1076..b647271c099
--- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc
@@@ -95,13 -98,12 +95,13 @@@ void ObjectRuntimeBackup::backup_pose_c
void ObjectRuntimeBackup::restore_to_object(Object *object)
{
- Mesh *mesh_orig = object->runtime.mesh_orig;
+ ID *data_orig = object->runtime.data_orig;
+ ID *data_eval = object->runtime.data_eval;
BoundBox *bb = object->runtime.bb;
object->runtime = runtime;
- object->runtime.mesh_orig = mesh_orig;
+ object->runtime.data_orig = data_orig;
object->runtime.bb = bb;
- if (object->type == OB_MESH && data_eval != NULL) {
- if (object->type == OB_MESH && object->runtime.mesh_eval != nullptr) {
++ if (object->type == OB_MESH && data_eval != nullptr) {
if (object->id.recalc & ID_RECALC_GEOMETRY) {
/* If geometry is tagged for update it means, that part of
* evaluated mesh are not valid anymore. In this case we can not
diff --cc source/blender/draw/engines/eevee/eevee_materials.c
index b64fbb2fb43,2e0afc5d8d7..697d22ebeff
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@@ -1456,16 -1456,8 +1456,16 @@@ void EEVEE_materials_cache_populate(EEV
!DRW_state_is_image_render();
/* First get materials for this mesh. */
- if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
+ if (ELEM(ob->type,
+ OB_MESH,
+ OB_CURVE,
+ OB_SURF,
+ OB_FONT,
+ OB_MBALL,
+ OB_HAIR,
+ OB_POINTCLOUD,
+ OB_VOLUME)) {
- const int materials_len = MAX2(1, ob->totcol);
+ const int materials_len = DRW_cache_object_material_count_get(ob);
struct DRWShadingGroup **shgrp_array = BLI_array_alloca(shgrp_array, materials_len);
struct DRWShadingGroup **shgrp_depth_array = BLI_array_alloca(shgrp_depth_array,
diff --cc source/blender/draw/engines/workbench/workbench_forward.c
index 6a1ad5b58e0,e5f121a690d..2f4ad4fffa9
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@@ -665,18 -665,10 +665,18 @@@ void workbench_forward_cache_populate(W
}
WORKBENCH_MaterialData *material;
- if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL)) {
+ if (ELEM(ob->type,
+ OB_MESH,
+ OB_CURVE,
+ OB_SURF,
+ OB_FONT,
+ OB_MBALL,
+ OB_HAIR,
+ OB_POINTCLOUD,
+ OB_VOLUME)) {
const bool use_sculpt_pbvh = BKE_sculptsession_use_pbvh_draw(ob, draw_ctx->v3d) &&
!DRW_state_is_image_render();
- const int materials_len = MAX2(1, ob->totcol);
+ const int materials_len = DRW_cache_object_material_count_get(ob);
const Mesh *me = (ob->type == OB_MESH) ? ob->data : NULL;
const WORKBENCH_ColorOverride color_override = workbench_object_color_override_get(ob);
const bool use_texture_paint_drawing = !(DRW_state_is_image_render() &&
diff --cc source/blender/draw/intern/draw_cache.c
index 6988a5d4a8d,f2764753a51..dce5b9c10ba
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@@ -824,6 -824,25 +824,25 @@@ GPUBatch *DRW_cache_object_surface_get(
}
}
+ int DRW_cache_object_material_count_get(struct Object *ob)
+ {
- short type = (ob->runtime.mesh_eval != NULL) ? OB_MESH : ob->type;
++ short type = (BKE_object_get_evaluated_mesh(ob) != NULL) ? OB_MESH : ob->type;
+
+ switch (type) {
+ case OB_MESH:
+ return DRW_mesh_material_count_get(ob->data);
+ case OB_CURVE:
+ case OB_SURF:
+ case OB_FONT:
+ return DRW_curve_material_count_get(ob->data);
+ case OB_MBALL:
+ return DRW_metaball_material_count_get(ob->data);
+ default:
+ BLI_assert(0);
+ return 0;
+ }
+ }
+
GPUBatch **DRW_cache_object_surface_material_get(struct Object *ob,
struct GPUMaterial **gpumat_array,
uint gpumat_array_len)
More information about the Bf-blender-cvs
mailing list