Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/view3d_draw.c
| Show First 20 Lines • Show All 813 Lines • ▼ Show 20 Lines | void ED_view3d_draw_depth(Depsgraph *depsgraph, ARegion *region, View3D *v3d, bool alphaoverride) | ||||
| rv3d->rflag |= RV3D_ZOFFSET_DISABLED; | rv3d->rflag |= RV3D_ZOFFSET_DISABLED; | ||||
| GPU_depth_test(true); | GPU_depth_test(true); | ||||
| /* Needed in cases the view-port isn't already setup. */ | /* Needed in cases the view-port isn't already setup. */ | ||||
| WM_draw_region_viewport_ensure(region, SPACE_VIEW3D); | WM_draw_region_viewport_ensure(region, SPACE_VIEW3D); | ||||
| WM_draw_region_viewport_bind(region); | WM_draw_region_viewport_bind(region); | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, 0); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| /* When Blender is starting, a click event can trigger a depth test while the viewport is not | /* When Blender is starting, a click event can trigger a depth test while the viewport is not | ||||
| * yet available. */ | * yet available. */ | ||||
| if (viewport != NULL) { | if (viewport != NULL) { | ||||
| DRW_draw_depth_loop(depsgraph, region, v3d, viewport, false); | DRW_draw_depth_loop(depsgraph, region, v3d, viewport, false); | ||||
| } | } | ||||
| WM_draw_region_viewport_unbind(region); | WM_draw_region_viewport_unbind(region); | ||||
| ▲ Show 20 Lines • Show All 1,243 Lines • ▼ Show 20 Lines | |||||
| void ED_view3d_backbuf_depth_validate(ViewContext *vc) | void ED_view3d_backbuf_depth_validate(ViewContext *vc) | ||||
| { | { | ||||
| if (vc->v3d->flag & V3D_INVALID_BACKBUF) { | if (vc->v3d->flag & V3D_INVALID_BACKBUF) { | ||||
| ARegion *region = vc->region; | ARegion *region = vc->region; | ||||
| Object *obact_eval = DEG_get_evaluated_object(vc->depsgraph, vc->obact); | Object *obact_eval = DEG_get_evaluated_object(vc->depsgraph, vc->obact); | ||||
| if (obact_eval && ((obact_eval->base_flag & BASE_VISIBLE_DEPSGRAPH) != 0)) { | if (obact_eval && ((obact_eval->base_flag & BASE_VISIBLE_DEPSGRAPH) != 0)) { | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, 0); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| DRW_draw_depth_object(vc->region, vc->v3d, viewport, obact_eval); | DRW_draw_depth_object(vc->region, vc->v3d, viewport, obact_eval); | ||||
| } | } | ||||
| vc->v3d->flag &= ~V3D_INVALID_BACKBUF; | vc->v3d->flag &= ~V3D_INVALID_BACKBUF; | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| ▲ Show 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | else if (d->w != w || d->h != h || d->x != x || d->y != y || d->depths == NULL) { | ||||
| } | } | ||||
| d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths Subset"); | d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths Subset"); | ||||
| d->damaged = true; | d->damaged = true; | ||||
| } | } | ||||
| if (d->damaged) { | if (d->damaged) { | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, 0); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| view3d_opengl_read_Z_pixels(viewport, rect, d->depths); | view3d_opengl_read_Z_pixels(viewport, rect, d->depths); | ||||
| glGetDoublev(GL_DEPTH_RANGE, d->depth_range); | glGetDoublev(GL_DEPTH_RANGE, d->depth_range); | ||||
| d->damaged = false; | d->damaged = false; | ||||
| } | } | ||||
| } | } | ||||
| /* Note, with nouveau drivers the glReadPixels() is very slow. [#24339]. */ | /* Note, with nouveau drivers the glReadPixels() is very slow. [#24339]. */ | ||||
| void ED_view3d_depth_update(ARegion *region) | void ED_view3d_depth_update(ARegion *region) | ||||
| Show All 12 Lines | if (d->w != region->winx || d->h != region->winy || !d->depths) { | ||||
| if (d->depths) { | if (d->depths) { | ||||
| MEM_freeN(d->depths); | MEM_freeN(d->depths); | ||||
| } | } | ||||
| d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths"); | d->depths = MEM_mallocN(sizeof(float) * d->w * d->h, "View depths"); | ||||
| d->damaged = true; | d->damaged = true; | ||||
| } | } | ||||
| if (d->damaged) { | if (d->damaged) { | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, 0); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| rcti r = { | rcti r = { | ||||
| .xmin = 0, | .xmin = 0, | ||||
| .xmax = d->w, | .xmax = d->w, | ||||
| .ymin = 0, | .ymin = 0, | ||||
| .ymax = d->h, | .ymax = d->h, | ||||
| }; | }; | ||||
| view3d_opengl_read_Z_pixels(viewport, &r, d->depths); | view3d_opengl_read_Z_pixels(viewport, &r, d->depths); | ||||
| glGetDoublev(GL_DEPTH_RANGE, d->depth_range); | glGetDoublev(GL_DEPTH_RANGE, d->depth_range); | ||||
| Show All 30 Lines | |||||
| { | { | ||||
| /* Setup view matrix. */ | /* Setup view matrix. */ | ||||
| ED_view3d_draw_setup_view(NULL, depsgraph, scene, region, v3d, NULL, NULL, NULL); | ED_view3d_draw_setup_view(NULL, depsgraph, scene, region, v3d, NULL, NULL, NULL); | ||||
| GPU_clear(GPU_DEPTH_BIT); | GPU_clear(GPU_DEPTH_BIT); | ||||
| GPU_depth_test(true); | GPU_depth_test(true); | ||||
| GPUViewport *viewport = WM_draw_region_get_viewport(region, 0); | GPUViewport *viewport = WM_draw_region_get_viewport(region); | ||||
| DRW_draw_depth_loop_gpencil(depsgraph, region, v3d, viewport); | DRW_draw_depth_loop_gpencil(depsgraph, region, v3d, viewport); | ||||
| GPU_depth_test(false); | GPU_depth_test(false); | ||||
| } | } | ||||
| /* *********************** customdata **************** */ | /* *********************** customdata **************** */ | ||||
| void ED_view3d_datamask(const bContext *C, | void ED_view3d_datamask(const bContext *C, | ||||
| ▲ Show 20 Lines • Show All 193 Lines • Show Last 20 Lines | |||||