Changeset View
Changeset View
Standalone View
Standalone View
source/blender/gpu/intern/gpu_viewport.c
| Show First 20 Lines • Show All 339 Lines • ▼ Show 20 Lines | void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect) | ||||
| DefaultFramebufferList *dfbl = viewport->fbl; | DefaultFramebufferList *dfbl = viewport->fbl; | ||||
| DefaultTextureList *dtxl = viewport->txl; | DefaultTextureList *dtxl = viewport->txl; | ||||
| int fbl_len, txl_len; | int fbl_len, txl_len; | ||||
| /* add one pixel because of scissor test */ | /* add one pixel because of scissor test */ | ||||
| int rect_w = BLI_rcti_size_x(rect) + 1; | int rect_w = BLI_rcti_size_x(rect) + 1; | ||||
| int rect_h = BLI_rcti_size_y(rect) + 1; | int rect_h = BLI_rcti_size_y(rect) + 1; | ||||
| DRW_opengl_context_enable(); | |||||
| if (dfbl->default_fb) { | if (dfbl->default_fb) { | ||||
| if (rect_w != viewport->size[0] || rect_h != viewport->size[1] || U.ogl_multisamples != viewport->samples) { | if (rect_w != viewport->size[0] || rect_h != viewport->size[1] || U.ogl_multisamples != viewport->samples) { | ||||
| gpu_viewport_buffers_free( | gpu_viewport_buffers_free( | ||||
| (FramebufferList *)viewport->fbl, default_fbl_len, | (FramebufferList *)viewport->fbl, default_fbl_len, | ||||
| (TextureList *)viewport->txl, default_txl_len); | (TextureList *)viewport->txl, default_txl_len); | ||||
| for (LinkData *link = viewport->data.first; link; link = link->next) { | for (LinkData *link = viewport->data.first; link; link = link->next) { | ||||
| ViewportEngineData *data = link->data; | ViewportEngineData *data = link->data; | ||||
| ▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | |||||
| void GPU_viewport_unbind(GPUViewport *viewport) | void GPU_viewport_unbind(GPUViewport *viewport) | ||||
| { | { | ||||
| DefaultFramebufferList *dfbl = viewport->fbl; | DefaultFramebufferList *dfbl = viewport->fbl; | ||||
| if (dfbl->default_fb) { | if (dfbl->default_fb) { | ||||
| GPU_framebuffer_texture_unbind(NULL, NULL); | GPU_framebuffer_texture_unbind(NULL, NULL); | ||||
| GPU_framebuffer_restore(); | GPU_framebuffer_restore(); | ||||
| } | |||||
| DRW_opengl_context_disable(); | |||||
| if (dfbl->default_fb) { | |||||
| glEnable(GL_SCISSOR_TEST); | glEnable(GL_SCISSOR_TEST); | ||||
| glDisable(GL_DEPTH_TEST); | glDisable(GL_DEPTH_TEST); | ||||
| } | } | ||||
brecht: `DRW_opengl_context_disable()` should be after the `glEnable` / `glDisable` I think? At least… | |||||
| } | } | ||||
| void GPU_viewport_draw_to_screen(GPUViewport *viewport, const rcti *rect) | void GPU_viewport_draw_to_screen(GPUViewport *viewport, const rcti *rect) | ||||
| { | { | ||||
| DefaultFramebufferList *dfbl = viewport->fbl; | DefaultFramebufferList *dfbl = viewport->fbl; | ||||
| if (dfbl->default_fb) { | if (dfbl->default_fb) { | ||||
| /* This might be bandwidth limiting */ | /* This might be bandwidth limiting */ | ||||
| ▲ Show 20 Lines • Show All 159 Lines • Show Last 20 Lines | |||||
DRW_opengl_context_disable() should be after the glEnable / glDisable I think? At least GPU_viewport_bind() doesn't seem to do any OpenGL state changes before calling DRW_opengl_context_enable().