Blender  V3.3
Classes | Macros | Enumerations | Functions
draw_cache_impl_curve.cc File Reference

Curve API for render engines. More...

#include "MEM_guardedalloc.h"
#include "BLI_array.hh"
#include "BLI_listbase.h"
#include "BLI_math_vec_types.hh"
#include "BLI_math_vector.h"
#include "BLI_span.hh"
#include "BLI_utildefines.h"
#include "DNA_curve_types.h"
#include "BKE_curve.h"
#include "BKE_curves.hh"
#include "BKE_displist.h"
#include "BKE_geometry_set.hh"
#include "BKE_vfont.h"
#include "GPU_batch.h"
#include "GPU_capabilities.h"
#include "GPU_material.h"
#include "GPU_texture.h"
#include "UI_resources.h"
#include "DRW_render.h"
#include "draw_cache_inline.h"
#include "draw_cache_impl.h"

Go to the source code of this file.

Classes

struct  CurveRenderData
 
struct  CurveBatchCache
 

Macros

#define SELECT   1
 
#define ACTIVE_NURB   (1 << 2)
 
#define BEZIER_HANDLE   (1 << 3)
 
#define EVEN_U_BIT   (1 << 4) /* Alternate this bit for every U vert. */
 
#define COLOR_SHIFT   5
 
#define DRW_TEST_ASSIGN_VBO(v)   (v = (DRW_vbo_requested(v) ? (v) : nullptr))
 
#define DRW_TEST_ASSIGN_IBO(v)   (v = (DRW_ibo_requested(v) ? (v) : nullptr))
 

Enumerations

enum  { COLOR_NURB_ULINE_ID = TH_HANDLE_AUTOCLAMP - TH_HANDLE_FREE + 2 , TOT_HANDLE_COL }
 
enum  {
  CU_DATATYPE_WIRE = 1 << 0 , CU_DATATYPE_OVERLAY = 1 << 1 , CU_DATATYPE_NORMAL = 1 << 2 , CU_DATATYPE_SURFACE = 1 << 3 ,
  CU_DATATYPE_TEXT_SELECT = 1 << 4
}
 

Functions

static void curve_batch_cache_clear (Curve *cu)
 
static void curve_render_overlay_verts_edges_len_get (ListBase *lb, int *r_vert_len, int *r_edge_len)
 
static void curve_eval_render_wire_verts_edges_len_get (const blender::bke::CurvesGeometry &curves, int *r_curve_len, int *r_vert_len, int *r_edge_len)
 
static int curve_render_normal_len_get (const ListBase *lb, const CurveCache *ob_curve_cache)
 
static CurveRenderDatacurve_render_data_create (Curve *cu, CurveCache *ob_curve_cache, const int types)
 
static void curve_render_data_free (CurveRenderData *rdata)
 
static int curve_render_data_overlay_verts_len_get (const CurveRenderData *rdata)
 
static int curve_render_data_overlay_edges_len_get (const CurveRenderData *rdata)
 
static int curve_render_data_wire_verts_len_get (const CurveRenderData *rdata)
 
static int curve_render_data_wire_edges_len_get (const CurveRenderData *rdata)
 
static int curve_render_data_wire_curve_len_get (const CurveRenderData *rdata)
 
static int curve_render_data_normal_len_get (const CurveRenderData *rdata)
 
static bool curve_batch_cache_valid (Curve *cu)
 
static void curve_batch_cache_init (Curve *cu)
 
void DRW_curve_batch_cache_validate (Curve *cu)
 
static CurveBatchCachecurve_batch_cache_get (Curve *cu)
 
void DRW_curve_batch_cache_dirty_tag (Curve *cu, int mode)
 
void DRW_curve_batch_cache_free (Curve *cu)
 
Private Curve Cache API
static void curve_create_curves_pos (CurveRenderData *rdata, GPUVertBuf *vbo_curves_pos)
 
static void curve_create_curves_lines (CurveRenderData *rdata, GPUIndexBuf *ibo_curve_lines)
 
static void curve_create_edit_curves_nor (CurveRenderData *rdata, GPUVertBuf *vbo_curves_nor, const Scene *scene)
 
static uint8_t beztriple_vflag_get (CurveRenderData *rdata, uint8_t flag, uint8_t col_id, int v_idx, int nu_id, bool handle_point, const bool handle_selected)
 
static uint8_t bpoint_vflag_get (CurveRenderData *rdata, uint8_t flag, int v_idx, int nu_id, int u)
 
static void curve_create_edit_data_and_handles (CurveRenderData *rdata, GPUVertBuf *vbo_pos, GPUVertBuf *vbo_data, GPUIndexBuf *ibo_edit_verts_points, GPUIndexBuf *ibo_edit_lines)
 
Public Object/Curve API
GPUBatchDRW_curve_batch_cache_get_wire_edge (Curve *cu)
 
GPUBatchDRW_curve_batch_cache_get_normal_edge (Curve *cu)
 
GPUBatchDRW_curve_batch_cache_get_edit_edges (Curve *cu)
 
GPUBatchDRW_curve_batch_cache_get_edit_verts (Curve *cu)
 
int DRW_curve_material_count_get (Curve *cu)
 
Grouped batch generation
void DRW_curve_batch_cache_create_requested (Object *ob, const struct Scene *scene)
 

Detailed Description

Curve API for render engines.

Definition in file draw_cache_impl_curve.cc.

Macro Definition Documentation

◆ ACTIVE_NURB

#define ACTIVE_NURB   (1 << 2)

Definition at line 47 of file draw_cache_impl_curve.cc.

◆ BEZIER_HANDLE

#define BEZIER_HANDLE   (1 << 3)

Definition at line 48 of file draw_cache_impl_curve.cc.

◆ COLOR_SHIFT

#define COLOR_SHIFT   5

Definition at line 50 of file draw_cache_impl_curve.cc.

◆ DRW_TEST_ASSIGN_IBO

#define DRW_TEST_ASSIGN_IBO (   v)    (v = (DRW_ibo_requested(v) ? (v) : nullptr))

◆ DRW_TEST_ASSIGN_VBO

#define DRW_TEST_ASSIGN_VBO (   v)    (v = (DRW_vbo_requested(v) ? (v) : nullptr))

◆ EVEN_U_BIT

#define EVEN_U_BIT   (1 << 4) /* Alternate this bit for every U vert. */

Definition at line 49 of file draw_cache_impl_curve.cc.

◆ SELECT

#define SELECT   1

Definition at line 46 of file draw_cache_impl_curve.cc.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
COLOR_NURB_ULINE_ID 
TOT_HANDLE_COL 

Definition at line 53 of file draw_cache_impl_curve.cc.

◆ anonymous enum

anonymous enum
Enumerator
CU_DATATYPE_WIRE 
CU_DATATYPE_OVERLAY 
CU_DATATYPE_NORMAL 
CU_DATATYPE_SURFACE 
CU_DATATYPE_TEXT_SELECT 

Definition at line 180 of file draw_cache_impl_curve.cc.

Function Documentation

◆ beztriple_vflag_get()

static uint8_t beztriple_vflag_get ( CurveRenderData rdata,
uint8_t  flag,
uint8_t  col_id,
int  v_idx,
int  nu_id,
bool  handle_point,
const bool  handle_selected 
)
static

◆ bpoint_vflag_get()

static uint8_t bpoint_vflag_get ( CurveRenderData rdata,
uint8_t  flag,
int  v_idx,
int  nu_id,
int  u 
)
static

◆ curve_batch_cache_clear()

static void curve_batch_cache_clear ( Curve cu)
static

TODO

  • Ensure CurveCache, SEQUENCER_DAG_WORKAROUND.
  • Check number of verts/edges to see if cache is valid.
  • Check if 'overlay.edges' can use single attribute per edge, not 2 (for selection drawing).

Definition at line 417 of file draw_cache_impl_curve.cc.

References CurveBatchCache::batch, batch, Curve::batch_cache, CurveBatchCache::edit, GPU_BATCH_DISCARD_SAFE, GPU_INDEXBUF_DISCARD_SAFE, GPU_VERTBUF_DISCARD_SAFE, GPUBatch, CurveBatchCache::ibo, if(), and CurveBatchCache::ordered.

Referenced by DRW_curve_batch_cache_free(), and DRW_curve_batch_cache_validate().

◆ curve_batch_cache_get()

static CurveBatchCache* curve_batch_cache_get ( Curve cu)
static

◆ curve_batch_cache_init()

static void curve_batch_cache_init ( Curve cu)
static

◆ curve_batch_cache_valid()

static bool curve_batch_cache_valid ( Curve cu)
static

◆ curve_create_curves_lines()

static void curve_create_curves_lines ( CurveRenderData rdata,
GPUIndexBuf ibo_curve_lines 
)
static

◆ curve_create_curves_pos()

static void curve_create_curves_pos ( CurveRenderData rdata,
GPUVertBuf vbo_curves_pos 
)
static

◆ curve_create_edit_curves_nor()

static void curve_create_edit_curves_nor ( CurveRenderData rdata,
GPUVertBuf vbo_curves_nor,
const Scene scene 
)
static

◆ curve_create_edit_data_and_handles()

static void curve_create_edit_data_and_handles ( CurveRenderData rdata,
GPUVertBuf vbo_pos,
GPUVertBuf vbo_data,
GPUIndexBuf ibo_edit_verts_points,
GPUIndexBuf ibo_edit_lines 
)
static

◆ curve_eval_render_wire_verts_edges_len_get()

static void curve_eval_render_wire_verts_edges_len_get ( const blender::bke::CurvesGeometry curves,
int *  r_curve_len,
int *  r_vert_len,
int *  r_edge_len 
)
static

◆ curve_render_data_create()

static CurveRenderData* curve_render_data_create ( Curve cu,
CurveCache ob_curve_cache,
const int  types 
)
static

◆ curve_render_data_free()

static void curve_render_data_free ( CurveRenderData rdata)
static

Definition at line 247 of file draw_cache_impl_curve.cc.

References MEM_freeN.

Referenced by DRW_curve_batch_cache_create_requested().

◆ curve_render_data_normal_len_get()

static int curve_render_data_normal_len_get ( const CurveRenderData rdata)
static

◆ curve_render_data_overlay_edges_len_get()

static int curve_render_data_overlay_edges_len_get ( const CurveRenderData rdata)
static

◆ curve_render_data_overlay_verts_len_get()

static int curve_render_data_overlay_verts_len_get ( const CurveRenderData rdata)
static

◆ curve_render_data_wire_curve_len_get()

static int curve_render_data_wire_curve_len_get ( const CurveRenderData rdata)
static

◆ curve_render_data_wire_edges_len_get()

static int curve_render_data_wire_edges_len_get ( const CurveRenderData rdata)
static

◆ curve_render_data_wire_verts_len_get()

static int curve_render_data_wire_verts_len_get ( const CurveRenderData rdata)
static

◆ curve_render_normal_len_get()

static int curve_render_normal_len_get ( const ListBase lb,
const CurveCache ob_curve_cache 
)
static

◆ curve_render_overlay_verts_edges_len_get()

static void curve_render_overlay_verts_edges_len_get ( ListBase lb,
int *  r_vert_len,
int *  r_edge_len 
)
static

Definition at line 71 of file draw_cache_impl_curve.cc.

References BLI_assert, and LISTBASE_FOREACH.

Referenced by curve_render_data_create().

◆ DRW_curve_batch_cache_create_requested()

void DRW_curve_batch_cache_create_requested ( Object ob,
const struct Scene scene 
)

◆ DRW_curve_batch_cache_dirty_tag()

void DRW_curve_batch_cache_dirty_tag ( Curve cu,
int  mode 
)

◆ DRW_curve_batch_cache_free()

void DRW_curve_batch_cache_free ( Curve cu)

◆ DRW_curve_batch_cache_get_edit_edges()

GPUBatch* DRW_curve_batch_cache_get_edit_edges ( Curve cu)

◆ DRW_curve_batch_cache_get_edit_verts()

GPUBatch* DRW_curve_batch_cache_get_edit_verts ( Curve cu)

◆ DRW_curve_batch_cache_get_normal_edge()

GPUBatch* DRW_curve_batch_cache_get_normal_edge ( Curve cu)

◆ DRW_curve_batch_cache_get_wire_edge()

GPUBatch* DRW_curve_batch_cache_get_wire_edge ( Curve cu)

◆ DRW_curve_batch_cache_validate()

void DRW_curve_batch_cache_validate ( Curve cu)

◆ DRW_curve_material_count_get()

int DRW_curve_material_count_get ( Curve cu)

Definition at line 790 of file draw_cache_impl_curve.cc.

References max_ii(), and Curve::totcol.

Referenced by DRW_cache_object_material_count_get().