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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-07-21 05:30:26 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-07-21 05:30:26 +0400
commit98774eba0e459faf801d5be4bed3588b75166a1b (patch)
tree870566da7a5477b997210a3f6c86724ed74b9ba8 /source
parent28780342eddb0e1e767bf64d69cb99bd138d621f (diff)
fix [#28037] Missing orange selection lines (trivial)
From what I can tell there is no good fix for this bug, calculating the 2d/3d viewborder and then attempting to align them to be pixel perfect fails because of float imprecision. Added a workaround, so the camera border is always drawn in 2d space, since this workaround may cause problems later on its kept under the define VIEW3D_CAMERA_BORDER_HACK so we can get old behavior back easily.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c15
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c14
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h10
3 files changed, 37 insertions, 2 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index e314d249e6d..e6889f4563f 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1335,6 +1335,11 @@ static void draw_focus_cross(float dist, float size)
glEnd();
}
+#ifdef VIEW3D_CAMERA_BORDER_HACK
+float view3d_camera_border_hack_col[4];
+short view3d_camera_border_hack_test= FALSE;
+#endif
+
/* flag similar to draw_object() */
static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int flag)
{
@@ -1348,7 +1353,15 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob
const float scax= 1.0f / len_v3(ob->obmat[0]);
const float scay= 1.0f / len_v3(ob->obmat[1]);
const float scaz= 1.0f / len_v3(ob->obmat[2]);
-
+
+#ifdef VIEW3D_CAMERA_BORDER_HACK
+ if(is_view && !(G.f & G_PICKSEL)) {
+ glGetFloatv(GL_CURRENT_COLOR, view3d_camera_border_hack_col);
+ view3d_camera_border_hack_test= TRUE;
+ return;
+ }
+#endif
+
cam= ob->data;
aspx= (float) scene->r.xsch*scene->r.xasp;
aspy= (float) scene->r.ysch*scene->r.yasp;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 0ed62f3953f..d2ff6eef097 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1007,6 +1007,8 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
/* note: quite un-scientific but without this bit extra
* 0.0001 on the lower left the 2D border sometimes
* obscures the 3D camera border */
+ /* note: with VIEW3D_CAMERA_BORDER_HACK defined this error isn't noticable
+ * but keep it here incase we need to remove the workaround */
x1i= (int)(x1 - 1.0001f);
y1i= (int)(y1 - 1.0001f);
x2i= (int)(x2 + (1.0f-0.0001f));
@@ -1039,7 +1041,17 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
setlinestyle(0);
UI_ThemeColor(TH_BACK);
glRectf(x1i, y1i, x2i, y2i);
-
+
+#ifdef VIEW3D_CAMERA_BORDER_HACK
+ {
+ if(view3d_camera_border_hack_test == TRUE) {
+ glColor4fv(view3d_camera_border_hack_col);
+ glRectf(x1i+1, y1i+1, x2i-1, y2i-1);
+ view3d_camera_border_hack_test= FALSE;
+ }
+ }
+#endif
+
setlinestyle(3);
UI_ThemeColor(TH_WIRE);
glRectf(x1i, y1i, x2i, y2i);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index aa92f0d0a59..d3886d48873 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -194,6 +194,16 @@ extern const char *view3d_context_dir[]; /* doc access */
/* draw_volume.c */
void draw_volume(struct ARegion *ar, struct GPUTexture *tex, float *min, float *max, int res[3], float dx, struct GPUTexture *tex_shadow);
+/* workaround for trivial but noticable camera bug caused by imprecision
+ * between view border calculation in 2D/3D space, workaround for bug [#28037].
+ * without this deifne we get the old behavior which is to try and align them
+ * both which _mostly_ works fine, but when the camera moves beyond ~1000 in
+ * any direction it starts to fail */
+#define VIEW3D_CAMERA_BORDER_HACK
+#ifdef VIEW3D_CAMERA_BORDER_HACK
+extern float view3d_camera_border_hack_col[4];
+extern short view3d_camera_border_hack_test;
+#endif
#endif /* ED_VIEW3D_INTERN_H */