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

This reverts commit 40f8f445a3.

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

Fix T62965
This commit is contained in:
Jeroen Bakker 2019-03-26 15:06:29 +01:00
parent fb96dcd713
commit 33a759a39c
Notes: blender-bot 2023-02-14 03:13:26 +01:00
Referenced by issue #62965, Blender 2.80 Close when try weigth paint a simple cube
3 changed files with 10 additions and 12 deletions

View File

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

View File

@ -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);
}
/** \} */

View File

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