Commit: e813ebab710174eaa0f3dec0b7ba848783b44bd8
Author: Clément Foucault
Date:   Tue Feb 14 17:48:16 2017 +0100
Branches: blender2.8
https://developer.blender.org/rBe813ebab710174eaa0f3dec0b7ba848783b44bd8

Clay Engine: new draw_view.c containing all dynamic drawing routines.

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

M       source/blender/draw/CMakeLists.txt
M       source/blender/draw/engines/clay/clay.c
M       source/blender/draw/intern/DRW_render.h
M       source/blender/draw/intern/draw_manager.c
M       source/blender/draw/intern/draw_mode_pass.c
M       source/blender/draw/intern/draw_mode_pass.h
A       source/blender/draw/intern/draw_view.c
A       source/blender/draw/intern/draw_view.h

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

diff --git a/source/blender/draw/CMakeLists.txt 
b/source/blender/draw/CMakeLists.txt
index d5b54e8a74..006fb0fbc2 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -53,11 +53,13 @@ set(SRC
        intern/draw_manager.c
        intern/draw_mode_pass.c
        intern/draw_cache.c
+       intern/draw_view.c
        engines/clay/clay.c
 
        intern/DRW_render.h
        intern/draw_mode_pass.h
        intern/draw_cache.h
+       intern/draw_view.h
        engines/clay/clay.h
 
        ./DRW_engine.h
diff --git a/source/blender/draw/engines/clay/clay.c 
b/source/blender/draw/engines/clay/clay.c
index 779fd1a6a1..b06d8c3497 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -718,11 +718,16 @@ static void CLAY_view_draw(RenderEngine *UNUSED(engine), 
const bContext *context
 
        /* Pass 4 : Overlays */
        DRW_framebuffer_texture_attach(buffers->default_fb, textures->depth, 0);
+
+       DRW_draw_grid();
        //DRW_draw_pass(passes->wire_overlay_pass);
        //DRW_draw_pass(passes->wire_outline_pass);
        DRW_draw_pass(passes->non_meshes_pass);
        DRW_draw_pass(passes->ob_center_pass);
 
+       DRW_draw_manipulator();
+       DRW_draw_region_info();
+
        /* Always finish by this */
        DRW_state_reset();
 }
diff --git a/source/blender/draw/intern/DRW_render.h 
b/source/blender/draw/intern/DRW_render.h
index 78edae803b..775ae1c6e3 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -46,6 +46,7 @@
 
 #include "draw_mode_pass.h"
 #include "draw_cache.h"
+#include "draw_view.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -53,6 +54,7 @@
 
 //#define WITH_VIEWPORT_CACHE_TEST
 
+struct bContext;
 struct GPUFrameBuffer;
 struct GPUShader;
 struct GPUTexture;
@@ -209,13 +211,12 @@ void *DRW_render_settings_get(Scene *scene, const char 
*engine_name);
 #endif /* __DRW_ENGINE_H__ */
 
 /* Draw commands */
-void DRW_draw_background(void);
-void DRW_centercircle(const float co[3]);
 void DRW_draw_pass(DRWPass *pass);
 
 void DRW_state_reset(void);
 
 /* Other */
 void DRW_get_dfdy_factors(float dfdyfac[2]);
+const struct bContext *DRW_get_context(void);
 
 #endif /* __DRW_RENDER_H__ */
\ No newline at end of file
diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 970bd2f6de..18bd26daf8 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -40,13 +40,10 @@
 
 #include "DNA_view3d_types.h"
 
-#include "GPU_basic_shader.h"
 #include "GPU_batch.h"
 #include "GPU_draw.h"
 #include "GPU_extensions.h"
 #include "GPU_framebuffer.h"
-#include "GPU_immediate.h"
-#include "GPU_matrix.h"
 #include "GPU_shader.h"
 #include "GPU_texture.h"
 #include "GPU_uniformbuffer.h"
@@ -705,48 +702,6 @@ void DRW_pass_free(DRWPass *pass)
 
 /* ****************************************** DRAW 
******************************************/
 
-void DRW_draw_background(void)
-{
-       /* Just to make sure */
-       glDepthMask(GL_TRUE);
-       glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
-
-       if (UI_GetThemeValue(TH_SHOW_BACK_GRAD)) {
-               /* Gradient background Color */
-               gpuMatrixBegin3D(); /* TODO: finish 2D API */
-
-               glClear(GL_DEPTH_BUFFER_BIT);
-
-               VertexFormat *format = immVertexFormat();
-               unsigned pos = add_attrib(format, "pos", COMP_F32, 2, 
KEEP_FLOAT);
-               unsigned color = add_attrib(format, "color", COMP_U8, 3, 
NORMALIZE_INT_TO_FLOAT);
-               unsigned char col_hi[3], col_lo[3];
-
-               immBindBuiltinProgram(GPU_SHADER_2D_SMOOTH_COLOR);
-
-               UI_GetThemeColor3ubv(TH_LOW_GRAD, col_lo);
-               UI_GetThemeColor3ubv(TH_HIGH_GRAD, col_hi);
-
-               immBegin(GL_QUADS, 4);
-               immAttrib3ubv(color, col_lo);
-               immVertex2f(pos, -1.0f, -1.0f);
-               immVertex2f(pos, 1.0f, -1.0f);
-
-               immAttrib3ubv(color, col_hi);
-               immVertex2f(pos, 1.0f, 1.0f);
-               immVertex2f(pos, -1.0f, 1.0f);
-               immEnd();
-
-               immUnbindProgram();
-
-               gpuMatrixEnd();
-       }
-       else {
-               /* Solid background Color */
-               UI_ThemeClearColorAlpha(TH_HIGH_GRAD, 1.0f);
-               glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-       }
-}
 #ifdef WITH_CLAY_ENGINE
 /* Only alter the state (does not reset it like set_state() ) */
 static void shgroup_set_state(DRWShadingGroup *shgroup)
@@ -1251,7 +1206,14 @@ bool DRW_viewport_cache_is_dirty(void)
        return (DST.current_psl->passes[0] == NULL);
 }
 
-/* ****************************************** INIT 
******************************************/
+/* ****************************************** OTHER 
***************************************** */
+
+const bContext *DRW_get_context(void)
+{
+       return DST.context;
+}
+
+/* ****************************************** INIT 
***************************************** */
 
 void DRW_engines_init(void)
 {
diff --git a/source/blender/draw/intern/draw_mode_pass.c 
b/source/blender/draw/intern/draw_mode_pass.c
index 0298db1a5c..4e04bf5f87 100644
--- a/source/blender/draw/intern/draw_mode_pass.c
+++ b/source/blender/draw/intern/draw_mode_pass.c
@@ -31,6 +31,8 @@
 
 #include "BKE_global.h"
 
+#include "DRW_render.h"
+
 #include "draw_mode_pass.h"
 
 /* ************************** OBJECT MODE ******************************* */
@@ -115,8 +117,7 @@ static DRWShadingGroup 
*shgroup_groundpoints_uniform_color(DRWPass *pass, float
 
 static DRWShadingGroup *shgroup_instance_screenspace(DRWPass *pass, struct 
Batch *geom, float *size)
 {
-       GPUShader *sh = 
GPU_shader_get_builtin_shader(GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR
-);
+       GPUShader *sh = 
GPU_shader_get_builtin_shader(GPU_SHADER_3D_SCREENSPACE_VARIYING_COLOR);
 
        DRWShadingGroup *grp = DRW_shgroup_instance_create(sh, pass, geom);
        DRW_shgroup_attrib_float(grp, "world_pos", 3);
diff --git a/source/blender/draw/intern/draw_mode_pass.h 
b/source/blender/draw/intern/draw_mode_pass.h
index d11213ec8a..6e260dac7a 100644
--- a/source/blender/draw/intern/draw_mode_pass.h
+++ b/source/blender/draw/intern/draw_mode_pass.h
@@ -26,8 +26,6 @@
 #ifndef __DRAW_MODE_PASS_H__
 #define __DRAW_MODE_PASS_H__
 
-#include "DRW_render.h"
-
 struct DRWPass;
 struct Batch;
 struct Object;
diff --git a/source/blender/draw/intern/draw_view.c 
b/source/blender/draw/intern/draw_view.c
new file mode 100644
index 0000000000..9846bd1b0a
--- /dev/null
+++ b/source/blender/draw/intern/draw_view.c
@@ -0,0 +1,704 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file blender/draw/draw_view.c
+ *  \ingroup draw
+ *
+ * Contains dynamic drawing using immediate mode
+ */
+
+#include "DNA_brush_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_view3d_types.h"
+
+#include "ED_screen.h"
+#include "ED_transform.h"
+#include "ED_view3d.h"
+
+#include "GPU_draw.h"
+#include "GPU_shader.h"
+#include "GPU_immediate.h"
+#include "GPU_matrix.h"
+
+#include "UI_resources.h"
+
+#include "BKE_global.h"
+#include "BKE_object.h"
+#include "BKE_paint.h"
+#include "BKE_unit.h"
+
+#include "DRW_render.h"
+
+#include "view3d_intern.h"
+
+#include "draw_view.h"
+
+/* ******************** region info ***************** */
+
+void DRW_draw_region_info(void)
+{
+       const bContext *C = DRW_get_context();
+       ARegion *ar = CTX_wm_region(C);
+
+       DRW_draw_cursor();
+       view3d_draw_region_info(C, ar);
+}
+
+/* ************************* Grid ************************** */
+
+static void gridline_range(double x0, double dx, double max, int* first_out, 
int* count_out)
+{
+       /* determine range of gridlines that appear in this Area -- similar 
calc but separate ranges for x & y
+       * x0 is gridline 0, the axis in screen space
+       * Area covers [0 .. max) pixels */
+
+       int first = (int)ceil(-x0 / dx);
+       int last = (int)floor((max - x0) / dx);
+
+       if (first <= last) {
+               *first_out = first;
+               *count_out = last - first + 1;
+       }
+       else {
+               *first_out = 0;
+               *count_out = 0;
+       }
+}
+
+static int gridline_count(ARegion *ar, double x0, double y0, double dx)
+{
+       /* x0 & y0 establish the "phase" of the grid within this 2D region
+       * dx is the frequency, shared by x & y directions
+       * pass in dx of smallest (highest precision) grid we want to draw */
+
+       int first, x_ct, y_ct;
+
+       gridline_range(x0, dx, ar->winx, &first, &x_ct);
+       gridline_range(y0, dx, ar->winy, &first, &y_ct);
+
+       int total_ct = x_ct + y_ct;
+
+       return total_ct;
+}
+
+static bool drawgrid_draw(ARegion *ar, double x0, double y0, double dx, int 
skip_mod, unsigned pos, unsigned col, GLubyte col_value[3])
+{
+       /* skip every skip_mod lines relative to each axis; they will be 
overlaid by another drawgrid_draw
+       * always skip exact x0 & y0 axes; they will be drawn later in color
+       *
+       * set grid color once, just before the first line is drawn
+       * it's harmless to set same color for every line, or every vertex
+       * but if no lines are drawn, color must not be set! */
+
+       const float x_max = (float)ar->winx;
+       const float y_max = (float)ar->winy;
+
+       int first, ct;
+       int x_ct = 0, y_ct = 0; /* count of lines actually drawn */
+       int lines_skipped_for_next_unit = 0;
+
+       /* draw vertical lines */
+       gridline_range(x0, dx, x_max, &first, &ct);
+
+       for (int i = first; i < first + ct; ++i) {
+               if (i == 0)
+                       continue;
+               else if (skip_mod && (i % skip_mod) == 0) {
+                       ++lines_skipped_for_next_unit;
+                       continue;
+               }
+
+               if (x_ct == 0)
+                       immAttrib3ub(col, col_value[0], col_value[1], 
col_value[2]);
+
+               float x = (float)(x0 + i * dx);
+               immVertex2f(pos, x, 0.0f);
+               immVertex2f(pos, x, y_max);
+               ++x_ct;
+       }
+
+       /* draw horizontal lines */
+       gridline_range(y0, dx, y_max, &first, &ct);
+
+       for (int i = first; i < first + ct; ++i) {
+               if 

@@ 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