[Bf-blender-cvs] [33a759a39c9] master: Revert "DRW Manager: create and use new DRW_framebuffer_depth_read utility."

Jeroen Bakker noreply at git.blender.org
Tue Mar 26 15:09:30 CET 2019


Commit: 33a759a39c9493dd2c89068107e697e0d84a81b2
Author: Jeroen Bakker
Date:   Tue Mar 26 15:06:29 2019 +0100
Branches: master
https://developer.blender.org/rB33a759a39c9493dd2c89068107e697e0d84a81b2

Revert "DRW Manager: create and use new DRW_framebuffer_depth_read utility."

This reverts commit 40f8f445a3f9b6bc24b58e45be46060cc36c0394.

There are many paths that lead to uninitialized depth buffer where the
depth read would fail.

Fix T62965

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

M	source/blender/draw/DRW_engine.h
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/space_view3d/view3d_draw_legacy.c

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

diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 94d1bc61b57..68d4ef04f95 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -126,7 +126,6 @@ void DRW_draw_depth_loop(
 void DRW_framebuffer_select_id_setup(struct ARegion *ar, const bool clear);
 void DRW_framebuffer_select_id_release(struct ARegion *ar);
 void DRW_framebuffer_select_id_read(const struct rcti *rect, uint *r_buf);
-void DRW_framebuffer_depth_read(const struct rcti *rect, float *r_buf);
 
 /* grease pencil render */
 bool DRW_render_check_grease_pencil(struct Depsgraph *depsgraph);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 4ecfb903a78..64e9b1a4259 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2511,14 +2511,6 @@ void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf)
 	        g_select_buffer.texture_u32, GPU_DATA_UNSIGNED_INT, rect, r_buf);
 }
 
-
-/* Read a block of pixels from the depth frame buffer. */
-void DRW_framebuffer_depth_read(const rcti *rect, float *r_buf)
-{
-	GPU_texture_read_rect(
-	        g_select_buffer.texture_depth, GPU_DATA_FLOAT, rect, r_buf);
-}
-
 /** \} */
 
 
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 3822176b7d5..30d8c00e7b5 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -226,6 +226,12 @@ 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)
+{
+	glReadPixels(ar->winrct.xmin + x, ar->winrct.ymin + y, w, h, format, type, data);
+}
+
 void ED_view3d_select_id_validate_with_select_mode(ViewContext *vc, short select_mode)
 {
 	/* TODO: Create a flag in `DRW_manager` because the drawing is no longer
@@ -739,6 +745,7 @@ 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 */
@@ -789,14 +796,14 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
 	}
 
 	if (d->damaged) {
-		DRW_framebuffer_depth_read(rect, d->depths);
+		/* 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);
 		glGetDoublev(GL_DEPTH_RANGE, d->depth_range);
 		d->damaged = false;
 	}
 }
 
-/* note, with nouveau drivers the glReadPixels() is very slow. [#24339]
- * XXX warning, not using gpu offscreen here */
+/* note, with nouveau drivers the glReadPixels() is very slow. [#24339] */
 void ED_view3d_depth_update(ARegion *ar)
 {
 	RegionView3D *rv3d = ar->regiondata;



More information about the Bf-blender-cvs mailing list