[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