diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-03-27 16:52:13 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-03-27 16:53:15 +0300 |
commit | 27b73f0c5b8ba23e069abf107716929f106969b8 (patch) | |
tree | 204612cb979a12365892a31ae3c02c6047c4725c /source/blender/editors/space_view3d | |
parent | c87e467e390ab97ed156ee0aa5cf22eb26ae78a7 (diff) |
GPencil: Remove legacy `ED_gpencil_draw_view3d` code.
Differential Revision: https://developer.blender.org/D4598
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw_legacy.c | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index 30d8c00e7b5..454315afa57 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -95,6 +95,7 @@ #include "GPU_select.h" #include "GPU_matrix.h" #include "GPU_state.h" +#include "GPU_viewport.h" #include "RE_engine.h" @@ -226,10 +227,25 @@ void view3d_opengl_read_pixels(ARegion *ar, int x, int y, int w, int h, int form glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data); } -/* XXX depth reading exception, for code not using gpu offscreen */ -static void view3d_opengl_read_Z_pixels(ARegion *ar, int x, int y, int w, int h, int format, int type, void *data) +/* TODO: Creating, attaching texture, and destroying a framebuffer is quite slow. + * Calling this function should be avoided during interactive drawing. */ +static void view3d_opengl_read_Z_pixels(GPUViewport *viewport, rcti *rect, void *data) { - glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data); + DefaultTextureList *dtxl = (DefaultTextureList *)GPU_viewport_texture_list_get(viewport); + + GPUFrameBuffer *tmp_fb = GPU_framebuffer_create(); + GPU_framebuffer_texture_attach(tmp_fb, dtxl->depth, 0, 0); + GPU_framebuffer_bind(tmp_fb); + glDisable(GL_SCISSOR_TEST); + + glReadPixels(rect->xmin, rect->ymin, + BLI_rcti_size_x(rect), BLI_rcti_size_y(rect), + GL_DEPTH_COMPONENT, GL_FLOAT, data); + + glEnable(GL_SCISSOR_TEST); + GPU_framebuffer_restore(); + + GPU_framebuffer_free(tmp_fb); } void ED_view3d_select_id_validate_with_select_mode(ViewContext *vc, short select_mode) @@ -745,7 +761,6 @@ void ED_view3d_draw_bgpic_test( /* *********************** */ -/* XXX warning, not using gpu offscreen here */ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) { /* clamp rect by region */ @@ -796,8 +811,8 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect) } if (d->damaged) { - /* XXX using special function here, it doesn't use the gpu offscreen system */ - view3d_opengl_read_Z_pixels(ar, d->x, d->y, d->w, d->h, GL_DEPTH_COMPONENT, GL_FLOAT, d->depths); + GPUViewport *viewport = WM_draw_region_get_viewport(ar, 0); + view3d_opengl_read_Z_pixels(viewport, rect, d->depths); glGetDoublev(GL_DEPTH_RANGE, d->depth_range); d->damaged = false; } @@ -863,8 +878,6 @@ float view3d_depth_near(ViewDepths *d) void ED_view3d_draw_depth_gpencil( Depsgraph *depsgraph, Scene *scene, ARegion *ar, View3D *v3d) { - ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph); - /* Setup view matrix. */ ED_view3d_draw_setup_view(NULL, depsgraph, scene, ar, v3d, NULL, NULL, NULL); @@ -872,7 +885,8 @@ void ED_view3d_draw_depth_gpencil( GPU_depth_test(true); - ED_gpencil_draw_view3d(NULL, scene, view_layer, depsgraph, v3d, ar, true); + GPUViewport *viewport = WM_draw_region_get_viewport(ar, 0); + DRW_draw_depth_loop_gpencil(depsgraph, ar, v3d, viewport); GPU_depth_test(false); } |