[Bf-blender-cvs] [8ccff665fc9] tmp-overlay-engine: Overlay Engine: Add Lamps

Clément Foucault noreply at git.blender.org
Wed Nov 6 03:14:19 CET 2019


Commit: 8ccff665fc9964d312034a7987abe7d18f4e7861
Author: Clément Foucault
Date:   Wed Nov 6 02:53:48 2019 +0100
Branches: tmp-overlay-engine
https://developer.blender.org/rB8ccff665fc9964d312034a7987abe7d18f4e7861

Overlay Engine: Add Lamps

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

M	source/blender/draw/CMakeLists.txt
M	source/blender/draw/engines/overlay/overlay_edit_mesh.c
M	source/blender/draw/engines/overlay/overlay_engine.c
A	source/blender/draw/engines/overlay/overlay_extra.c
M	source/blender/draw/engines/overlay/overlay_private.h
M	source/blender/draw/engines/overlay/overlay_shader.c
D	source/blender/draw/engines/overlay/shaders/edit_mesh_ghost_clear_vert.glsl
A	source/blender/draw/engines/overlay/shaders/extra_vert.glsl
M	source/blender/draw/intern/draw_cache.c
M	source/blender/draw/intern/draw_cache.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/draw/modes/object_mode.c
M	source/blender/gpu/GPU_vertex_buffer.h
M	source/blender/gpu/intern/gpu_vertex_buffer.c

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

diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 63af356417c..f96d63fdcd7 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -136,6 +136,7 @@ set(SRC
   engines/select/select_engine.c
   engines/overlay/overlay_engine.c
   engines/overlay/overlay_edit_mesh.c
+  engines/overlay/overlay_extra.c
   engines/overlay/overlay_facing.c
   engines/overlay/overlay_grid.c
   engines/overlay/overlay_outline.c
@@ -389,12 +390,12 @@ data_to_c_simple(engines/overlay/shaders/edit_mesh_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_geom.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_normal_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_normal_geom.glsl SRC)
-data_to_c_simple(engines/overlay/shaders/edit_mesh_ghost_clear_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_analysis_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_analysis_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_mix_occlude_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_skin_root_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/edit_mesh_vert.glsl SRC)
+data_to_c_simple(engines/overlay/shaders/extra_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/facing_frag.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/facing_vert.glsl SRC)
 data_to_c_simple(engines/overlay/shaders/grid_frag.glsl SRC)
diff --git a/source/blender/draw/engines/overlay/overlay_edit_mesh.c b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
index 9a88f79c814..49282434da4 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_mesh.c
+++ b/source/blender/draw/engines/overlay/overlay_edit_mesh.c
@@ -187,13 +187,14 @@ void OVERLAY_edit_mesh_cache_init(OVERLAY_Data *vedata)
     /* Faces */
     /* Cage geom needs to be offsetted to avoid Z-fighting. */
     for (int j = 0; j < 2; j++) {
-      DRWPass **pass = (j == 0) ? &psl->edit_mesh_faces_ps[i] : &psl->edit_mesh_faces_cage_ps[i];
+      DRWPass **edit_face_ps = (j == 0) ? &psl->edit_mesh_faces_ps[i] :
+                                          &psl->edit_mesh_faces_cage_ps[i];
       DRWShadingGroup **shgrp = (j == 0) ? &pd->edit_mesh_faces_grp[i] :
                                            &pd->edit_mesh_faces_cage_grp[i];
       state = state_common;
-      DRW_PASS_CREATE(*pass, state | pd->clipping_state);
+      DRW_PASS_CREATE(*edit_face_ps, state | pd->clipping_state);
 
-      grp = *shgrp = DRW_shgroup_create(face_sh, *pass);
+      grp = *shgrp = DRW_shgroup_create(face_sh, *edit_face_ps);
       DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
       DRW_shgroup_uniform_float_copy(grp, "faceAlphaMod", face_alpha);
       DRW_shgroup_uniform_ivec4(grp, "dataMask", mask, 1);
diff --git a/source/blender/draw/engines/overlay/overlay_engine.c b/source/blender/draw/engines/overlay/overlay_engine.c
index 65505e6aeeb..49c1d34604e 100644
--- a/source/blender/draw/engines/overlay/overlay_engine.c
+++ b/source/blender/draw/engines/overlay/overlay_engine.c
@@ -149,6 +149,7 @@ static void OVERLAY_cache_init(void *vedata)
       BLI_assert(!"Draw mode invalid");
       break;
   }
+  OVERLAY_extra_cache_init(vedata);
   OVERLAY_grid_cache_init(vedata);
   OVERLAY_facing_cache_init(vedata);
   OVERLAY_outline_cache_init(vedata);
@@ -224,6 +225,7 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
         break;
     }
   }
+
   // if (is_geom) {
   //   if (paint_vertex_mode) {
   //     OVERLAY_paint_vertex_cache_populate();
@@ -238,33 +240,25 @@ static void OVERLAY_cache_populate(void *vedata, Object *ob)
   //     OVERLAY_wireframe_cache_populate();
   //   }
   // }
-  // /* Non-Meshes */
-  // switch (ob->type) {
-  //   case OB_ARMATURE:
-  //     OVERLAY_armature_cache_populate();
-  //     break;
-  //   case OB_EMPTY:
-  //     OVERLAY_empty_cache_populate();
-  //     break;
-  //   case OB_MBALL:
-  //     OVERLAY_mball_cache_populate();
-  //     break;
-  //   case OB_LAMP:
-  //     OVERLAY_lamp_cache_populate();
-  //     break;
-  //   case OB_CAMERA:
-  //     OVERLAY_camera_cache_populate();
-  //     break;
-  //   case OB_SPEAKER:
-  //     OVERLAY_speaker_cache_populate();
-  //     break;
-  //   case OB_LIGHTPROBE:
-  //     OVERLAY_lightprobe_cache_populate();
-  //     break;
-  //   case OB_FONT:
-  //     OVERLAY_font_cache_populate();
-  //     break;
-  // }
+  /* Non-Meshes */
+  switch (ob->type) {
+    // case OB_ARMATURE:
+    //   OVERLAY_armature_cache_populate();
+    //   break;
+    // case OB_MBALL:
+    //   OVERLAY_mball_cache_populate();
+    //   break;
+    // case OB_FONT:
+    //   OVERLAY_font_cache_populate();
+    //   break;
+    case OB_EMPTY:
+    case OB_LAMP:
+    case OB_CAMERA:
+    case OB_SPEAKER:
+    case OB_LIGHTPROBE:
+      OVERLAY_extra_cache_populate(vedata, ob, dupli, init);
+      break;
+  }
   // if (draw_extra) {
   //   OVERLAY_extra_cache_populate();
   // }
@@ -281,6 +275,7 @@ static void OVERLAY_draw_scene(void *vedata)
 
   OVERLAY_facing_draw(vedata);
   OVERLAY_wireframe_draw(vedata);
+  OVERLAY_extra_draw(vedata);
   OVERLAY_grid_draw(vedata);
   OVERLAY_outline_draw(vedata);
 
diff --git a/source/blender/draw/engines/overlay/overlay_extra.c b/source/blender/draw/engines/overlay/overlay_extra.c
new file mode 100644
index 00000000000..6605ef9ca22
--- /dev/null
+++ b/source/blender/draw/engines/overlay/overlay_extra.c
@@ -0,0 +1,530 @@
+/*
+ * 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.
+ *
+ * Copyright 2019, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "UI_resources.h"
+
+#include "overlay_private.h"
+
+#include "draw_common.h"
+
+void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
+{
+  OVERLAY_PassList *psl = vedata->psl;
+  OVERLAY_PrivateData *pd = vedata->stl->pd;
+
+  for (int i = 0; i < 2; i++) {
+    /* Non Meshes Pass (Camera, empties, lights ...) */
+    // struct GPUBatch *geom;
+    struct GPUShader *sh;
+    struct GPUVertFormat *format;
+    DRWShadingGroup *grp, *grp_sub;
+    float pixelsize = *DRW_viewport_pixelsize_get() * U.pixelsize;
+
+    const GlobalsUboStorage *gb = &G_draw.block;
+    OVERLAY_InstanceFormats *formats = OVERLAY_shader_instance_formats_get();
+    OVERLAY_ExtraCallBuffers *cb = &pd->extra_call_buffers[i];
+    DRWPass **p_extra_ps = &psl->extra_ps[i];
+
+    DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_LESS_EQUAL;
+    DRW_PASS_CREATE(*p_extra_ps, state | pd->clipping_state);
+
+    DRWPass *extra_ps = *p_extra_ps;
+
+    const DRWContextState *draw_ctx = DRW_context_state_get();
+    const eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+
+#if 0
+    /* Empties */
+    empties_callbuffers_create(cb->non_meshes, &cb->empties, draw_ctx->sh_cfg);
+
+    /* Force Field */
+    geom = DRW_cache_field_wind_get();
+    cb->field_wind = buffer_instance_scaled(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_field_force_get();
+    cb->field_force = buffer_instance_screen_aligned(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_field_vortex_get();
+    cb->field_vortex = buffer_instance_scaled(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_screenspace_circle_get();
+    cb->field_curve_sta = buffer_instance_screen_aligned(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    /* Grease Pencil */
+    geom = DRW_cache_gpencil_axes_get();
+    cb->gpencil_axes = buffer_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    /* Speaker */
+    geom = DRW_cache_speaker_get();
+    cb->speaker = buffer_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    /* Probe */
+    static float probeSize = 14.0f;
+    geom = DRW_cache_lightprobe_cube_get();
+    cb->probe_cube = buffer_instance_screenspace(
+        cb->non_meshes, geom, &probeSize, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_lightprobe_grid_get();
+    cb->probe_grid = buffer_instance_screenspace(
+        cb->non_meshes, geom, &probeSize, draw_ctx->sh_cfg);
+
+    static float probePlanarSize = 20.0f;
+    geom = DRW_cache_lightprobe_planar_get();
+    cb->probe_planar = buffer_instance_screenspace(
+        cb->non_meshes, geom, &probePlanarSize, draw_ctx->sh_cfg);
+
+    /* Camera */
+    geom = DRW_cache_camera_get();
+    cb->camera = buffer_camera_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_camera_frame_get();
+    cb->camera_frame = buffer_camera_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_camera_tria_get();
+    cb->camera_tria = buffer_camera_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_plain_axes_get();
+    cb->camera_focus = buffer_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_single_line_get();
+    cb->camera_clip = buffer_distance_lines_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+    cb->camera_mist = buffer_distance_lines_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_single_line_endpoints_get();
+    cb->camera_clip_points = buffer_distance_lines_instance(
+        cb->non_meshes, geom, draw_ctx->sh_cfg);
+    cb->camera_mist_points = buffer_distance_lines_instance(
+        cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_quad_wires_get();
+    cb->camera_stereo_plane_wires = buffer_instance(cb->non_meshes, geom, draw_ctx->sh_cfg);
+
+    geom = DRW_cache_em

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list