Blender  V3.3
Classes | Enumerations | Functions | Variables
gpu_viewport.c File Reference
#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) }
 

Functions

void GPU_viewport_tag_update (GPUViewport *viewport)
 
bool GPU_viewport_do_update (GPUViewport *viewport)
 
GPUViewportGPU_viewport_create (void)
 
GPUViewportGPU_viewport_stereo_create (void)
 
struct 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, struct GPUOffScreen *ofs, bool is_xr_surface)
 
void GPU_viewport_colorspace_set (GPUViewport *viewport, 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, struct GPUOffScreen *ofs, bool display_colorspace, bool do_overlay_merge)
 
void GPU_viewport_unbind (GPUViewport *UNUSED(viewport))
 
int GPU_viewport_active_view_get (GPUViewport *viewport)
 
bool GPU_viewport_is_stereo_get (GPUViewport *viewport)
 
GPUTextureGPU_viewport_color_texture (GPUViewport *viewport, int view)
 
GPUTextureGPU_viewport_overlay_texture (GPUViewport *viewport, int view)
 
GPUTextureGPU_viewport_depth_texture (GPUViewport *viewport)
 
GPUFrameBufferGPU_viewport_framebuffer_overlay_get (GPUViewport *viewport)
 
void GPU_viewport_free (GPUViewport *viewport)
 
Viewport Batches
static GPUVertFormatgpu_viewport_batch_format (void)
 
static GPUBatchgpu_viewport_batch_create (const rctf *rect_pos, const rctf *rect_uv)
 
static GPUBatchgpu_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.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
DO_UPDATE 
GPU_VIEWPORT_STEREO 

Definition at line 81 of file gpu_viewport.c.

Function Documentation

◆ GPU_viewport_active_view_get()

int GPU_viewport_active_view_get ( GPUViewport viewport)

◆ gpu_viewport_batch_create()

static GPUBatch* gpu_viewport_batch_create ( const rctf rect_pos,
const rctf rect_uv 
)
static

◆ gpu_viewport_batch_format()

static GPUVertFormat* gpu_viewport_batch_format ( void  )
static

◆ gpu_viewport_batch_free()

static void gpu_viewport_batch_free ( GPUViewport viewport)
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().

◆ gpu_viewport_batch_get()

static GPUBatch* gpu_viewport_batch_get ( GPUViewport viewport,
const rctf rect_pos,
const rctf rect_uv 
)
static

◆ GPU_viewport_bind()

void GPU_viewport_bind ( GPUViewport viewport,
int  view,
const rcti rect 
)

◆ GPU_viewport_bind_from_offscreen()

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

◆ GPU_viewport_color_texture()

GPUTexture* GPU_viewport_color_texture ( GPUViewport viewport,
int  view 
)

◆ GPU_viewport_colorspace_set()

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().

◆ GPU_viewport_create()

GPUViewport* GPU_viewport_create ( void  )

◆ GPU_viewport_data_get()

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().

◆ GPU_viewport_depth_texture()

GPUTexture* GPU_viewport_depth_texture ( GPUViewport viewport)

◆ GPU_viewport_do_update()

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().

◆ gpu_viewport_draw_colormanaged()

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 
)
static

◆ 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 503 of file gpu_viewport.c.

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()

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().

◆ GPU_viewport_free()

void GPU_viewport_free ( GPUViewport viewport)

◆ GPU_viewport_is_stereo_get()

bool GPU_viewport_is_stereo_get ( GPUViewport viewport)

◆ GPU_viewport_overlay_texture()

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().

◆ GPU_viewport_stereo_composite()

void GPU_viewport_stereo_composite ( GPUViewport viewport,
Stereo3dFormat stereo_format 
)

◆ GPU_viewport_stereo_create()

GPUViewport* GPU_viewport_stereo_create ( void  )

◆ GPU_viewport_tag_update()

void GPU_viewport_tag_update ( GPUViewport viewport)

◆ gpu_viewport_textures_create()

static void gpu_viewport_textures_create ( GPUViewport viewport)
static

◆ gpu_viewport_textures_free()

static void gpu_viewport_textures_free ( GPUViewport viewport)
static

◆ GPU_viewport_unbind()

void GPU_viewport_unbind ( GPUViewport UNUSEDviewport)

Definition at line 543 of file gpu_viewport.c.

References DRW_opengl_context_disable(), and GPU_framebuffer_restore().

◆ GPU_viewport_unbind_from_offscreen()

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().

Variable Documentation

◆ 

struct { ... } attr_id

◆ format

Definition at line 45 of file gpu_viewport.c.

◆ 

struct { ... } g_viewport

◆ pos

uint pos

Definition at line 47 of file gpu_viewport.c.

Referenced by GPU_viewport_stereo_composite().

◆ tex_coord

uint tex_coord

Definition at line 47 of file gpu_viewport.c.

Referenced by add_node(), and shader_preview_texture().