Blender V5.0
gpu_viewport.cc File Reference
#include <cstring>
#include "BLI_math_vector.h"
#include "BLI_math_vector_types.hh"
#include "BLI_rect.h"
#include "BKE_colortools.hh"
#include "DNA_color_types.h"
#include "IMB_colormanagement.hh"
#include "DNA_vec_types.h"
#include "GPU_capabilities.hh"
#include "GPU_framebuffer.hh"
#include "GPU_immediate.hh"
#include "GPU_matrix.hh"
#include "GPU_state.hh"
#include "GPU_texture.hh"
#include "GPU_viewport.hh"
#include "DRW_engine.hh"
#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) }

Functions

void GPU_viewport_tag_update (GPUViewport *viewport)
bool GPU_viewport_do_update (GPUViewport *viewport)
GPUViewportGPU_viewport_create ()
GPUViewportGPU_viewport_stereo_create ()
DRWData ** GPU_viewport_data_get (GPUViewport *viewport)
static void gpu_viewport_textures_create (GPUViewport *viewport)
static void gpu_viewport_textures_free (GPUViewport *viewport)
void GPU_viewport_bind (GPUViewport *viewport, int view, const rcti *rect)
void GPU_viewport_bind_from_offscreen (GPUViewport *viewport, GPUOffScreen *ofs, bool is_xr_surface)
void GPU_viewport_colorspace_set (GPUViewport *viewport, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, float dither)
void GPU_viewport_stereo_composite (GPUViewport *viewport, Stereo3dFormat *stereo_format)
static void gpu_viewport_draw_colormanaged (GPUViewport *viewport, int view, const rctf *rect_pos, const rctf *rect_uv, bool display_colorspace, bool do_overlay_merge)
void GPU_viewport_draw_to_screen_ex (GPUViewport *viewport, int view, const rcti *rect, bool display_colorspace, bool do_overlay_merge)
void GPU_viewport_draw_to_screen (GPUViewport *viewport, int view, const rcti *rect)
void GPU_viewport_unbind_from_offscreen (GPUViewport *viewport, GPUOffScreen *ofs, bool display_colorspace, bool do_overlay_merge)
void GPU_viewport_unbind (GPUViewport *)
int GPU_viewport_active_view_get (GPUViewport *viewport)
bool GPU_viewport_is_stereo_get (GPUViewport *viewport)
blender::gpu::TextureGPU_viewport_color_texture (GPUViewport *viewport, int view)
blender::gpu::TextureGPU_viewport_overlay_texture (GPUViewport *viewport, int view)
blender::gpu::TextureGPU_viewport_depth_texture (GPUViewport *viewport)
blender::gpu::FrameBufferGPU_viewport_framebuffer_render_get (GPUViewport *viewport)
blender::gpu::FrameBufferGPU_viewport_framebuffer_overlay_get (GPUViewport *viewport)
void GPU_viewport_free (GPUViewport *viewport)
Viewport Batches
static const GPUVertFormatgpu_viewport_batch_format ()
static blender::gpu::Batch * gpu_viewport_batch_create (const rctf *rect_pos, const rctf *rect_uv)
static blender::gpu::Batch * gpu_viewport_batch_get (GPUViewport *viewport, const rctf *rect_pos, const rctf *rect_uv)
static void gpu_viewport_batch_free (GPUViewport *viewport)

Variables

struct { 
   GPUVertFormat   format 
   struct { 
      uint   pos 
      uint   tex_coord 
   }   attr_id
g_viewport = {{0}}

Detailed Description

System that manages viewport drawing.

Definition in file gpu_viewport.cc.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DO_UPDATE 
GPU_VIEWPORT_STEREO 

Definition at line 90 of file gpu_viewport.cc.

Function Documentation

◆ GPU_viewport_active_view_get()

int GPU_viewport_active_view_get ( GPUViewport * viewport)

◆ gpu_viewport_batch_create()

◆ gpu_viewport_batch_format()

const GPUVertFormat & gpu_viewport_batch_format ( )
static

Definition at line 368 of file gpu_viewport.cc.

References g_viewport, and GPU_vertformat_attr_add().

Referenced by gpu_viewport_batch_create().

◆ gpu_viewport_batch_free()

void gpu_viewport_batch_free ( GPUViewport * viewport)
static

Definition at line 433 of file gpu_viewport.cc.

References GPUViewport::batch, GPUViewportBatch::batch, and GPU_batch_discard().

Referenced by GPU_viewport_free().

◆ gpu_viewport_batch_get()

blender::gpu::Batch * gpu_viewport_batch_get ( GPUViewport * viewport,
const rctf * rect_pos,
const rctf * rect_uv )
static

◆ GPU_viewport_bind()

◆ GPU_viewport_bind_from_offscreen()

void GPU_viewport_bind_from_offscreen ( GPUViewport * viewport,
GPUOffScreen * ofs,
bool is_xr_surface )

◆ GPU_viewport_color_texture()

◆ GPU_viewport_colorspace_set()

void GPU_viewport_colorspace_set ( GPUViewport * viewport,
const 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 #75443). 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 252 of file gpu_viewport.cc.

References BKE_color_managed_display_settings_copy(), BKE_color_managed_view_settings_copy_keep_curve_mapping(), BKE_color_managed_view_settings_free(), BKE_curvemapping_copy(), CurveMapping::changed_timestamp, ColorManagedViewSettings::curve_mapping, GPUViewport::display_settings, GPUViewport::dither, GPUViewport::do_color_management, IMB_colormanagement_display_is_hdr(), GPUViewport::orig_curve_mapping, GPUViewport::use_hdr_display, GPUViewport::view_settings, and ColorManagedViewSettings::view_transform.

Referenced by blender::ed::vse::preview_draw_begin(), and blender::draw::color_management::viewport_settings_apply().

◆ GPU_viewport_create()

◆ GPU_viewport_data_get()

DRWData ** GPU_viewport_data_get ( GPUViewport * viewport)

Definition at line 123 of file gpu_viewport.cc.

References GPUViewport::draw_data.

Referenced by drw_viewport_data_ensure().

◆ GPU_viewport_depth_texture()

◆ GPU_viewport_do_update()

bool GPU_viewport_do_update ( GPUViewport * viewport)

Definition at line 100 of file gpu_viewport.cc.

References DO_UPDATE, GPUViewport::flag, and ret.

Referenced by wm_region_test_render_do_draw().

◆ gpu_viewport_draw_colormanaged()

◆ GPU_viewport_draw_to_screen()

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.

Parameters
rectCoordinates to draw into. By swapping min and max values, drawing can be done with inversed axis coordinates (upside down or sideways).

Definition at line 545 of file gpu_viewport.cc.

References GPU_viewport_draw_to_screen_ex(), and view.

Referenced by wm_draw_region_blit().

◆ GPU_viewport_draw_to_screen_ex()

void GPU_viewport_draw_to_screen_ex ( GPUViewport * viewport,
int view,
const rcti * rect,
bool display_colorspace,
bool do_overlay_merge )

◆ GPU_viewport_framebuffer_overlay_get()

◆ GPU_viewport_framebuffer_render_get()

blender::gpu::FrameBuffer * GPU_viewport_framebuffer_render_get ( GPUViewport * viewport)

Color render and overlay frame-buffers for drawing outside of DRW module.

Definition at line 614 of file gpu_viewport.cc.

References GPU_framebuffer_ensure_config, and GPUViewport::render_fb.

Referenced by blender::ed::vse::preview_draw_color_render_begin().

◆ GPU_viewport_free()

◆ GPU_viewport_is_stereo_get()

bool GPU_viewport_is_stereo_get ( GPUViewport * viewport)

Definition at line 594 of file gpu_viewport.cc.

References GPUViewport::flag, and GPU_VIEWPORT_STEREO.

◆ GPU_viewport_overlay_texture()

blender::gpu::Texture * GPU_viewport_overlay_texture ( GPUViewport * viewport,
int view )

Definition at line 604 of file gpu_viewport.cc.

References GPUViewport::color_overlay_tx, and view.

Referenced by DRW_view_data_default_lists_from_viewport().

◆ GPU_viewport_stereo_composite()

◆ GPU_viewport_stereo_create()

GPUViewport * GPU_viewport_stereo_create ( )

◆ GPU_viewport_tag_update()

void GPU_viewport_tag_update ( GPUViewport * viewport)

◆ gpu_viewport_textures_create()

◆ gpu_viewport_textures_free()

◆ GPU_viewport_unbind()

void GPU_viewport_unbind ( GPUViewport * viewport)

◆ GPU_viewport_unbind_from_offscreen()

void GPU_viewport_unbind_from_offscreen ( GPUViewport * viewport,
GPUOffScreen * ofs,
bool display_colorspace,
bool do_overlay_merge )

Variable Documentation

◆ [struct]

struct { ... } attr_id

◆ format

Definition at line 48 of file gpu_viewport.cc.

◆ [struct]

struct { ... } g_viewport

◆ pos

uint pos

Definition at line 50 of file gpu_viewport.cc.

◆ tex_coord