[Bf-blender-cvs] [1458f01] blender2.8: Viewport: move the background to the "modern" viewport
Dalai Felinto
noreply at git.blender.org
Mon Oct 24 21:06:04 CEST 2016
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. @@
More information about the Bf-blender-cvs
mailing list