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:
Diffstat (limited to 'source/blender/draw/intern/draw_manager.c')
-rw-r--r--source/blender/draw/intern/draw_manager.c136
1 files changed, 16 insertions, 120 deletions
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index e3464ae7320..4bfae75848b 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -84,13 +84,13 @@
/* only for callbacks */
#include "draw_cache_impl.h"
-#include "draw_mode_engines.h"
#include "engines/eevee/eevee_engine.h"
#include "engines/basic/basic_engine.h"
#include "engines/workbench/workbench_engine.h"
#include "engines/external/external_engine.h"
#include "engines/gpencil/gpencil_engine.h"
#include "engines/select/select_engine.h"
+#include "engines/overlay/overlay_engine.h"
#include "GPU_context.h"
@@ -603,7 +603,7 @@ static void draw_unit_state_create(void)
infos->ob_index = 0;
infos->ob_random = 0.0f;
- infos->ob_neg_scale = 1.0f;
+ infos->ob_flag = 1.0f;
copy_v3_fl(infos->ob_color, 1.0f);
/* TODO(fclem) get rid of this. */
@@ -1336,80 +1336,7 @@ static void drw_engines_enable_from_engine(RenderEngineType *engine_type,
}
}
-static void drw_engines_enable_from_object_mode(void)
-{
- use_drw_engine(&draw_engine_object_type);
- /* TODO(fclem) remove this, it does not belong to it's own engine. */
- use_drw_engine(&draw_engine_motion_path_type);
-}
-
-static void drw_engines_enable_from_paint_mode(int mode)
-{
- switch (mode) {
- case CTX_MODE_SCULPT:
- use_drw_engine(&draw_engine_sculpt_type);
- break;
- case CTX_MODE_PAINT_WEIGHT:
- case CTX_MODE_PAINT_VERTEX:
- use_drw_engine(&draw_engine_paint_vertex_type);
- break;
- case CTX_MODE_PAINT_TEXTURE:
- use_drw_engine(&draw_engine_paint_texture_type);
- break;
- default:
- break;
- }
-}
-
-static void drw_engines_enable_from_mode(int mode)
-{
- switch (mode) {
- case CTX_MODE_EDIT_MESH:
- use_drw_engine(&draw_engine_edit_mesh_type);
- break;
- case CTX_MODE_EDIT_SURFACE:
- case CTX_MODE_EDIT_CURVE:
- use_drw_engine(&draw_engine_edit_curve_type);
- break;
- case CTX_MODE_EDIT_TEXT:
- use_drw_engine(&draw_engine_edit_text_type);
- break;
- case CTX_MODE_EDIT_ARMATURE:
- use_drw_engine(&draw_engine_edit_armature_type);
- break;
- case CTX_MODE_EDIT_METABALL:
- use_drw_engine(&draw_engine_edit_metaball_type);
- break;
- case CTX_MODE_EDIT_LATTICE:
- use_drw_engine(&draw_engine_edit_lattice_type);
- break;
- case CTX_MODE_PARTICLE:
- use_drw_engine(&draw_engine_particle_type);
- break;
- case CTX_MODE_POSE:
- case CTX_MODE_PAINT_WEIGHT:
- /* The pose engine clears the depth of the default framebuffer
- * to draw an object with `OB_DRAWXRAY`.
- * (different of workbench that has its own framebuffer).
- * So make sure you call its `draw_scene` after all the other engines. */
- use_drw_engine(&draw_engine_pose_type);
- break;
- case CTX_MODE_SCULPT:
- case CTX_MODE_PAINT_VERTEX:
- case CTX_MODE_PAINT_TEXTURE:
- case CTX_MODE_OBJECT:
- case CTX_MODE_PAINT_GPENCIL:
- case CTX_MODE_EDIT_GPENCIL:
- case CTX_MODE_SCULPT_GPENCIL:
- case CTX_MODE_WEIGHT_GPENCIL:
- break;
- default:
- BLI_assert(!"Draw mode invalid");
- break;
- }
-}
-
-static void drw_engines_enable_from_overlays(int UNUSED(overlay_flag))
+static void drw_engines_enable_overlays(void)
{
use_drw_engine(&draw_engine_overlay_type);
}
@@ -1421,36 +1348,19 @@ static void drw_engines_enable_basic(void)
use_drw_engine(DRW_engine_viewport_basic_type.draw_engine);
}
-static void drw_engines_enable(ViewLayer *view_layer,
+static void drw_engines_enable(ViewLayer *UNUSED(view_layer),
RenderEngineType *engine_type,
bool gpencil_engine_needed)
{
- Object *obact = OBACT(view_layer);
- const enum eContextObjectMode mode = CTX_data_mode_enum_ex(
- DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode);
View3D *v3d = DST.draw_ctx.v3d;
const int drawtype = v3d->shading.type;
const bool use_xray = XRAY_ENABLED(v3d);
drw_engines_enable_from_engine(engine_type, drawtype, use_xray);
- /* grease pencil */
if (gpencil_engine_needed) {
use_drw_engine(&draw_engine_gpencil_type);
}
-
- if (DRW_state_draw_support()) {
- /* Draw paint modes first so that they are drawn below the wireframes. */
- drw_engines_enable_from_paint_mode(mode);
- drw_engines_enable_from_overlays(v3d->overlay.flag);
- drw_engines_enable_from_object_mode();
- drw_engines_enable_from_mode(mode);
- }
- else {
- /* Force enable overlays engine for wireframe mode */
- if (v3d->shading.type == OB_WIRE) {
- drw_engines_enable_from_overlays(v3d->overlay.flag);
- }
- }
+ drw_engines_enable_overlays();
}
static void drw_engines_disable(void)
@@ -2243,7 +2153,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph,
bool use_obedit = false;
/* obedit_ctx_mode is used for selecting the right draw engines */
- eContextObjectMode obedit_ctx_mode;
+ // eContextObjectMode obedit_ctx_mode;
/* object_mode is used for filtering objects in the depsgraph */
eObjectMode object_mode;
int object_type = 0;
@@ -2252,11 +2162,11 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph,
object_mode = obedit->mode;
if (obedit->type == OB_MBALL) {
use_obedit = true;
- obedit_ctx_mode = CTX_MODE_EDIT_METABALL;
+ // obedit_ctx_mode = CTX_MODE_EDIT_METABALL;
}
else if (obedit->type == OB_ARMATURE) {
use_obedit = true;
- obedit_ctx_mode = CTX_MODE_EDIT_ARMATURE;
+ // obedit_ctx_mode = CTX_MODE_EDIT_ARMATURE;
}
}
if (v3d->overlay.flag & V3D_OVERLAY_BONE_SELECT) {
@@ -2278,7 +2188,7 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph,
use_obedit = true;
object_type = obpose->type;
object_mode = obpose->mode;
- obedit_ctx_mode = CTX_MODE_POSE;
+ // obedit_ctx_mode = CTX_MODE_POSE;
}
}
}
@@ -2292,23 +2202,21 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph,
/* Get list of enabled engines */
if (use_obedit) {
- drw_engines_enable_from_paint_mode(obedit_ctx_mode);
- drw_engines_enable_from_mode(obedit_ctx_mode);
+ drw_engines_enable_overlays();
}
else if (!draw_surface) {
/* grease pencil selection */
use_drw_engine(&draw_engine_gpencil_type);
- drw_engines_enable_from_overlays(v3d->overlay.flag);
- drw_engines_enable_from_object_mode();
+ drw_engines_enable_overlays();
}
else {
+ /* Draw surface for occlusion. */
drw_engines_enable_basic();
/* grease pencil selection */
use_drw_engine(&draw_engine_gpencil_type);
- drw_engines_enable_from_overlays(v3d->overlay.flag);
- drw_engines_enable_from_object_mode();
+ drw_engines_enable_overlays();
}
drw_engines_data_validate();
@@ -2562,7 +2470,7 @@ void DRW_draw_depth_loop(struct Depsgraph *depsgraph,
{
drw_engines_enable_basic();
if (DRW_state_draw_support()) {
- drw_engines_enable_from_object_mode();
+ drw_engines_enable_overlays();
}
}
@@ -2867,21 +2775,9 @@ void DRW_engines_register(void)
DRW_engine_register(&draw_engine_workbench_solid);
DRW_engine_register(&draw_engine_workbench_transparent);
- DRW_engine_register(&draw_engine_object_type);
- DRW_engine_register(&draw_engine_edit_armature_type);
- DRW_engine_register(&draw_engine_edit_curve_type);
- DRW_engine_register(&draw_engine_edit_lattice_type);
- DRW_engine_register(&draw_engine_edit_mesh_type);
- DRW_engine_register(&draw_engine_edit_metaball_type);
- DRW_engine_register(&draw_engine_edit_text_type);
- DRW_engine_register(&draw_engine_motion_path_type);
- DRW_engine_register(&draw_engine_overlay_type);
- DRW_engine_register(&draw_engine_paint_texture_type);
- DRW_engine_register(&draw_engine_paint_vertex_type);
- DRW_engine_register(&draw_engine_particle_type);
- DRW_engine_register(&draw_engine_pose_type);
- DRW_engine_register(&draw_engine_sculpt_type);
DRW_engine_register(&draw_engine_gpencil_type);
+
+ DRW_engine_register(&draw_engine_overlay_type);
DRW_engine_register(&draw_engine_select_type);
/* setup callbacks */