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:
authorDalai Felinto <dfelinto@gmail.com>2016-10-24 21:58:12 +0300
committerDalai Felinto <dfelinto@gmail.com>2016-10-24 22:05:49 +0300
commit1458f0136d5e34307563a72144ddee88304fc318 (patch)
tree5476d92512f16807f389899573398da12a1f7eaa /source/blender/editors/space_view3d/view3d_draw.c
parent744718f6356ece21bf90c54550b39d56cf0a356e (diff)
Viewport: move the background to the "modern" viewport
This also leaves room for the gradient background Mike Erwin wants to implement.
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_draw.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c79
1 files changed, 75 insertions, 4 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 44382b06a84..11fff7e60e2 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);
+}