Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_curve.h8
-rw-r--r--source/blender/blenkernel/BKE_curve_render.h46
-rw-r--r--source/blender/blenkernel/BKE_displist_render.h33
-rw-r--r--source/blender/blenkernel/BKE_lattice.h8
-rw-r--r--source/blender/blenkernel/BKE_lattice_render.h38
-rw-r--r--source/blender/blenkernel/BKE_mesh.h8
-rw-r--r--source/blender/blenkernel/BKE_mesh_render.h50
-rw-r--r--source/blender/blenkernel/CMakeLists.txt8
-rw-r--r--source/blender/blenkernel/intern/curve.c18
-rw-r--r--source/blender/blenkernel/intern/lattice.c17
-rw-r--r--source/blender/blenkernel/intern/mesh.c18
-rw-r--r--source/blender/blenkernel/intern/object_update.c12
-rw-r--r--source/blender/draw/CMakeLists.txt15
-rw-r--r--source/blender/draw/intern/draw_cache.c54
-rw-r--r--source/blender/draw/intern/draw_cache.h2
-rw-r--r--source/blender/draw/intern/draw_cache_impl.h81
-rw-r--r--source/blender/draw/intern/draw_cache_impl_curve.c (renamed from source/blender/blenkernel/intern/curve_render.c)66
-rw-r--r--source/blender/draw/intern/draw_cache_impl_displist.c (renamed from source/blender/blenkernel/intern/displist_render.c)7
-rw-r--r--source/blender/draw/intern/draw_cache_impl_lattice.c (renamed from source/blender/blenkernel/intern/lattice_render.c)48
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c (renamed from source/blender/blenkernel/intern/mesh_render.c)67
-rw-r--r--source/blender/draw/intern/draw_manager.c25
-rw-r--r--source/blender/editors/curve/editfont.c3
-rw-r--r--source/blender/editors/space_view3d/drawobject.c13
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c13
24 files changed, 343 insertions, 315 deletions
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index e111bd0e16b..411e71e31e3 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -219,4 +219,12 @@ void BKE_curve_eval_geometry(struct EvaluationContext *eval_ctx,
void BKE_curve_eval_path(struct EvaluationContext *eval_ctx,
struct Curve *curve);
+/* Draw Cache */
+enum {
+ BKE_CURVE_BATCH_DIRTY_ALL = 0,
+ BKE_CURVE_BATCH_DIRTY_SELECT,
+};
+void BKE_curve_batch_cache_dirty(struct Curve *cu, int mode);
+void BKE_curve_batch_cache_free(struct Curve *cu);
+
#endif /* __BKE_CURVE_H__ */
diff --git a/source/blender/blenkernel/BKE_curve_render.h b/source/blender/blenkernel/BKE_curve_render.h
deleted file mode 100644
index be6da731d7c..00000000000
--- a/source/blender/blenkernel/BKE_curve_render.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-#ifndef __BKE_CURVE_RENDER_H__
-#define __BKE_CURVE_RENDER_H__
-
-/** \file BKE_curve_render.h
- * \ingroup bke
- */
-
-struct Batch;
-struct Curve;
-
-void BKE_curve_batch_cache_dirty(struct Curve *cu);
-void BKE_curve_batch_selection_dirty(struct Curve *cu);
-void BKE_curve_batch_cache_clear(struct Curve *cu);
-void BKE_curve_batch_cache_free(struct Curve *cu);
-struct Batch *BKE_curve_batch_cache_get_wire_edge(struct Curve *cu, struct CurveCache *ob_curve_cache);
-struct Batch *BKE_curve_batch_cache_get_normal_edge(
- struct Curve *cu, struct CurveCache *ob_curve_cache, float normal_size);
-struct Batch *BKE_curve_batch_cache_get_overlay_edges(struct Curve *cu);
-struct Batch *BKE_curve_batch_cache_get_overlay_verts(struct Curve *cu);
-
-struct Batch *BKE_curve_batch_cache_get_triangles_with_normals(struct Curve *cu, struct CurveCache *ob_curve_cache);
-
-/* OB_FONT */
-struct Batch *BKE_curve_batch_cache_get_overlay_cursor(struct Curve *cu);
-struct Batch *BKE_curve_batch_cache_get_overlay_select(struct Curve *cu);
-
-#endif /* __BKE_CURVE_RENDER_H__ */
diff --git a/source/blender/blenkernel/BKE_displist_render.h b/source/blender/blenkernel/BKE_displist_render.h
deleted file mode 100644
index 0724bdd29cd..00000000000
--- a/source/blender/blenkernel/BKE_displist_render.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-#ifndef __BKE_DISPLIST_RENDER_H__
-#define __BKE_DISPLIST_RENDER_H__
-
-/** \file BKE_displist_render.h
- * \ingroup bke
- */
-
-struct Batch;
-struct ListBase;
-struct VertexBuffer;
-
-struct Batch *BLI_displist_batch_calc_surface(struct ListBase *lb);
-
-#endif /* __BKE_DISPLIST_RENDER_H__ */
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index 226c82da295..1f8da15fcb7 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -103,4 +103,12 @@ struct EvaluationContext;
void BKE_lattice_eval_geometry(struct EvaluationContext *eval_ctx,
struct Lattice *latt);
+/* Draw Cache */
+enum {
+ BKE_LATTICE_BATCH_DIRTY_ALL = 0,
+ BKE_LATTICE_BATCH_DIRTY_SELECT,
+};
+void BKE_lattice_batch_cache_dirty(struct Lattice *lt, int mode);
+void BKE_lattice_batch_cache_free(struct Lattice *lt);
+
#endif /* __BKE_LATTICE_H__ */
diff --git a/source/blender/blenkernel/BKE_lattice_render.h b/source/blender/blenkernel/BKE_lattice_render.h
deleted file mode 100644
index dc71a82b893..00000000000
--- a/source/blender/blenkernel/BKE_lattice_render.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-#ifndef __BKE_LATTICE_RENDER_H__
-#define __BKE_LATTICE_RENDER_H__
-
-/** \file BKE_lattice_render.h
- * \ingroup bke
- */
-
-struct Batch;
-struct Lattice;
-
-void BKE_lattice_batch_cache_dirty(struct Lattice *lt);
-void BKE_lattice_batch_selection_dirty(struct Lattice *lt);
-void BKE_lattice_batch_cache_clear(struct Lattice *lt);
-void BKE_lattice_batch_cache_free(struct Lattice *lt);
-struct Batch *BKE_lattice_batch_cache_get_all_edges(struct Lattice *lt);
-struct Batch *BKE_lattice_batch_cache_get_all_verts(struct Lattice *lt);
-struct Batch *BKE_lattice_batch_cache_get_overlay_verts(struct Lattice *lt);
-
-#endif /* __BKE_LATTICE_RENDER_H__ */
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index b83bec5a302..a24ce490262 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -407,6 +407,14 @@ struct EvaluationContext;
void BKE_mesh_eval_geometry(struct EvaluationContext *eval_ctx,
struct Mesh *mesh);
+/* Draw Cache */
+enum {
+ BKE_MESH_BATCH_DIRTY_ALL = 0,
+ BKE_MESH_BATCH_DIRTY_SELECT,
+};
+void BKE_mesh_batch_cache_dirty(struct Mesh *me, int mode);
+void BKE_mesh_batch_cache_free(struct Mesh *me);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_mesh_render.h b/source/blender/blenkernel/BKE_mesh_render.h
deleted file mode 100644
index 0869c96abf0..00000000000
--- a/source/blender/blenkernel/BKE_mesh_render.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2017 by Blender Foundation.
- * All rights reserved.
- *
- * Contributor(s): Blender Foundation, Mike Erwin, Dalai Felinto
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-#ifndef __BKE_MESH_RENDER_H__
-#define __BKE_MESH_RENDER_H__
-
-/** \file BKE_mesh_render.h
- * \ingroup bke
- */
-
-struct Batch;
-struct Mesh;
-
-void BKE_mesh_batch_cache_dirty(struct Mesh *me);
-void BKE_mesh_batch_selection_dirty(struct Mesh *me);
-void BKE_mesh_batch_cache_clear(struct Mesh *me);
-void BKE_mesh_batch_cache_free(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_all_edges(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_all_triangles(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_triangles_with_normals(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_points_with_normals(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_all_verts(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_fancy_edges(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_overlay_triangles(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_overlay_loose_edges(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_overlay_loose_verts(struct Mesh *me);
-struct Batch *BKE_mesh_batch_cache_get_overlay_facedots(struct Mesh *me);
-
-#endif /* __BKE_MESH_RENDER_H__ */
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index fb35c08fd42..9fa6b7cc3cf 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -93,14 +93,12 @@ set(SRC
intern/context.c
intern/crazyspace.c
intern/curve.c
- intern/curve_render.c
intern/customdata.c
intern/customdata_file.c
intern/data_transfer.c
intern/deform.c
intern/depsgraph.c
intern/displist.c
- intern/displist_render.c
intern/dynamicpaint.c
intern/editderivedmesh.c
intern/editmesh.c
@@ -122,7 +120,6 @@ set(SRC
intern/key.c
intern/lamp.c
intern/lattice.c
- intern/lattice_render.c
intern/library.c
intern/library_idmap.c
intern/library_query.c
@@ -138,7 +135,6 @@ set(SRC
intern/mesh_evaluate.c
intern/mesh_mapping.c
intern/mesh_remap.c
- intern/mesh_render.c
intern/mesh_validate.c
intern/modifier.c
intern/modifiers_bmesh.c
@@ -227,14 +223,12 @@ set(SRC
BKE_context.h
BKE_crazyspace.h
BKE_curve.h
- BKE_curve_render.h
BKE_customdata.h
BKE_customdata_file.h
BKE_data_transfer.h
BKE_deform.h
BKE_depsgraph.h
BKE_displist.h
- BKE_displist_render.h
BKE_dynamicpaint.h
BKE_editmesh.h
BKE_editmesh_bvh.h
@@ -254,7 +248,6 @@ set(SRC
BKE_key.h
BKE_lamp.h
BKE_lattice.h
- BKE_lattice_render.h
BKE_library.h
BKE_library_idmap.h
BKE_library_query.h
@@ -268,7 +261,6 @@ set(SRC
BKE_mesh.h
BKE_mesh_mapping.h
BKE_mesh_remap.h
- BKE_mesh_render.h
BKE_modifier.h
BKE_movieclip.h
BKE_multires.h
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 10da97f5761..084af644588 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -52,7 +52,6 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
-#include "BKE_curve_render.h"
#include "BKE_displist.h"
#include "BKE_font.h"
#include "BKE_global.h"
@@ -4660,3 +4659,20 @@ void BKE_curve_eval_path(EvaluationContext *UNUSED(eval_ctx),
printf("%s on %s\n", __func__, curve->id.name);
}
}
+
+/* Draw Engine */
+void (*BKE_curve_batch_cache_dirty_cb)(Curve *cu, int mode) = NULL;
+void (*BKE_curve_batch_cache_free_cb)(Curve *cu) = NULL;
+
+void BKE_curve_batch_cache_dirty(Curve *cu, int mode)
+{
+ if (cu->batch_cache) {
+ BKE_curve_batch_cache_dirty_cb(cu, mode);
+ }
+}
+void BKE_curve_batch_cache_free(Curve *cu)
+{
+ if (cu->batch_cache) {
+ BKE_curve_batch_cache_free_cb(cu);
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index c567f9b0d6f..c03aa0cd155 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -57,7 +57,6 @@
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
-#include "BKE_lattice_render.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
@@ -1234,3 +1233,19 @@ void BKE_lattice_eval_geometry(struct EvaluationContext *UNUSED(eval_ctx),
{
}
+/* Draw Engine */
+void (*BKE_lattice_batch_cache_dirty_cb)(Lattice *lt, int mode) = NULL;
+void (*BKE_lattice_batch_cache_free_cb)(Lattice *lt) = NULL;
+
+void BKE_lattice_batch_cache_dirty(Lattice *lt, int mode)
+{
+ if (lt->batch_cache) {
+ BKE_lattice_batch_cache_dirty_cb(lt, mode);
+ }
+}
+void BKE_lattice_batch_cache_free(Lattice *lt)
+{
+ if (lt->batch_cache) {
+ BKE_lattice_batch_cache_free_cb(lt);
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index f8ff3316452..d45223f2a51 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -50,7 +50,6 @@
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
-#include "BKE_mesh_render.h"
#include "BKE_displist.h"
#include "BKE_library.h"
#include "BKE_library_query.h"
@@ -2679,3 +2678,20 @@ void BKE_mesh_eval_geometry(EvaluationContext *UNUSED(eval_ctx),
BKE_mesh_texspace_calc(mesh);
}
}
+
+/* Draw Engine */
+void (*BKE_mesh_batch_cache_dirty_cb)(Mesh *me, int mode) = NULL;
+void (*BKE_mesh_batch_cache_free_cb)(Mesh *me) = NULL;
+
+void BKE_mesh_batch_cache_dirty(Mesh *me, int mode)
+{
+ if (me->batch_cache) {
+ BKE_mesh_batch_cache_dirty_cb(me, mode);
+ }
+}
+void BKE_mesh_batch_cache_free(Mesh *me)
+{
+ if (me->batch_cache) {
+ BKE_mesh_batch_cache_free_cb(me);
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 3d9bbc338ea..b4cf9b16247 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -43,6 +43,7 @@
#include "BKE_armature.h"
#include "BKE_action.h"
#include "BKE_constraint.h"
+#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_animsys.h"
#include "BKE_displist.h"
@@ -56,12 +57,9 @@
#include "BKE_pointcache.h"
#include "BKE_scene.h"
#include "BKE_material.h"
+#include "BKE_mesh.h"
#include "BKE_image.h"
-#include "BKE_curve_render.h"
-#include "BKE_lattice_render.h"
-#include "BKE_mesh_render.h"
-
#include "DEG_depsgraph.h"
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH) printf
@@ -347,15 +345,15 @@ void BKE_object_eval_uber_data(EvaluationContext *eval_ctx,
switch (ob->type) {
case OB_MESH:
- BKE_mesh_batch_cache_dirty(ob->data);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
break;
case OB_LATTICE:
- BKE_lattice_batch_cache_dirty(ob->data);
+ BKE_lattice_batch_cache_dirty(ob->data, BKE_LATTICE_BATCH_DIRTY_ALL);
break;
case OB_CURVE:
case OB_FONT:
case OB_SURF:
- BKE_curve_batch_cache_dirty(ob->data);
+ BKE_curve_batch_cache_dirty(ob->data, BKE_CURVE_BATCH_DIRTY_ALL);
break;
}
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 87c42caf541..61f95f8a176 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -34,13 +34,14 @@ set(INC
../blenkernel
../blenlib
../blentranslation
- ../imbuf
+ ../bmesh
../depsgraph
- ../makesdna
- ../makesrna
- ../gpu
../editors/include
../editors/space_view3d
+ ../gpu
+ ../imbuf
+ ../makesdna
+ ../makesrna
../render/extern/include
../render/intern/include
../windowmanager
@@ -60,6 +61,11 @@ set(SRC
intern/draw_view.c
intern/draw_armature.c
+ intern/draw_cache_impl_curve.c
+ intern/draw_cache_impl_displist.c
+ intern/draw_cache_impl_lattice.c
+ intern/draw_cache_impl_mesh.c
+
engines/clay/clay.c
engines/clay/clay.h
@@ -87,6 +93,7 @@ set(SRC
intern/DRW_render.h
intern/draw_common.h
intern/draw_cache.h
+ intern/draw_cache_impl.h
intern/draw_view.h
modes/draw_mode_engines.h
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index b868435c382..259d066d4f4 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -32,13 +32,10 @@
#include "BLI_utildefines.h"
#include "BLI_math.h"
-#include "BKE_curve_render.h"
-#include "BKE_lattice_render.h"
-#include "BKE_mesh_render.h"
-
#include "GPU_batch.h"
#include "draw_cache.h"
+#include "draw_cache_impl.h"
static struct DRWShapeCache {
Batch *drw_single_vertice;
@@ -1544,6 +1541,13 @@ Batch *DRW_cache_single_vert_get(void)
/** \name Meshes
* \{ */
+Batch *DRW_cache_mesh_surface_overlay_get(Object *ob)
+{
+ BLI_assert(ob->type == OB_MESH);
+ Mesh *me = ob->data;
+ return DRW_mesh_batch_cache_get_all_triangles(me);
+}
+
void DRW_cache_mesh_wire_overlay_get(
Object *ob,
Batch **r_tris, Batch **r_ledges, Batch **r_lverts)
@@ -1552,9 +1556,9 @@ void DRW_cache_mesh_wire_overlay_get(
Mesh *me = ob->data;
- *r_tris = BKE_mesh_batch_cache_get_overlay_triangles(me);
- *r_ledges = BKE_mesh_batch_cache_get_overlay_loose_edges(me);
- *r_lverts = BKE_mesh_batch_cache_get_overlay_loose_verts(me);
+ *r_tris = DRW_mesh_batch_cache_get_overlay_triangles(me);
+ *r_ledges = DRW_mesh_batch_cache_get_overlay_loose_edges(me);
+ *r_lverts = DRW_mesh_batch_cache_get_overlay_loose_verts(me);
}
Batch *DRW_cache_face_centers_get(Object *ob)
@@ -1563,7 +1567,7 @@ Batch *DRW_cache_face_centers_get(Object *ob)
Mesh *me = ob->data;
- return BKE_mesh_batch_cache_get_overlay_facedots(me);
+ return DRW_mesh_batch_cache_get_overlay_facedots(me);
}
Batch *DRW_cache_mesh_wire_outline_get(Object *ob)
@@ -1571,7 +1575,7 @@ Batch *DRW_cache_mesh_wire_outline_get(Object *ob)
BLI_assert(ob->type == OB_MESH);
Mesh *me = ob->data;
- return BKE_mesh_batch_cache_get_fancy_edges(me);
+ return DRW_mesh_batch_cache_get_fancy_edges(me);
}
Batch *DRW_cache_mesh_surface_get(Object *ob)
@@ -1579,7 +1583,7 @@ Batch *DRW_cache_mesh_surface_get(Object *ob)
BLI_assert(ob->type == OB_MESH);
Mesh *me = ob->data;
- return BKE_mesh_batch_cache_get_triangles_with_normals(me);
+ return DRW_mesh_batch_cache_get_triangles_with_normals(me);
}
Batch *DRW_cache_mesh_surface_verts_get(Object *ob)
@@ -1587,7 +1591,7 @@ Batch *DRW_cache_mesh_surface_verts_get(Object *ob)
BLI_assert(ob->type == OB_MESH);
Mesh *me = ob->data;
- return BKE_mesh_batch_cache_get_points_with_normals(me);
+ return DRW_mesh_batch_cache_get_points_with_normals(me);
}
Batch *DRW_cache_mesh_verts_get(Object *ob)
@@ -1595,7 +1599,7 @@ Batch *DRW_cache_mesh_verts_get(Object *ob)
BLI_assert(ob->type == OB_MESH);
Mesh *me = ob->data;
- return BKE_mesh_batch_cache_get_all_verts(me);
+ return DRW_mesh_batch_cache_get_all_verts(me);
}
/** \} */
@@ -1610,7 +1614,7 @@ Batch *DRW_cache_curve_edge_wire_get(Object *ob)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
+ return DRW_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
}
Batch *DRW_cache_curve_edge_normal_get(Object *ob, float normal_size)
@@ -1618,7 +1622,7 @@ Batch *DRW_cache_curve_edge_normal_get(Object *ob, float normal_size)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_normal_edge(cu, ob->curve_cache, normal_size);
+ return DRW_curve_batch_cache_get_normal_edge(cu, ob->curve_cache, normal_size);
}
Batch *DRW_cache_curve_edge_overlay_get(Object *ob)
@@ -1626,7 +1630,7 @@ Batch *DRW_cache_curve_edge_overlay_get(Object *ob)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_overlay_edges(cu);
+ return DRW_curve_batch_cache_get_overlay_edges(cu);
}
Batch *DRW_cache_curve_vert_overlay_get(Object *ob)
@@ -1634,7 +1638,7 @@ Batch *DRW_cache_curve_vert_overlay_get(Object *ob)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_overlay_verts(cu);
+ return DRW_curve_batch_cache_get_overlay_verts(cu);
}
Batch *DRW_cache_curve_surface_get(Object *ob)
@@ -1642,7 +1646,7 @@ Batch *DRW_cache_curve_surface_get(Object *ob)
BLI_assert(ob->type == OB_CURVE);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
}
/** \} */
@@ -1657,7 +1661,7 @@ Batch *DRW_cache_text_edge_wire_get(Object *ob)
BLI_assert(ob->type == OB_FONT);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
+ return DRW_curve_batch_cache_get_wire_edge(cu, ob->curve_cache);
}
Batch *DRW_cache_text_surface_get(Object *ob)
@@ -1667,21 +1671,21 @@ Batch *DRW_cache_text_surface_get(Object *ob)
if (cu->editfont && (cu->flag & CU_FAST)) {
return NULL;
}
- return BKE_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
}
Batch *DRW_cache_text_cursor_overlay_get(Object *ob)
{
BLI_assert(ob->type == OB_FONT);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_overlay_cursor(cu);
+ return DRW_curve_batch_cache_get_overlay_cursor(cu);
}
Batch *DRW_cache_text_select_overlay_get(Object *ob)
{
BLI_assert(ob->type == OB_FONT);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_overlay_select(cu);
+ return DRW_curve_batch_cache_get_overlay_select(cu);
}
/** \} */
@@ -1696,7 +1700,7 @@ Batch *DRW_cache_surf_surface_get(Object *ob)
BLI_assert(ob->type == OB_SURF);
struct Curve *cu = ob->data;
- return BKE_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
+ return DRW_curve_batch_cache_get_triangles_with_normals(cu, ob->curve_cache);
}
/** \} */
@@ -1711,7 +1715,7 @@ Batch *DRW_cache_lattice_verts_get(Object *ob)
BLI_assert(ob->type == OB_LATTICE);
struct Lattice *lt = ob->data;
- return BKE_lattice_batch_cache_get_all_verts(lt);
+ return DRW_lattice_batch_cache_get_all_verts(lt);
}
Batch *DRW_cache_lattice_wire_get(Object *ob)
@@ -1719,7 +1723,7 @@ Batch *DRW_cache_lattice_wire_get(Object *ob)
BLI_assert(ob->type == OB_LATTICE);
struct Lattice *lt = ob->data;
- return BKE_lattice_batch_cache_get_all_edges(lt);
+ return DRW_lattice_batch_cache_get_all_edges(lt);
}
Batch *DRW_cache_lattice_vert_overlay_get(Object *ob)
@@ -1727,7 +1731,7 @@ Batch *DRW_cache_lattice_vert_overlay_get(Object *ob)
BLI_assert(ob->type == OB_LATTICE);
struct Lattice *lt = ob->data;
- return BKE_lattice_batch_cache_get_overlay_verts(lt);
+ return DRW_lattice_batch_cache_get_overlay_verts(lt);
}
/** \} */
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index 3d4963e617b..17e9467d1d9 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -82,6 +82,7 @@ struct Batch *DRW_cache_bone_point_wire_outline_get(void);
struct Batch *DRW_cache_bone_arrows_get(void);
/* Meshes */
+struct Batch *DRW_cache_mesh_surface_overlay_get(struct Object *ob);
void DRW_cache_mesh_wire_overlay_get(
struct Object *ob,
struct Batch **r_tris, struct Batch **r_ledges, struct Batch **r_lverts);
@@ -91,6 +92,7 @@ struct Batch *DRW_cache_mesh_surface_get(struct Object *ob);
struct Batch *DRW_cache_mesh_surface_verts_get(struct Object *ob);
struct Batch *DRW_cache_mesh_verts_get(struct Object *ob);
+
/* Curve */
struct Batch *DRW_cache_curve_surface_get(struct Object *ob);
struct Batch *DRW_cache_curve_surface_verts_get(struct Object *ob);
diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h
new file mode 100644
index 00000000000..e4318aa576a
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file draw_cache_impl.h
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_CACHE_IMPL_H__
+#define __DRAW_CACHE_IMPL_H__
+
+struct Batch;
+struct ListBase;
+struct CurveCache;
+
+struct Curve;
+struct Lattice;
+struct Mesh;
+
+/* Expose via BKE callbacks */
+void DRW_curve_batch_cache_dirty(struct Curve *cu, int mode);
+void DRW_curve_batch_cache_free(struct Curve *cu);
+
+void DRW_mesh_batch_cache_dirty(struct Mesh *me, int mode);
+void DRW_mesh_batch_cache_free(struct Mesh *me);
+
+void DRW_lattice_batch_cache_dirty(struct Lattice *lt, int mode);
+void DRW_lattice_batch_cache_free(struct Lattice *lt);
+
+/* Curve */
+struct Batch *DRW_curve_batch_cache_get_wire_edge(struct Curve *cu, struct CurveCache *ob_curve_cache);
+struct Batch *DRW_curve_batch_cache_get_normal_edge(
+ struct Curve *cu, struct CurveCache *ob_curve_cache, float normal_size);
+struct Batch *DRW_curve_batch_cache_get_overlay_edges(struct Curve *cu);
+struct Batch *DRW_curve_batch_cache_get_overlay_verts(struct Curve *cu);
+
+struct Batch *DRW_curve_batch_cache_get_triangles_with_normals(struct Curve *cu, struct CurveCache *ob_curve_cache);
+
+/* Curve (Font) */
+struct Batch *DRW_curve_batch_cache_get_overlay_cursor(struct Curve *cu);
+struct Batch *DRW_curve_batch_cache_get_overlay_select(struct Curve *cu);
+
+/* DispList */
+struct Batch *BLI_displist_batch_calc_surface(struct ListBase *lb);
+
+/* Lattice */
+struct Batch *DRW_lattice_batch_cache_get_all_edges(struct Lattice *lt);
+struct Batch *DRW_lattice_batch_cache_get_all_verts(struct Lattice *lt);
+struct Batch *DRW_lattice_batch_cache_get_overlay_verts(struct Lattice *lt);
+
+/* Mesh */
+
+struct Batch *DRW_mesh_batch_cache_get_all_edges(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_all_triangles(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_triangles_with_normals(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_points_with_normals(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_all_verts(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_fancy_edges(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_overlay_triangles(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_overlay_loose_edges(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_overlay_loose_verts(struct Mesh *me);
+struct Batch *DRW_mesh_batch_cache_get_overlay_facedots(struct Mesh *me);
+
+#endif /* __DRAW_CACHE_IMPL_H__ */
diff --git a/source/blender/blenkernel/intern/curve_render.c b/source/blender/draw/intern/draw_cache_impl_curve.c
index 4ef350d3868..9f3c10db61e 100644
--- a/source/blender/blenkernel/intern/curve_render.c
+++ b/source/blender/draw/intern/draw_cache_impl_curve.c
@@ -21,8 +21,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/blenkernel/intern/curve_render.c
- * \ingroup bke
+/** \file draw_cache_impl_curve.c
+ * \ingroup draw
*
* \brief Curve API for render engines
*/
@@ -35,13 +35,13 @@
#include "DNA_curve_types.h"
#include "BKE_curve.h"
-#include "BKE_curve_render.h"
#include "BKE_font.h"
-#include "BKE_displist_render.h"
#include "GPU_batch.h"
+#include "draw_cache_impl.h" /* own include */
+
#define SELECT 1
/**
@@ -51,6 +51,8 @@
* - Check if 'overlay.edges' can use single attribyte per edge, not 2 (for selection drawing).
*/
+static void curve_batch_cache_clear(Curve *cu);
+
/* ---------------------------------------------------------------------- */
/* Curve Interface, direct access to basic data. */
@@ -402,35 +404,37 @@ static void curve_batch_cache_init(Curve *cu)
static CurveBatchCache *curve_batch_cache_get(Curve *cu)
{
if (!curve_batch_cache_valid(cu)) {
- BKE_curve_batch_cache_clear(cu);
+ curve_batch_cache_clear(cu);
curve_batch_cache_init(cu);
}
return cu->batch_cache;
}
-void BKE_curve_batch_cache_dirty(Curve *cu)
+void DRW_curve_batch_cache_dirty(Curve *cu, int mode)
{
CurveBatchCache *cache = cu->batch_cache;
- if (cache) {
- cache->is_dirty = true;
+ if (cache == NULL) {
+ return;
}
-}
-
-void BKE_curve_batch_selection_dirty(Curve *cu)
-{
- CurveBatchCache *cache = cu->batch_cache;
- if (cache) {
- /* editnurb */
- BATCH_DISCARD_ALL_SAFE(cache->overlay.verts);
- BATCH_DISCARD_ALL_SAFE(cache->overlay.edges);
-
- /* editfont */
- BATCH_DISCARD_ALL_SAFE(cache->text.select);
- BATCH_DISCARD_ALL_SAFE(cache->text.cursor);
+ switch (mode) {
+ case BKE_CURVE_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_CURVE_BATCH_DIRTY_SELECT:
+ /* editnurb */
+ BATCH_DISCARD_ALL_SAFE(cache->overlay.verts);
+ BATCH_DISCARD_ALL_SAFE(cache->overlay.edges);
+
+ /* editfont */
+ BATCH_DISCARD_ALL_SAFE(cache->text.select);
+ BATCH_DISCARD_ALL_SAFE(cache->text.cursor);
+ break;
+ default:
+ BLI_assert(0);
}
}
-void BKE_curve_batch_cache_clear(Curve *cu)
+static void curve_batch_cache_clear(Curve *cu)
{
CurveBatchCache *cache = cu->batch_cache;
if (!cache) {
@@ -471,9 +475,9 @@ void BKE_curve_batch_cache_clear(Curve *cu)
BATCH_DISCARD_ALL_SAFE(cache->text.select);
}
-void BKE_curve_batch_cache_free(Curve *cu)
+void DRW_curve_batch_cache_free(Curve *cu)
{
- BKE_curve_batch_cache_clear(cu);
+ curve_batch_cache_clear(cu);
MEM_SAFE_FREE(cu->batch_cache);
}
@@ -921,7 +925,7 @@ static Batch *curve_batch_cache_get_overlay_cursor(CurveRenderData *rdata, Curve
/** \name Public Object/Curve API
* \{ */
-Batch *BKE_curve_batch_cache_get_wire_edge(Curve *cu, CurveCache *ob_curve_cache)
+Batch *DRW_curve_batch_cache_get_wire_edge(Curve *cu, CurveCache *ob_curve_cache)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -939,7 +943,7 @@ Batch *BKE_curve_batch_cache_get_wire_edge(Curve *cu, CurveCache *ob_curve_cache
return cache->wire.batch;
}
-Batch *BKE_curve_batch_cache_get_normal_edge(Curve *cu, CurveCache *ob_curve_cache, float normal_size)
+Batch *DRW_curve_batch_cache_get_normal_edge(Curve *cu, CurveCache *ob_curve_cache, float normal_size)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -966,7 +970,7 @@ Batch *BKE_curve_batch_cache_get_normal_edge(Curve *cu, CurveCache *ob_curve_cac
return cache->normal.batch;
}
-Batch *BKE_curve_batch_cache_get_overlay_edges(Curve *cu)
+Batch *DRW_curve_batch_cache_get_overlay_edges(Curve *cu)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -977,7 +981,7 @@ Batch *BKE_curve_batch_cache_get_overlay_edges(Curve *cu)
return cache->overlay.edges;
}
-Batch *BKE_curve_batch_cache_get_overlay_verts(Curve *cu)
+Batch *DRW_curve_batch_cache_get_overlay_verts(Curve *cu)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -988,7 +992,7 @@ Batch *BKE_curve_batch_cache_get_overlay_verts(Curve *cu)
return cache->overlay.verts;
}
-Batch *BKE_curve_batch_cache_get_triangles_with_normals(
+Batch *DRW_curve_batch_cache_get_triangles_with_normals(
struct Curve *cu, struct CurveCache *ob_curve_cache)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -1010,7 +1014,7 @@ Batch *BKE_curve_batch_cache_get_triangles_with_normals(
/** \name Public Object/Font API
* \{ */
-Batch *BKE_curve_batch_cache_get_overlay_select(Curve *cu)
+Batch *DRW_curve_batch_cache_get_overlay_select(Curve *cu)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
@@ -1025,7 +1029,7 @@ Batch *BKE_curve_batch_cache_get_overlay_select(Curve *cu)
return cache->text.select;
}
-Batch *BKE_curve_batch_cache_get_overlay_cursor(Curve *cu)
+Batch *DRW_curve_batch_cache_get_overlay_cursor(Curve *cu)
{
CurveBatchCache *cache = curve_batch_cache_get(cu);
diff --git a/source/blender/blenkernel/intern/displist_render.c b/source/blender/draw/intern/draw_cache_impl_displist.c
index 01aa0c1217e..f18d02f5ee7 100644
--- a/source/blender/blenkernel/intern/displist_render.c
+++ b/source/blender/draw/intern/draw_cache_impl_displist.c
@@ -21,8 +21,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/blenkernel/intern/displist_render.c
- * \ingroup bke
+/** \file draw_cache_impl_displist.c
+ * \ingroup draw
*
* \brief DispList API for render engines
*
@@ -37,10 +37,11 @@
#include "DNA_curve_types.h"
#include "BKE_displist.h"
-#include "BKE_displist_render.h"
#include "GPU_batch.h"
+#include "draw_cache_impl.h" /* own include */
+
static int dl_vert_len(const DispList *dl)
{
switch (dl->type) {
diff --git a/source/blender/blenkernel/intern/lattice_render.c b/source/blender/draw/intern/draw_cache_impl_lattice.c
index 19353ab62e7..444b4e641f6 100644
--- a/source/blender/blenkernel/intern/lattice_render.c
+++ b/source/blender/draw/intern/draw_cache_impl_lattice.c
@@ -23,8 +23,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/blenkernel/intern/lattice_render.c
- * \ingroup bke
+/** \file draw_cache_impl_lattice.c
+ * \ingroup draw
*
* \brief Lattice API for render engines
*/
@@ -37,10 +37,12 @@
#include "DNA_curve_types.h"
#include "DNA_lattice_types.h"
-#include "BKE_lattice_render.h"
+#include "BKE_lattice.h"
#include "GPU_batch.h"
+#include "draw_cache_impl.h" /* own include */
+
#define SELECT 1
/**
@@ -49,6 +51,8 @@
* (we could avoid using since it will be removed)
*/
+static void lattice_batch_cache_clear(Lattice *lt);
+
/* ---------------------------------------------------------------------- */
/* Lattice Interface, direct access to basic data. */
@@ -290,30 +294,32 @@ static void lattice_batch_cache_init(Lattice *lt)
static LatticeBatchCache *lattice_batch_cache_get(Lattice *lt)
{
if (!lattice_batch_cache_valid(lt)) {
- BKE_lattice_batch_cache_clear(lt);
+ lattice_batch_cache_clear(lt);
lattice_batch_cache_init(lt);
}
return lt->batch_cache;
}
-void BKE_lattice_batch_cache_dirty(Lattice *lt)
+void DRW_lattice_batch_cache_dirty(Lattice *lt, int mode)
{
LatticeBatchCache *cache = lt->batch_cache;
- if (cache) {
- cache->is_dirty = true;
+ if (cache == NULL) {
+ return;
}
-}
-
-void BKE_lattice_batch_selection_dirty(Lattice *lt)
-{
- LatticeBatchCache *cache = lt->batch_cache;
- if (cache) {
- /* TODO Separate Flag vbo */
- BATCH_DISCARD_ALL_SAFE(cache->overlay_verts);
+ switch (mode) {
+ case BKE_LATTICE_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_LATTICE_BATCH_DIRTY_SELECT:
+ /* TODO Separate Flag vbo */
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_verts);
+ break;
+ default:
+ BLI_assert(0);
}
}
-void BKE_lattice_batch_cache_clear(Lattice *lt)
+static void lattice_batch_cache_clear(Lattice *lt)
{
LatticeBatchCache *cache = lt->batch_cache;
if (!cache) {
@@ -328,9 +334,9 @@ void BKE_lattice_batch_cache_clear(Lattice *lt)
ELEMENTLIST_DISCARD_SAFE(cache->edges);
}
-void BKE_lattice_batch_cache_free(Lattice *lt)
+void DRW_lattice_batch_cache_free(Lattice *lt)
{
- BKE_lattice_batch_cache_clear(lt);
+ lattice_batch_cache_clear(lt);
MEM_SAFE_FREE(lt->batch_cache);
}
@@ -460,7 +466,7 @@ static void lattice_batch_cache_create_overlay_batches(Lattice *lt)
lattice_render_data_free(rdata);
}
-Batch *BKE_lattice_batch_cache_get_all_edges(Lattice *lt)
+Batch *DRW_lattice_batch_cache_get_all_edges(Lattice *lt)
{
LatticeBatchCache *cache = lattice_batch_cache_get(lt);
@@ -477,7 +483,7 @@ Batch *BKE_lattice_batch_cache_get_all_edges(Lattice *lt)
return cache->all_edges;
}
-Batch *BKE_lattice_batch_cache_get_all_verts(Lattice *lt)
+Batch *DRW_lattice_batch_cache_get_all_verts(Lattice *lt)
{
LatticeBatchCache *cache = lattice_batch_cache_get(lt);
@@ -492,7 +498,7 @@ Batch *BKE_lattice_batch_cache_get_all_verts(Lattice *lt)
return cache->all_verts;
}
-Batch *BKE_lattice_batch_cache_get_overlay_verts(Lattice *lt)
+Batch *DRW_lattice_batch_cache_get_overlay_verts(Lattice *lt)
{
LatticeBatchCache *cache = lattice_batch_cache_get(lt);
diff --git a/source/blender/blenkernel/intern/mesh_render.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index df23db1b2d4..eaf854edacb 100644
--- a/source/blender/blenkernel/intern/mesh_render.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -23,8 +23,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/blenkernel/intern/mesh_render.c
- * \ingroup bke
+/** \file draw_cache_impl_mesh.c
+ * \ingroup draw
*
* \brief Mesh API for render engines
*/
@@ -41,12 +41,15 @@
#include "BKE_DerivedMesh.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
-#include "BKE_mesh_render.h"
#include "bmesh.h"
#include "GPU_batch.h"
+#include "draw_cache_impl.h" /* own include */
+
+static void mesh_batch_cache_clear(Mesh *me);
+
/* ---------------------------------------------------------------------- */
/* Mesh/BMesh Interface, direct access to basic data. */
@@ -927,33 +930,35 @@ static void mesh_batch_cache_init(Mesh *me)
static MeshBatchCache *mesh_batch_cache_get(Mesh *me)
{
if (!mesh_batch_cache_valid(me)) {
- BKE_mesh_batch_cache_clear(me);
+ mesh_batch_cache_clear(me);
mesh_batch_cache_init(me);
}
return me->batch_cache;
}
-void BKE_mesh_batch_cache_dirty(Mesh *me)
+void DRW_mesh_batch_cache_dirty(Mesh *me, int mode)
{
MeshBatchCache *cache = me->batch_cache;
- if (cache) {
- cache->is_dirty = true;
+ if (cache == NULL) {
+ return;
}
-}
-
-void BKE_mesh_batch_selection_dirty(Mesh *me)
-{
- MeshBatchCache *cache = me->batch_cache;
- if (cache) {
- /* TODO Separate Flag vbo */
- BATCH_DISCARD_ALL_SAFE(cache->overlay_triangles);
- BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_verts);
- BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_edges);
- BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots);
+ switch (mode) {
+ case BKE_MESH_BATCH_DIRTY_ALL:
+ cache->is_dirty = true;
+ break;
+ case BKE_MESH_BATCH_DIRTY_SELECT:
+ /* TODO Separate Flag vbo */
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_triangles);
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_verts);
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_loose_edges);
+ BATCH_DISCARD_ALL_SAFE(cache->overlay_facedots);
+ break;
+ default:
+ BLI_assert(0);
}
}
-void BKE_mesh_batch_cache_clear(Mesh *me)
+static void mesh_batch_cache_clear(Mesh *me)
{
MeshBatchCache *cache = me->batch_cache;
if (!cache) {
@@ -980,9 +985,9 @@ void BKE_mesh_batch_cache_clear(Mesh *me)
BATCH_DISCARD_ALL_SAFE(cache->fancy_edges);
}
-void BKE_mesh_batch_cache_free(Mesh *me)
+void DRW_mesh_batch_cache_free(Mesh *me)
{
- BKE_mesh_batch_cache_clear(me);
+ mesh_batch_cache_clear(me);
MEM_SAFE_FREE(me->batch_cache);
}
@@ -1113,7 +1118,7 @@ static ElementList *mesh_batch_cache_get_triangles_in_order(MeshRenderData *rdat
return cache->triangles_in_order;
}
-Batch *BKE_mesh_batch_cache_get_all_edges(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_all_edges(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1130,7 +1135,7 @@ Batch *BKE_mesh_batch_cache_get_all_edges(Mesh *me)
return cache->all_edges;
}
-Batch *BKE_mesh_batch_cache_get_all_triangles(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_all_triangles(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1147,7 +1152,7 @@ Batch *BKE_mesh_batch_cache_get_all_triangles(Mesh *me)
return cache->all_triangles;
}
-Batch *BKE_mesh_batch_cache_get_triangles_with_normals(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_triangles_with_normals(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1162,7 +1167,7 @@ Batch *BKE_mesh_batch_cache_get_triangles_with_normals(Mesh *me)
return cache->triangles_with_normals;
}
-Batch *BKE_mesh_batch_cache_get_points_with_normals(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_points_with_normals(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1177,7 +1182,7 @@ Batch *BKE_mesh_batch_cache_get_points_with_normals(Mesh *me)
return cache->points_with_normals;
}
-Batch *BKE_mesh_batch_cache_get_all_verts(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_all_verts(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1193,7 +1198,7 @@ Batch *BKE_mesh_batch_cache_get_all_verts(Mesh *me)
return cache->all_verts;
}
-Batch *BKE_mesh_batch_cache_get_fancy_edges(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_fancy_edges(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1349,7 +1354,7 @@ static void mesh_batch_cache_create_overlay_batches(Mesh *me)
mesh_render_data_free(rdata);
}
-Batch *BKE_mesh_batch_cache_get_overlay_triangles(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_overlay_triangles(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1360,7 +1365,7 @@ Batch *BKE_mesh_batch_cache_get_overlay_triangles(Mesh *me)
return cache->overlay_triangles;
}
-Batch *BKE_mesh_batch_cache_get_overlay_loose_edges(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_overlay_loose_edges(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1371,7 +1376,7 @@ Batch *BKE_mesh_batch_cache_get_overlay_loose_edges(Mesh *me)
return cache->overlay_loose_edges;
}
-Batch *BKE_mesh_batch_cache_get_overlay_loose_verts(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_overlay_loose_verts(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -1382,7 +1387,7 @@ Batch *BKE_mesh_batch_cache_get_overlay_loose_verts(Mesh *me)
return cache->overlay_loose_verts;
}
-Batch *BKE_mesh_batch_cache_get_overlay_facedots(Mesh *me)
+Batch *DRW_mesh_batch_cache_get_overlay_facedots(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index bac64020309..1f0bf0cf79c 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -64,6 +64,9 @@
#include "UI_resources.h"
+/* only for callbacks */
+#include "draw_cache_impl.h"
+
#include "draw_mode_engines.h"
#include "clay.h"
#include "eevee.h"
@@ -1919,6 +1922,28 @@ void DRW_engines_register(void)
DRW_engine_register(&draw_engine_pose_type);
DRW_engine_register(&draw_engine_sculpt_type);
#endif
+
+ /* setup callbacks */
+ {
+ /* BKE: curve.c */
+ extern void *BKE_curve_batch_cache_dirty_cb;
+ extern void *BKE_curve_batch_cache_free_cb;
+ /* BKE: mesh.c */
+ extern void *BKE_mesh_batch_cache_dirty_cb;
+ extern void *BKE_mesh_batch_cache_free_cb;
+ /* BKE: lattice.c */
+ extern void *BKE_lattice_batch_cache_dirty_cb;
+ extern void *BKE_lattice_batch_cache_free_cb;
+
+ BKE_curve_batch_cache_dirty_cb = DRW_curve_batch_cache_dirty;
+ BKE_curve_batch_cache_free_cb = DRW_curve_batch_cache_free;
+
+ BKE_mesh_batch_cache_dirty_cb = DRW_mesh_batch_cache_dirty;
+ BKE_mesh_batch_cache_free_cb = DRW_mesh_batch_cache_free;
+
+ BKE_lattice_batch_cache_dirty_cb = DRW_lattice_batch_cache_dirty;
+ BKE_lattice_batch_cache_free_cb = DRW_lattice_batch_cache_free;
+ }
}
extern struct GPUUniformBuffer *globals_ubo; /* draw_common.c */
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index b149cfe3834..09a76553b2e 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -49,7 +49,6 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_curve_render.h"
#include "BKE_depsgraph.h"
#include "BKE_font.h"
#include "BKE_library.h"
@@ -274,7 +273,7 @@ static void text_update_edited(bContext *C, Object *obedit, int mode)
}
}
- BKE_curve_batch_selection_dirty(cu);
+ BKE_curve_batch_cache_dirty(cu, BKE_CURVE_BATCH_DIRTY_SELECT);
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 1d0dacdd6d9..bafd74e4c54 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -65,7 +65,6 @@
#include "BKE_lattice.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_mesh_render.h"
#include "BKE_material.h"
#include "BKE_mball.h"
#include "BKE_modifier.h"
@@ -110,6 +109,8 @@
#include "view3d_intern.h" /* bad level include */
+#include "../../draw/intern/draw_cache_impl.h" /* bad level include (temporary) */
+
/* prototypes */
static void imm_draw_box(const float vec[8][3], bool solid, unsigned pos);
@@ -4111,7 +4112,7 @@ static void draw_em_fancy_new(Scene *UNUSED(scene), ARegion *UNUSED(ar), View3D
Object *UNUSED(ob), Mesh *me, BMEditMesh *UNUSED(em), DerivedMesh *UNUSED(cageDM), DerivedMesh *UNUSED(finalDM), const char UNUSED(dt))
{
/* for now... something simple! */
- Batch *surface = BKE_mesh_batch_cache_get_all_triangles(me);
+ Batch *surface = DRW_mesh_batch_cache_get_all_triangles(me);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
@@ -4146,7 +4147,7 @@ static void draw_em_fancy_new(Scene *UNUSED(scene), ARegion *UNUSED(ar), View3D
if (GLEW_VERSION_3_2) {
#if 0
- Batch *overlay = BKE_mesh_batch_cache_get_overlay_edges(me);
+ Batch *overlay = DRW_mesh_batch_cache_get_overlay_edges(me);
Batch_set_builtin_program(overlay, GPU_SHADER_EDGES_OVERLAY);
Batch_Uniform2f(overlay, "viewportSize", ar->winx, ar->winy);
Batch_draw(overlay);
@@ -4165,7 +4166,7 @@ static void draw_em_fancy_new(Scene *UNUSED(scene), ARegion *UNUSED(ar), View3D
#endif
}
else {
- Batch *edges = BKE_mesh_batch_cache_get_all_edges(me);
+ Batch *edges = DRW_mesh_batch_cache_get_all_edges(me);
Batch_set_builtin_program(edges, GPU_SHADER_3D_UNIFORM_COLOR);
Batch_Uniform4f(edges, "color", 0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_LINE_SMOOTH);
@@ -4227,7 +4228,7 @@ static void draw_mesh_object_outline_new(View3D *v3d, RegionView3D *rv3d, Object
UI_GetThemeColor4fv((is_active ? TH_ACTIVE : TH_SELECT), outline_color);
#if 1 /* new version that draws only silhouette edges */
- Batch *fancy_edges = BKE_mesh_batch_cache_get_fancy_edges(me);
+ Batch *fancy_edges = DRW_mesh_batch_cache_get_fancy_edges(me);
if (rv3d->persp == RV3D_ORTHO) {
Batch_set_builtin_program(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_ORTHO);
@@ -4751,7 +4752,7 @@ static void draw_mesh_fancy_new(Scene *scene, SceneLayer *sl, ARegion *ar, View3
#if 1 /* fancy wireframes */
- Batch *fancy_edges = BKE_mesh_batch_cache_get_fancy_edges(me);
+ Batch *fancy_edges = DRW_mesh_batch_cache_get_fancy_edges(me);
if (rv3d->persp == RV3D_ORTHO) {
Batch_set_builtin_program(fancy_edges, GPU_SHADER_EDGES_FRONT_BACK_ORTHO);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 2b575b523df..99caa54238d 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -43,18 +43,17 @@
#include "BLI_utildefines.h"
#include "BKE_context.h"
+#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_icons.h"
+#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_curve_render.h"
-#include "BKE_lattice_render.h"
-#include "BKE_mesh_render.h"
-
#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_transform.h"
@@ -932,15 +931,15 @@ static void view3d_main_region_listener(bScreen *sc, ScrArea *sa, ARegion *ar, w
Object *ob = scene->obedit;
switch (ob->type) {
case OB_MESH:
- BKE_mesh_batch_selection_dirty(ob->data);
+ BKE_mesh_batch_cache_dirty(ob->data, BKE_CURVE_BATCH_DIRTY_SELECT);
break;
// case OB_FONT: /* handled by text_update_edited */
case OB_CURVE:
case OB_SURF:
- BKE_curve_batch_selection_dirty(ob->data);
+ BKE_curve_batch_cache_dirty(ob->data, BKE_CURVE_BATCH_DIRTY_SELECT);
break;
case OB_LATTICE:
- BKE_lattice_batch_selection_dirty(ob->data);
+ BKE_lattice_batch_cache_dirty(ob->data, BKE_CURVE_BATCH_DIRTY_SELECT);
break;
}
}