Blender
V3.3
|
#include <string.h>
#include "BLI_math_vector.h"
#include "BLI_rect.h"
#include "BKE_colortools.h"
#include "IMB_colormanagement.h"
#include "DNA_vec_types.h"
#include "GPU_capabilities.h"
#include "GPU_framebuffer.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "GPU_texture.h"
#include "GPU_uniform_buffer.h"
#include "GPU_viewport.h"
#include "DRW_engine.h"
#include "MEM_guardedalloc.h"
Go to the source code of this file.
Classes | |
struct | GPUViewportBatch |
struct | GPUViewport |
Enumerations | |
enum | { DO_UPDATE = (1 << 0) , GPU_VIEWPORT_STEREO = (1 << 1) } |
Variables | |
struct { | |
GPUVertFormat format | |
struct { | |
uint pos | |
uint tex_coord | |
} attr_id | |
} | g_viewport = {{0}} |
System that manages viewport drawing.
Definition in file gpu_viewport.c.
anonymous enum |
Enumerator | |
---|---|
DO_UPDATE | |
GPU_VIEWPORT_STEREO |
Definition at line 81 of file gpu_viewport.c.
int GPU_viewport_active_view_get | ( | GPUViewport * | viewport | ) |
Definition at line 549 of file gpu_viewport.c.
References GPUViewport::active_view.
Referenced by drw_manager_init(), and DRW_view_data_default_lists_from_viewport().
Definition at line 346 of file gpu_viewport.c.
References copy_v2_fl2(), g_viewport, GPU_batch_create_ex(), GPU_BATCH_OWNS_VBO, GPU_PRIM_TRI_STRIP, GPU_vertbuf_attr_get_raw_data(), GPU_vertbuf_create_with_format, GPU_vertbuf_data_alloc(), GPU_vertbuf_raw_step(), gpu_viewport_batch_format(), NULL, rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.
Referenced by gpu_viewport_batch_get().
|
static |
Definition at line 334 of file gpu_viewport.c.
References g_viewport, GPU_COMP_F32, GPU_FETCH_FLOAT, and GPU_vertformat_attr_add().
Referenced by gpu_viewport_batch_create().
|
static |
Definition at line 391 of file gpu_viewport.c.
References GPUViewportBatch::batch, GPUViewport::batch, GPU_batch_discard(), and NULL.
Referenced by GPU_viewport_free().
|
static |
Definition at line 368 of file gpu_viewport.c.
References GPUViewportBatch::batch, GPUViewport::batch, BLI_rctf_compare(), GPU_batch_discard(), gpu_viewport_batch_create(), GPUViewportBatch::last_used_parameters, NULL, GPUViewportBatch::rect_pos, and GPUViewportBatch::rect_uv.
Referenced by gpu_viewport_draw_colormanaged().
void GPU_viewport_bind | ( | GPUViewport * | viewport, |
int | view, | ||
const rcti * | rect | ||
) |
Definition at line 170 of file gpu_viewport.c.
References GPUViewport::active_view, BLI_rcti_size_x(), BLI_rcti_size_y(), copy_v2_v2_int(), DRW_opengl_context_enable(), equals_v2v2_int(), gpu_viewport_textures_create(), gpu_viewport_textures_free(), rect_size(), GPUViewport::size, and view.
Referenced by sequencer_ibuf_get(), and wm_draw_region_bind().
void GPU_viewport_bind_from_offscreen | ( | GPUViewport * | viewport, |
struct GPUOffScreen * | ofs, | ||
bool | is_xr_surface | ||
) |
Should be called from DRW after DRW_opengl_context_enable.
Definition at line 188 of file gpu_viewport.c.
References color, GPUViewport::depth_tx, fb(), GPU_offscreen_height(), GPU_offscreen_viewport_data_get(), GPU_offscreen_width(), gpu_viewport_textures_create(), gpu_viewport_textures_free(), and GPUViewport::size.
Referenced by DRW_draw_render_loop_offscreen().
GPUTexture* GPU_viewport_color_texture | ( | GPUViewport * | viewport, |
int | view | ||
) |
Definition at line 559 of file gpu_viewport.c.
References GPUViewport::color_render_tx, and view.
Referenced by drw_manager_init(), DRW_view_data_default_lists_from_viewport(), and wm_draw_region_texture().
void GPU_viewport_colorspace_set | ( | GPUViewport * | viewport, |
ColorManagedViewSettings * | view_settings, | ||
const ColorManagedDisplaySettings * | display_settings, | ||
float | dither | ||
) |
HACK(fclem): We copy the settings here to avoid use after free if an update frees the scene and the viewport stays cached (see T75443). But this means the OCIO curve-mapping caching (which is based on CurveMap pointer address) cannot operate correctly and it will create a different OCIO processor for each viewport. We try to only reallocate the curve-map copy if needed to avoid unneeded cache invalidation.
Definition at line 213 of file gpu_viewport.c.
References BKE_color_managed_display_settings_copy(), BKE_color_managed_view_settings_copy(), BKE_color_managed_view_settings_free(), BKE_curvemapping_copy(), CurveMapping::changed_timestamp, ColorManagedViewSettings::curve_mapping, GPUViewport::display_settings, GPUViewport::dither, GPUViewport::do_color_management, NULL, GPUViewport::orig_curve_mapping, and GPUViewport::view_settings.
Referenced by blender::draw::color_management::viewport_settings_apply().
GPUViewport* GPU_viewport_create | ( | void | ) |
Definition at line 98 of file gpu_viewport.c.
References GPUViewport::active_view, GPUViewport::do_color_management, MEM_callocN, and GPUViewport::size.
Referenced by DRW_draw_render_loop_offscreen(), GPU_viewport_stereo_create(), pygpu_offscreen_draw_view3d(), wm_draw_region_buffer_create(), and wm_xr_session_surface_offscreen_ensure().
struct DRWData** GPU_viewport_data_get | ( | GPUViewport * | viewport | ) |
Definition at line 114 of file gpu_viewport.c.
References GPUViewport::draw_data.
Referenced by drw_viewport_data_ensure().
GPUTexture* GPU_viewport_depth_texture | ( | GPUViewport * | viewport | ) |
Definition at line 569 of file gpu_viewport.c.
References GPUViewport::depth_tx.
Referenced by DRW_draw_depth_loop(), DRW_draw_depth_object(), DRW_view_data_default_lists_from_viewport(), gizmo_find_intersected_3d(), view3d_depths_create(), and view3d_opengl_read_Z_pixels().
bool GPU_viewport_do_update | ( | GPUViewport * | viewport | ) |
Definition at line 91 of file gpu_viewport.c.
References DO_UPDATE, GPUViewport::flag, and ret.
Referenced by drw_notify_view_update_offscreen(), and wm_region_test_render_do_draw().
|
static |
Definition at line 401 of file gpu_viewport.c.
References batch, color, GPUViewport::color_overlay_tx, GPUViewport::color_render_tx, GPUViewport::display_settings, GPUViewport::dither, GPUViewport::do_color_management, GPU_batch_draw(), GPU_batch_program_set_builtin(), GPU_batch_program_set_imm_shader(), GPU_batch_uniform_1i, GPU_SHADER_2D_IMAGE_OVERLAYS_MERGE, GPU_texture_bind(), GPU_texture_unbind(), gpu_viewport_batch_get(), GPUBatch, IMB_colormanagement_finish_glsl_draw(), IMB_colormanagement_setup_glsl_draw_from_space(), immVertexFormat(), NULL, view, and GPUViewport::view_settings.
Referenced by GPU_viewport_draw_to_screen_ex(), and GPU_viewport_unbind_from_offscreen().
void GPU_viewport_draw_to_screen | ( | GPUViewport * | viewport, |
int | view, | ||
const rcti * | rect | ||
) |
Merge and draw the buffers of viewport into the currently active framebuffer, performing color transform to display space.
rect | Coordinates to draw into. By swapping min and max values, drawing can be done with inversed axis coordinates (upside down or sideways). |
Definition at line 503 of file gpu_viewport.c.
References GPU_viewport_draw_to_screen_ex(), and view.
Referenced by wm_draw_region_blit().
void GPU_viewport_draw_to_screen_ex | ( | GPUViewport * | viewport, |
int | view, | ||
const rcti * | rect, | ||
bool | display_colorspace, | ||
bool | do_overlay_merge | ||
) |
Version of GPU_viewport_draw_to_screen() that lets caller decide if display colorspace transform should be performed.
Definition at line 451 of file gpu_viewport.c.
References BLI_assert, BLI_rcti_sanitize(), BLI_rcti_size_x(), BLI_rcti_size_y(), color, GPUViewport::color_render_tx, float(), GPU_texture_height(), GPU_texture_width(), gpu_viewport_draw_colormanaged(), NULL, SWAP, view, w(), rctf::xmax, rcti::xmin, rctf::xmin, rctf::ymax, rcti::ymin, and rctf::ymin.
Referenced by GPU_viewport_draw_to_screen(), and wm_xr_draw_viewport_buffers_to_active_framebuffer().
GPUFrameBuffer* GPU_viewport_framebuffer_overlay_get | ( | GPUViewport * | viewport | ) |
Overlay frame-buffer for drawing outside of DRW module.
Definition at line 574 of file gpu_viewport.c.
References GPUViewport::overlay_fb.
Referenced by draw_timeline_seq(), blender::ed::space_node::node_draw_space(), and sequencer_draw_preview().
void GPU_viewport_free | ( | GPUViewport * | viewport | ) |
Must be executed inside Draw-manager OpenGL Context.
Definition at line 585 of file gpu_viewport.c.
References BKE_color_managed_view_settings_free(), GPUViewport::draw_data, DRW_viewport_data_free(), gpu_viewport_batch_free(), gpu_viewport_textures_free(), MEM_freeN, and GPUViewport::view_settings.
Referenced by BPyGPUOffScreen__tp_dealloc(), DRW_draw_render_loop_offscreen(), gpu_viewport_textures_create(), pygpu_offscreen_free(), wm_draw_region_buffer_free(), wm_xr_session_surface_free_data(), and wm_xr_session_surface_offscreen_ensure().
bool GPU_viewport_is_stereo_get | ( | GPUViewport * | viewport | ) |
Definition at line 554 of file gpu_viewport.c.
References GPUViewport::flag, and GPU_VIEWPORT_STEREO.
Referenced by DRW_notify_view_update(), and drw_notify_view_update_offscreen().
GPUTexture* GPU_viewport_overlay_texture | ( | GPUViewport * | viewport, |
int | view | ||
) |
Definition at line 564 of file gpu_viewport.c.
References GPUViewport::color_overlay_tx, and view.
Referenced by DRW_view_data_default_lists_from_viewport().
void GPU_viewport_stereo_composite | ( | GPUViewport * | viewport, |
Stereo3dFormat * | stereo_format | ||
) |
Merge the stereo textures. color
and overlay
texture will be modified.
Definition at line 259 of file gpu_viewport.c.
References Stereo3dFormat::anaglyph_type, GPUViewport::color_overlay_tx, GPUViewport::color_render_tx, Stereo3dFormat::display_mode, ELEM, Stereo3dFormat::flag, GPU_color_mask(), GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_framebuffer_bind(), GPU_framebuffer_restore(), GPU_matrix_identity_projection_set(), GPU_matrix_identity_set(), GPU_matrix_pop(), GPU_matrix_pop_projection(), GPU_matrix_push(), GPU_matrix_push_projection(), GPU_PRIM_TRI_STRIP, GPU_SHADER_2D_IMAGE_OVERLAYS_STEREO_MERGE, GPU_texture_bind(), GPU_texture_unbind(), GPU_vertformat_attr_add(), immBegin(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniform1i(), immVertex2f(), immVertexFormat(), Stereo3dFormat::interlace_type, pos, S3D_ANAGLYPH_GREENMAGENTA, S3D_ANAGLYPH_REDCYAN, S3D_ANAGLYPH_YELLOWBLUE, S3D_DISPLAY_ANAGLYPH, S3D_DISPLAY_INTERLACE, S3D_INTERLACE_SWAP, SET_FLAG_FROM_TEST, and GPUViewport::stereo_comp_fb.
Referenced by wm_draw_window_offscreen().
GPUViewport* GPU_viewport_stereo_create | ( | void | ) |
Definition at line 107 of file gpu_viewport.c.
References GPUViewport::flag, GPU_viewport_create(), and GPU_VIEWPORT_STEREO.
Referenced by wm_draw_region_buffer_create().
void GPU_viewport_tag_update | ( | GPUViewport * | viewport | ) |
Definition at line 86 of file gpu_viewport.c.
References DO_UPDATE, and GPUViewport::flag.
Referenced by DRW_viewport_request_redraw(), pygpu_offscreen_draw_view3d(), and wm_draw_region_bind().
|
static |
Definition at line 119 of file gpu_viewport.c.
References GPUViewport::color_overlay_tx, GPUViewport::color_render_tx, GPUViewport::depth_tx, GPUViewport::flag, GPU_clear_viewport_workaround(), GPU_DATA_FLOAT, GPU_DEPTH24_STENCIL8, GPU_RGBA16F, GPU_SRGB8_A8, GPU_texture_clear(), GPU_texture_create_2d(), GPU_viewport_free(), GPU_VIEWPORT_STEREO, NULL, size(), GPUViewport::size, and UNPACK2.
Referenced by GPU_viewport_bind(), and GPU_viewport_bind_from_offscreen().
|
static |
Definition at line 157 of file gpu_viewport.c.
References GPUViewport::color_overlay_tx, GPUViewport::color_render_tx, GPUViewport::depth_tx, GPU_TEXTURE_FREE_SAFE, GPUViewport::overlay_fb, and GPUViewport::stereo_comp_fb.
Referenced by GPU_viewport_bind(), GPU_viewport_bind_from_offscreen(), and GPU_viewport_free().
void GPU_viewport_unbind | ( | GPUViewport * | UNUSEDviewport | ) |
Definition at line 543 of file gpu_viewport.c.
References DRW_opengl_context_disable(), and GPU_framebuffer_restore().
void GPU_viewport_unbind_from_offscreen | ( | GPUViewport * | viewport, |
struct GPUOffScreen * | ofs, | ||
bool | display_colorspace, | ||
bool | do_overlay_merge | ||
) |
Clear vars assigned from offscreen, so we don't free data owned by GPUOffScreen
.
Definition at line 508 of file gpu_viewport.c.
References GPUViewport::color_render_tx, GPUViewport::depth_tx, GPU_DEPTH_NONE, GPU_depth_test(), GPU_offscreen_bind(), gpu_viewport_draw_colormanaged(), NULL, view, and rctf::xmin.
Referenced by DRW_draw_render_loop_offscreen().
struct { ... } attr_id |
Definition at line 45 of file gpu_viewport.c.
struct { ... } g_viewport |
Referenced by gpu_viewport_batch_create(), and gpu_viewport_batch_format().
uint pos |
Definition at line 47 of file gpu_viewport.c.
Referenced by GPU_viewport_stereo_composite().
uint tex_coord |
Definition at line 47 of file gpu_viewport.c.
Referenced by add_node(), and shader_preview_texture().