[Bf-blender-cvs] [0e3ba7cf41] clay-engine: More lamp work
Clément Foucault
noreply at git.blender.org
Thu Feb 2 22:20:41 CET 2017
Commit: 0e3ba7cf4150a842a65819ff7d60a3abdaf75a55
Author: Clément Foucault
Date: Thu Feb 2 22:19:23 2017 +0100
Branches: clay-engine
https://developer.blender.org/rB0e3ba7cf4150a842a65819ff7d60a3abdaf75a55
More lamp work
===================================================================
M source/blender/draw/intern/draw_mode_pass.c
===================================================================
diff --git a/source/blender/draw/intern/draw_mode_pass.c b/source/blender/draw/intern/draw_mode_pass.c
index 391639e57d..507872a4fe 100644
--- a/source/blender/draw/intern/draw_mode_pass.c
+++ b/source/blender/draw/intern/draw_mode_pass.c
@@ -96,17 +96,27 @@ static DRWShadingGroup *arrows_group_active;
/* Lamps */
static DRWShadingGroup *lamp_center;
+static DRWShadingGroup *lamp_center_group;
static DRWShadingGroup *lamp_groundpoint;
static DRWShadingGroup *lamp_groundline;
-static DRWShadingGroup *lamp_circle_wire;
+static DRWShadingGroup *lamp_circle;
static DRWShadingGroup *lamp_circle_active;
static DRWShadingGroup *lamp_circle_select;
-static DRWShadingGroup *lamp_circle_shadow_wire;
+static DRWShadingGroup *lamp_circle_transform;
+static DRWShadingGroup *lamp_circle_group;
+static DRWShadingGroup *lamp_circle_group_active;
+static DRWShadingGroup *lamp_circle_shadow;
static DRWShadingGroup *lamp_circle_shadow_active;
static DRWShadingGroup *lamp_circle_shadow_select;
-static DRWShadingGroup *lamp_sunrays_wire;
+static DRWShadingGroup *lamp_circle_shadow_transform;
+static DRWShadingGroup *lamp_circle_shadow_group;
+static DRWShadingGroup *lamp_circle_shadow_group_active;
+static DRWShadingGroup *lamp_sunrays;
static DRWShadingGroup *lamp_sunrays_active;
static DRWShadingGroup *lamp_sunrays_select;
+static DRWShadingGroup *lamp_sunrays_transform;
+static DRWShadingGroup *lamp_sunrays_group;
+static DRWShadingGroup *lamp_sunrays_group_active;
/* Helpers */
static DRWShadingGroup *relationship_lines;
@@ -301,15 +311,25 @@ void DRW_pass_setup_common(DRWPass **wire_overlay, DRWPass **wire_outline, DRWPa
* for now we create 3 times the same VBO with only lamp center coordinates
* but ideally we would only create it once */
lamp_center = shgroup_dynpoints_uniform_color(*non_meshes, colorLampNoAlpha, &lampCenterSize);
- lamp_circle_wire = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleRad);
+ lamp_center_group = shgroup_dynpoints_uniform_color(*non_meshes, colorGroup, &lampCenterSize);
+ lamp_circle = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleRad);
lamp_circle_active = shgroup_lamp(*non_meshes, colorActive, &lampCircleRad);
lamp_circle_select = shgroup_lamp(*non_meshes, colorSelect, &lampCircleRad);
- lamp_circle_shadow_wire = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleShadowRad);
+ lamp_circle_transform = shgroup_lamp(*non_meshes, colorTransform, &lampCircleRad);
+ lamp_circle_group = shgroup_lamp(*non_meshes, colorGroup, &lampCircleRad);
+ lamp_circle_group_active = shgroup_lamp(*non_meshes, colorGroupActive, &lampCircleRad);
+ lamp_circle_shadow = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleShadowRad);
lamp_circle_shadow_active = shgroup_lamp(*non_meshes, colorActive, &lampCircleShadowRad);
lamp_circle_shadow_select = shgroup_lamp(*non_meshes, colorSelect, &lampCircleShadowRad);
- lamp_sunrays_wire = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleRad);
+ lamp_circle_shadow_transform = shgroup_lamp(*non_meshes, colorTransform, &lampCircleShadowRad);
+ lamp_circle_shadow_group = shgroup_lamp(*non_meshes, colorGroup, &lampCircleShadowRad);
+ lamp_circle_shadow_group_active = shgroup_lamp(*non_meshes, colorGroupActive, &lampCircleShadowRad);
+ lamp_sunrays = shgroup_lamp(*non_meshes, colorLampNoAlpha, &lampCircleRad);
lamp_sunrays_active = shgroup_lamp(*non_meshes, colorActive, &lampCircleRad);
lamp_sunrays_select = shgroup_lamp(*non_meshes, colorSelect, &lampCircleRad);
+ lamp_sunrays_transform = shgroup_lamp(*non_meshes, colorTransform, &lampCircleRad);
+ lamp_sunrays_group = shgroup_lamp(*non_meshes, colorGroup, &lampCircleRad);
+ lamp_sunrays_group_active = shgroup_lamp(*non_meshes, colorGroupActive, &lampCircleRad);
lamp_groundline = shgroup_groundlines_uniform_color(*non_meshes, colorLamp);
lamp_groundpoint = shgroup_groundpoints_uniform_color(*non_meshes, colorLamp);
@@ -514,43 +534,69 @@ void DRW_shgroup_wire_outline(DRWPass *wire_outline, Object *ob,
static void DRW_draw_lamp(Object *ob)
{
- struct Batch *geom = DRW_cache_single_vert_get();
+ struct Batch *center = DRW_cache_single_vert_get();
struct Batch *lamp = DRW_cache_lamp_get();
struct Batch *sunrays = DRW_cache_lamp_sunrays_get();
Lamp *la = ob->data;
+ int theme_id = draw_object_wire_theme(ob);
- /* Don't draw the center if it's selected */
- if ((ob->base_flag & BASE_SELECTED) == 0) {
- DRW_shgroup_call_add(lamp_center, geom, ob->obmat);
- DRW_shgroup_call_add(lamp_circle_wire, lamp, ob->obmat);
- }
- else {
+ /* Don't draw the center if it's selected or active */
+ if (theme_id == TH_GROUP)
+ DRW_shgroup_call_add(lamp_center_group, center, ob->obmat);
+ else if (theme_id == TH_LAMP)
+ DRW_shgroup_call_add(lamp_center, center, ob->obmat);
+
+ /* First circle */
+ if (theme_id == TH_ACTIVE)
+ DRW_shgroup_call_add(lamp_circle_active, lamp, ob->obmat);
+ else if (theme_id == TH_SELECT)
DRW_shgroup_call_add(lamp_circle_select, lamp, ob->obmat);
- }
+ else if (theme_id == TH_GROUP)
+ DRW_shgroup_call_add(lamp_circle_group, lamp, ob->obmat);
+ else if (theme_id == TH_GROUP_ACTIVE)
+ DRW_shgroup_call_add(lamp_circle_group_active, lamp, ob->obmat);
+ else if (theme_id == TH_TRANSFORM)
+ DRW_shgroup_call_add(lamp_circle_transform, lamp, ob->obmat);
+ else
+ DRW_shgroup_call_add(lamp_circle, lamp, ob->obmat);
/* draw dashed outer circle if shadow is on. remember some lamps can't have certain shadows! */
if (la->type != LA_HEMI) {
if ((la->mode & LA_SHAD_RAY) || ((la->mode & LA_SHAD_BUF) && (la->type == LA_SPOT))) {
- if ((ob->base_flag & BASE_SELECTED) == 0) {
- DRW_shgroup_call_add(lamp_circle_shadow_wire, lamp, ob->obmat);
- }
- else {
+ if (theme_id == TH_ACTIVE)
+ DRW_shgroup_call_add(lamp_circle_shadow_active, lamp, ob->obmat);
+ else if (theme_id == TH_SELECT)
DRW_shgroup_call_add(lamp_circle_shadow_select, lamp, ob->obmat);
- }
+ else if (theme_id == TH_GROUP)
+ DRW_shgroup_call_add(lamp_circle_shadow_group, lamp, ob->obmat);
+ else if (theme_id == TH_GROUP_ACTIVE)
+ DRW_shgroup_call_add(lamp_circle_shadow_group_active, lamp, ob->obmat);
+ else if (theme_id == TH_TRANSFORM)
+ DRW_shgroup_call_add(lamp_circle_shadow_transform, lamp, ob->obmat);
+ else
+ DRW_shgroup_call_add(lamp_circle_shadow, lamp, ob->obmat);
}
}
+ /* Sunrays */
if (la->type == LA_SUN) {
- if ((ob->base_flag & BASE_SELECTED) == 0) {
- DRW_shgroup_call_add(lamp_sunrays_wire, sunrays, ob->obmat);
- }
- else {
+ if (theme_id == TH_ACTIVE)
+ DRW_shgroup_call_add(lamp_sunrays_active, sunrays, ob->obmat);
+ else if (theme_id == TH_SELECT)
DRW_shgroup_call_add(lamp_sunrays_select, sunrays, ob->obmat);
- }
+ else if (theme_id == TH_GROUP)
+ DRW_shgroup_call_add(lamp_sunrays_group, sunrays, ob->obmat);
+ else if (theme_id == TH_GROUP_ACTIVE)
+ DRW_shgroup_call_add(lamp_sunrays_group_active, sunrays, ob->obmat);
+ else if (theme_id == TH_TRANSFORM)
+ DRW_shgroup_call_add(lamp_sunrays_transform, sunrays, ob->obmat);
+ else
+ DRW_shgroup_call_add(lamp_sunrays, sunrays, ob->obmat);
}
- DRW_shgroup_call_add(lamp_groundline, geom, ob->obmat);
- DRW_shgroup_call_add(lamp_groundpoint, geom, ob->obmat);
+ /* Line and point going to the ground */
+ DRW_shgroup_call_add(lamp_groundline, center, ob->obmat);
+ DRW_shgroup_call_add(lamp_groundpoint, center, ob->obmat);
}
static void DRW_draw_empty(Object *ob)
More information about the Bf-blender-cvs
mailing list