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/editors/space_view3d/view3d_draw.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c49
1 files changed, 36 insertions, 13 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 59a19782f1d..95a9d58c36e 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -119,7 +119,7 @@ void circf(float x, float y, float rad)
glPushMatrix();
- glTranslatef(x, y, 0.);
+ glTranslatef(x, y, 0.0);
gluDisk(qobj, 0.0, rad, 32, 1);
@@ -136,7 +136,7 @@ void circ(float x, float y, float rad)
glPushMatrix();
- glTranslatef(x, y, 0.);
+ glTranslatef(x, y, 0.0);
gluDisk(qobj, 0.0, rad, 32, 1);
@@ -1515,7 +1515,7 @@ exit:
/* ************************************************************* */
-static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
+static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d, int foreground)
{
RegionView3D *rv3d = ar->regiondata;
BGpic *bgpic;
@@ -1524,10 +1524,13 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
ImBuf *ibuf = NULL, *freeibuf;
float vec[4], fac, asp, zoomx, zoomy;
float x1, y1, x2, y2, cx, cy;
-
+ int fg_flag = foreground ? V3D_BGPIC_FOREGROUND : 0;
for (bgpic = v3d->bgpicbase.first; bgpic; bgpic = bgpic->next) {
+ if ((bgpic->flag & V3D_BGPIC_FOREGROUND) != fg_flag)
+ continue;
+
if ((bgpic->view == 0) || /* zero for any */
(bgpic->view & (1 << rv3d->view)) || /* check agaist flags */
(rv3d->persp == RV3D_CAMOB && bgpic->view == (1 << RV3D_VIEW_CAMERA)))
@@ -1680,6 +1683,26 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
}
}
+static void draw_bgpics(Scene *scene, ARegion *ar, View3D *v3d, int foreground)
+{
+ RegionView3D *rv3d = ar->regiondata;
+
+ if ((v3d->flag & V3D_DISPBGPICS) == 0)
+ return;
+
+ if (v3d->flag2 & V3D_RENDER_OVERRIDE)
+ return;
+
+ if ((rv3d->view == RV3D_VIEW_USER) || (rv3d->persp != RV3D_ORTHO)) {
+ if (rv3d->persp == RV3D_CAMOB) {
+ draw_bgpic(scene, ar, v3d, foreground);
+ }
+ }
+ else {
+ draw_bgpic(scene, ar, v3d, foreground);
+ }
+}
+
/* ****************** View3d afterdraw *************** */
typedef struct View3DAfter {
@@ -2750,13 +2773,16 @@ static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar)
/* render result draw */
if (v3d->flag & V3D_DISPBGPICS)
- draw_bgpic(scene, ar, v3d);
+ draw_bgpic(scene, ar, v3d, FALSE);
else
fdrawcheckerboard(0, 0, ar->winx, ar->winy);
type = rv3d->render_engine->type;
type->view_draw(rv3d->render_engine, C);
+ if (v3d->flag & V3D_DISPBGPICS)
+ draw_bgpic(scene, ar, v3d, TRUE);
+
return 1;
}
@@ -2837,9 +2863,6 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const
star_stuff_term_func);
}
}
- if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
- if (v3d->flag & V3D_DISPBGPICS) draw_bgpic(scene, ar, v3d);
- }
}
}
else {
@@ -2851,13 +2874,11 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const
glLoadMatrixf(rv3d->winmat);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(rv3d->viewmat);
-
- if (v3d->flag & V3D_DISPBGPICS) {
- draw_bgpic(scene, ar, v3d);
- }
}
}
-
+
+ draw_bgpics(scene, ar, v3d, FALSE);
+
if (rv3d->rflag & RV3D_CLIPPING)
ED_view3d_clipping_set(rv3d);
@@ -2915,6 +2936,8 @@ static void view3d_main_area_draw_objects(const bContext *C, ARegion *ar, const
}
}
+ draw_bgpics(scene, ar, v3d, TRUE);
+
// REEB_draw();
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {