Commit: 1458f0136d5e34307563a72144ddee88304fc318
Author: Dalai Felinto
Date:   Mon Oct 24 18:58:12 2016 +0000
Branches: blender2.8
https://developer.blender.org/rB1458f0136d5e34307563a72144ddee88304fc318

Viewport: move the background to the "modern" viewport

This also leaves room for the gradient background Mike Erwin wants to
implement.

===================================================================

M       release/scripts/startup/bl_ui/space_view3d.py
M       source/blender/blenloader/intern/versioning_270.c
M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/editors/space_view3d/view3d_draw_legacy.c
M       source/blender/editors/space_view3d/view3d_intern.h
M       source/blender/makesdna/DNA_view3d_types.h
M       source/blender/makesrna/intern/rna_space.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_view3d.py 
b/release/scripts/startup/bl_ui/space_view3d.py
index 232b46c..d0d76bf 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3014,6 +3014,9 @@ class VIEW3D_PT_viewport_debug(Panel):
         row.prop(view, "debug_near")
         row.prop(view, "debug_far")
 
+        col.label(text="Background:")
+        col.row(align=True).prop(view, "debug_background", expand=True)
+
 
 class VIEW3D_PT_grease_pencil(GreasePencilDataPanel, Panel):
     bl_space_type = 'VIEW_3D'
diff --git a/source/blender/blenloader/intern/versioning_270.c 
b/source/blender/blenloader/intern/versioning_270.c
index 9374198..e9c51d5 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1337,4 +1337,27 @@ void blo_do_versions_270(FileData *fd, Library 
*UNUSED(lib), Main *main)
                        }
                }
        }
+
+       {
+               if (!DNA_struct_elem_find(fd->filesdna, "View3DDebug", "char", 
"background")) {
+                       bScreen *screen;
+
+                       for (screen = main->screen.first; screen; screen = 
screen->id.next) {
+                               ScrArea *sa;
+                               for (sa = screen->areabase.first; sa; sa = 
sa->next) {
+                                       SpaceLink *sl;
+
+                                       for (sl = sa->spacedata.first; sl; sl = 
sl->next) {
+                                               switch (sl->spacetype) {
+                                                       case SPACE_VIEW3D:
+                                                       {
+                                                               View3D *v3d = 
(View3D *)sl;
+                                                               
v3d->debug.background = V3D_DEBUG_BACKGROUND_NONE;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
 }
diff --git a/source/blender/editors/space_view3d/view3d_draw.c 
b/source/blender/editors/space_view3d/view3d_draw.c
index 44382b0..11fff7e 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -54,6 +54,7 @@
 #include "ED_transform.h"
 
 #include "GPU_immediate.h"
+#include "GPU_material.h"
 #include "GPU_viewport.h"
 
 #include "MEM_guardedalloc.h"
@@ -784,16 +785,76 @@ static bool view3d_draw_render_draw(const bContext *C, 
Scene *scene,
        return true;
 }
 
+/* ******************** background plates ***************** */
+
+static void view3d_draw_background_none()
+{
+       UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
+       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+}
+
+static void view3d_draw_background_gradient()
+{
+       /* TODO viewport */
+       view3d_draw_background_none();
+}
+
+static void view3d_draw_background_world(Scene *scene, View3D *v3d, 
RegionView3D *rv3d)
+{
+       if (scene->world) {
+               GPUMaterial *gpumat = GPU_material_world(scene, scene->world);
+
+               /* calculate full shader for background */
+               GPU_material_bind(gpumat, 1, 1, 1.0f, false, rv3d->viewmat, 
rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0));
+
+               if (!GPU_material_bound(gpumat)) {
+                       view3d_draw_background_none();
+               }
+
+               glClear(GL_DEPTH_BUFFER_BIT);
+               glDisable(GL_DEPTH_TEST);
+
+               /* TODO viewport (dfelinto): GPU_material_bind relies on 
immediate mode,
+               * we can't get rid of the following code without a bigger 
refactor
+               * or we dropping this functionality. */
+
+               glBegin(GL_TRIANGLE_STRIP);
+               glVertex2f(-1.0f, -1.0f);
+               glVertex2f(1.0f, -1.0f);
+               glVertex2f(-1.0f, 1.0f);
+               glVertex2f(1.0f, 1.0f);
+               glEnd();
+
+               GPU_material_unbind(gpumat);
+       }
+       else {
+               view3d_draw_background_none();
+       }
+}
+
 /* ******************** solid plates ***************** */
 
 /**
- *
+ * Clear the buffer and draw the proper shader
  */
 static void view3d_draw_background(const bContext *C)
 {
-       /* TODO viewport */
-       UI_ThemeClearColor(TH_HIGH_GRAD);
-       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+       Scene *scene = CTX_data_scene(C);
+       View3D *v3d = CTX_wm_view3d(C);
+       RegionView3D *rv3d = CTX_wm_region_view3d(C);
+
+       switch (v3d->debug.background) {
+               case V3D_DEBUG_BACKGROUND_WORLD:
+                       view3d_draw_background_world(scene, v3d, rv3d);
+                       break;
+               case V3D_DEBUG_BACKGROUND_GRADIENT:
+                       view3d_draw_background_gradient();
+                       break;
+               case V3D_DEBUG_BACKGROUND_NONE:
+               default:
+                       view3d_draw_background_none(v3d);
+                       break;
+       }
 }
 
 /**
@@ -1749,3 +1810,13 @@ void VP_drawrenderborder(ARegion *ar, View3D *v3d)
 {
        drawrenderborder(ar, v3d);
 }
+
+void VP_view3d_draw_background_none(void)
+{
+       view3d_draw_background_none();
+}
+
+void VP_view3d_draw_background_world(Scene *scene, View3D *v3d, RegionView3D 
*rv3d)
+{
+       view3d_draw_background_world(scene, v3d, rv3d);
+}
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c 
b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index c260ab2..8042890 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -2246,109 +2246,10 @@ void ED_view3d_draw_offscreen_init(Scene *scene, 
View3D *v3d)
 static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar)
 {
        if (scene->world && (v3d->flag3 & V3D_SHOW_WORLD)) {
-               RegionView3D *rv3d = ar->regiondata;
-               GPUMaterial *gpumat = GPU_material_world(scene, scene->world);
-
-               /* calculate full shader for background */
-               GPU_material_bind(gpumat, 1, 1, 1.0, false, rv3d->viewmat, 
rv3d->viewinv, rv3d->viewcamtexcofac, (v3d->scenelock != 0));
-
-               bool material_not_bound = !GPU_material_bound(gpumat);
-
-               /* Draw world */
-               glEnable(GL_DEPTH_TEST);
-               glDepthFunc(GL_ALWAYS);
-
-               if (material_not_bound) {
-                       GPU_material_unbind(gpumat);
-
-                       glMatrixMode(GL_PROJECTION);
-                       glPushMatrix();
-                       glLoadIdentity();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPushMatrix();
-                       glLoadIdentity();
-
-                       unsigned pos = add_attrib(immVertexFormat(), "pos", 
GL_FLOAT, 3, KEEP_FLOAT);
-                       immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
-                       immUniformColor4ub(0.0f, 0.0f, 0.0f, 1.0f);
-
-                       immBegin(GL_TRIANGLE_STRIP, 4);
-                       immVertex3f(pos, -1.0f, -1.0f, 1.0f);
-                       immVertex3f(pos, 1.0f, -1.0f, 1.0f);
-                       immVertex3f(pos, -1.0f, 1.0f, 1.0f);
-                       immVertex3f(pos, 1.0f, 1.0f, 1.0f);
-                       immEnd();
-
-                       immUnbindProgram();
-
-                       glMatrixMode(GL_PROJECTION);
-                       glPopMatrix();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPopMatrix();
-               }
-               else {
-                       /* TODO viewport (dfelinto): GPU_material_bind relies 
on immediate mode,
-                        * we can't get rid of the following code without a 
bigger refactor
-                        * or we dropping this functionality. */
-                       glBegin(GL_TRIANGLE_STRIP);
-                       glVertex3f(-1.0f, -1.0f, 1.0f);
-                       glVertex3f(1.0f, -1.0f, 1.0f);
-                       glVertex3f(-1.0f, 1.0f, 1.0f);
-                       glVertex3f(1.0f, 1.0f, 1.0f);
-                       glEnd();
-                       GPU_material_unbind(gpumat);
-               }
-
-               glDepthFunc(GL_LEQUAL);
-               glDisable(GL_DEPTH_TEST);
+               VP_view3d_draw_background_world(scene, v3d, ar->regiondata);
        }
        else {
-               if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
-                       glMatrixMode(GL_PROJECTION);
-                       glPushMatrix();
-                       glLoadIdentity();
-                       glMatrixMode(GL_MODELVIEW);
-                       glPushMatrix();
-                       glLoadIdentity();
-
-                       glEnable(GL_DEPTH_TEST);
-                       glDepthFunc(GL_ALWAYS);
-
-                       VertexFormat *format = immVertexFormat();
-                       unsigned pos = add_attrib(format, "pos", GL_FLOAT, 3, 
KEEP_FLOAT);
-                       unsigned color = add_attrib(format, "color", 
GL_UNSIGNED_BYTE, 3, NORMALIZE_INT_TO_FLOAT);
-                       unsigned char col_hi[3], col_lo[3];
-
-                       immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
-
-                       UI_GetThemeColor3ubv(TH_LOW_GRAD, col_lo);
-                       UI_GetThemeColor3ubv(TH_LOW_GRAD, col_hi);
-
-                       immBegin(GL_QUADS, 4);
-                       immAttrib3ubv(color, col_lo);
-                       immVertex3f(pos, -1.0f, -1.0f, 1.0f);
-                       immVertex3f(pos, 1.0f, -1.0f, 1.0f);
-
-                       immAttrib3ubv(color, col_hi);
-                       immVertex3f(pos, 1.0f, 1.0f, 1.0f);
-                       immVertex3f(pos, -1.0f, 1.0f, 1.0f);
-                       immEnd();
-
-                       immUnbindProgram();
-
-                       glDepthFunc(GL_LEQUAL);
-                       glDisable(GL_DEPTH_TEST);
-
-                       glMatrixMode(GL_PROJECTION);
-                       glPopMatrix();
-
-                       glMatrixMode(GL_MODELVIEW);
-                       glPopMatrix();
-               }
-               else {
-                       UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
-                       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-               }
+               VP_view3d_draw_background_none();
        }
 }
 
diff --git a/source/blender/editors/space_view3d/view3d_intern.h 
b/source/blender/editors/space_view3d/view3d_intern.h
index fd85527..fb3ef8b 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -342,5 +342,7 @@ void draw_dupli_objects(Scene *scene, ARegion *ar, View3D 
*v3d, Base *base);
 bool VP_legacy_use_depth(Scene *scene, View3D *v3d);
 void VP_drawviewborder(Scene *scene, ARegion *ar, View3D *v3d);
 void VP_drawrenderborder(ARegion *ar, View3D *v3d);
+void VP_view3d_draw_background_none(void);
+void VP_view3d_draw_background_world(Scene *scene, View3D *v3d, RegionView3D 
*rv3d);
 
 #endif /* __VIEW3D_INTERN_H__ */
diff --git a/source/blender/makesdna/DNA_view3d_types.h 
b/source/blender/makesdna/DNA_view3d_types.h
index 3a990a1..f84a6c3 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -69,6 +69,8 @@ struct GPUViewport;
 
 typedef struct View3DDebug {
        float znear, zfar;
+       char background;
+       char pad[7];
 } View3DDebug;
  
 /* Background Picture in 3D-View */
@@ -337,6 +339,13 @@ enum {
        V3D_DEBUG_SHOW_COMBINED_DEPTH = (1 << 2),
 };
 
+/* View3d->debug.background */
+enum {
+       V3D_DEBUG_BACKGROUND_NONE     = (1 << 0),
+       V3D_DEBUG_BACKGROUND_GRADIENT = (1 << 1),
+       V3D_DEBUG_BACKGROUND_WORLD    = (1 << 2),
+};
+
 /* View3D->around */
 enum {
        /* center of the bounding box */
diff --git a/source/blender/makesrna/intern/rna_space.c 
b/source/blender/makesrna/intern/rna_space.c
index a1e1c80..7580bd9 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -2379,6 +2379,13 @@ static void rna_def_space_view3d(BlenderRNA *brna)
                {0, NULL, 0, NULL, NULL}
        };
        
+       static EnumPropertyItem debug_background_items[] = {
+               {V3D_DEBUG_BACKGROUND_NONE, "NONE", 0, "None", ""},
+               {V3D_DEBUG_BACKGROUND_GRADIENT, "GRADIENT", 0, "Gradient", ""},
+               {V3D_DEBUG_BACKGROUND_WORLD, "WORLD", 0, "World", ""},
+               {0, NULL, 0, NULL, NULL}
+       };
+
        srna = RNA_def_struct(brna, "SpaceView3D", "Space");
        RNA_def_struct_sdna(srna, "View3D");
        RNA_def_struct_ui_text(srna, "3D View Space", "3D View space data");
@@ -2801,6 +2808,12 @@ static void rna_def_space_view3d(BlenderRNA *brna)
        RNA_def_property_ui_text(

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to