60 const float pixels[1][4] = {{1.0f, 0.0f, 1.0f, 1.0f}};
104 bool use_scene_lights =
false;
105 bool use_scene_world =
false;
130 use_scene_lights =
true;
131 use_scene_world =
true;
152 float world_light[3];
157 float viewmatinv[4][4];
163 if (ctx && ctx->
rv3d && v3d) {
192 const bool playing = (draw_ctx->
evil_C !=
NULL) ?
196 pd->
do_onion = show_onion && !hide_overlay && !playing;
205 const bool is_fade_layer = ((!hide_overlay) && (!pd->
is_render) &&
210 const bool is_fade_object = ((!hide_overlay) && (!pd->
is_render) &&
259 GPU_ATTACHMENT_TEXTURE(txl->snapshot_depth_tx),
260 GPU_ATTACHMENT_TEXTURE(txl->snapshot_color_tx),
261 GPU_ATTACHMENT_TEXTURE(txl->snapshot_reveal_tx),
300 float focal_len = cam->
lens;
302 const float scale_camera = 0.001f;
304 float aperture = 0.5f * scale_camera * focal_len / fstop;
305 float focal_len_scaled = scale_camera * focal_len;
306 float sensor_scaled = scale_camera * sensor;
312 pd->
dof_params[1] = aperture *
fabsf(focal_len_scaled / (focus_dist - focal_len_scaled));
313 pd->
dof_params[1] *= vp_size[0] / sensor_scaled;
349 #define DISABLE_BATCHING 0
353 #if !DISABLE_BATCHING
384 if ((geom != iter->
geom) || (v_first - last > 3)) {
484 if ((hide_material) || (!show_stroke && !show_fill) || (only_lines && !is_onion) ||
494 bool resource_changed = (iter->
ubo_mat != ubo_mat) ||
495 (tex_fill && (iter->
tex_fill != tex_fill)) ||
496 (tex_stroke && (iter->
tex_stroke != tex_stroke));
498 if (resource_changed) {
502 if (iter->
ubo_mat != ubo_mat) {
682 GPU_framebuffer_ensure_config(&fbl->
gpencil_fb,
684 GPU_ATTACHMENT_TEXTURE(pd->depth_tx),
685 GPU_ATTACHMENT_TEXTURE(pd->color_tx),
686 GPU_ATTACHMENT_TEXTURE(pd->reveal_tx),
695 GPU_framebuffer_ensure_config(&fbl->
layer_fb,
697 GPU_ATTACHMENT_TEXTURE(pd->depth_tx),
698 GPU_ATTACHMENT_TEXTURE(pd->color_layer_tx),
699 GPU_ATTACHMENT_TEXTURE(pd->reveal_layer_tx),
709 GPU_framebuffer_ensure_config(&fbl->
object_fb,
711 GPU_ATTACHMENT_TEXTURE(pd->depth_tx),
712 GPU_ATTACHMENT_TEXTURE(pd->color_object_tx),
713 GPU_ATTACHMENT_TEXTURE(pd->reveal_object_tx),
729 GPU_framebuffer_ensure_config(&fbl->
mask_fb,
731 GPU_ATTACHMENT_TEXTURE(depth_tx),
732 GPU_ATTACHMENT_TEXTURE(color_tx),
733 GPU_ATTACHMENT_TEXTURE(pd->mask_tx),
773 const float clear_col[4] = {1.0f, 1.0f, 1.0f, 1.0f};
775 bool inverted =
false;
778 bool cleared =
false;
793 inverted = !inverted;
798 GPU_framebuffer_clear_color_depth(fbl->
mask_fb, clear_col, clear_depth);
803 if (mask_layer ==
NULL) {
823 const float clear_cols[2][4] = {{0.0f, 0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}};
830 GPU_framebuffer_clear_depth_stencil(fb_object, ob->
is_drawmode3d ? 1.0f : 0.0f, 0x00);
837 if (layer->mask_bits) {
841 if (layer->blend_ps) {
851 if (layer->blend_ps) {
913 float clear_cols[2][4] = {{0.0f, 0.0f, 0.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}};
918 float background_color[3];
Camera data-block and utility functions.
float BKE_camera_sensor_size(int sensor_fit, float sensor_x, float sensor_y)
float BKE_camera_object_dof_distance(const struct Object *ob)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
#define GPENCIL_SIMPLIFY_AA(scene)
void BKE_gpencil_visible_stroke_advanced_iter(struct ViewLayer *view_layer, struct Object *ob, gpIterCb layer_cb, gpIterCb stroke_cb, void *thunk, bool do_onion, int cfra)
#define GPENCIL_SIMPLIFY_FILL(scene, playing)
#define GPENCIL_SIMPLIFY_FX(scene, playing)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
bool BKE_gpencil_has_time_modifiers(struct Object *ob)
struct bGPDframe * BKE_gpencil_frame_retime_get(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct bGPDlayer *gpl)
struct MaterialGPencilStyle * BKE_gpencil_material_settings(struct Object *ob, short act)
General operations, lookup, etc. for blender objects.
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_TEST_BOOL(_bitmap, _index)
Single link-list utility macros. (header only api).
#define BLI_LINKS_APPEND(list, link)
#define LISTBASE_FOREACH(type, var, list)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void mul_v4_fl(float r[4], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void copy_v3_fl(float r[3], float f)
void BLI_memblock_iternew(BLI_memblock *mblk, BLI_memblock_iter *iter) ATTR_NONNULL()
void * BLI_memblock_iterstep(BLI_memblock_iter *iter) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_memblock_clear(BLI_memblock *mblk, MemblockValFreeFP free_callback) ATTR_NONNULL(1)
float DEG_get_ctime(const Depsgraph *graph)
#define GPENCIL_PAINT_MODE(gpd)
@ GP_MATERIAL_HIDE_ONIONSKIN
@ GP_MATERIAL_STROKE_SHOW
@ GP_PROJECT_DEPTH_STROKE
@ V3D_SHADING_VERTEX_COLOR
#define V3D_GP_FADE_OBJECTS
#define V3D_USES_SCENE_WORLD(v3d)
#define V3D_GP_FADE_NOACTIVE_LAYERS
#define V3D_GP_SHOW_ONION_SKIN
#define V3D_HIDE_OVERLAYS
#define V3D_USES_SCENE_LIGHTS(v3d)
#define V3D_GP_FADE_NOACTIVE_GPENCIL
#define V3D_GP_SHOW_MULTIEDIT_LINES
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
#define DRW_VIEWPORT_DATA_SIZE(ty)
#define DRW_TEXTURE_FREE_SAFE(tex)
bScreen * ED_screen_animation_playing(const struct wmWindowManager *wm)
#define XRAY_ENABLED(v3d)
void ED_view3d_background_color_get(const struct Scene *scene, const struct View3D *v3d, float r_color[3])
struct GPUFrameBuffer GPUFrameBuffer
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
struct GPUShader GPUShader
struct GPUTexture GPUTexture
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
struct GPUBatch * DRW_cache_gpencil_strokes_get(struct Object *ob, int cfra)
struct bGPDstroke * DRW_cache_gpencil_sbuffer_stroke_data_get(struct Object *ob)
struct GPUBatch * DRW_cache_gpencil_sbuffer_fill_get(struct Object *ob)
struct GPUBatch * DRW_cache_gpencil_fills_get(struct Object *ob, int cfra)
void DRW_cache_gpencil_sbuffer_clear(struct Object *ob)
struct GPUBatch * DRW_cache_gpencil_sbuffer_stroke_get(struct Object *ob)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get(void)
int DRW_object_visibility_in_active_context(const Object *ob)
bool DRW_state_is_fbo(void)
const DRWContextState * DRW_context_state_get(void)
const float * DRW_viewport_size_get(void)
bool DRW_state_is_image_render(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_shgroup_uniform_float_copy(DRWShadingGroup *shgroup, const char *name, const float value)
void DRW_shgroup_uniform_vec4(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
void DRW_shgroup_call_instance_range(DRWShadingGroup *shgroup, Object *ob, struct GPUBatch *geom, uint i_sta, uint i_num)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, Object *ob, uint tri_count)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, const int value)
void DRW_shgroup_uniform_bool(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
DRWShadingGroup * DRW_shgroup_create_sub(DRWShadingGroup *shgroup)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_call_range(DRWShadingGroup *shgroup, struct Object *ob, GPUBatch *geom, uint v_sta, uint v_num)
void DRW_view_viewmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_draw_pass(DRWPass *pass)
void DRW_stats_group_start(const char *name)
void DRW_stats_group_end(void)
void DRW_texture_ensure_2d(GPUTexture **tex, int w, int h, eGPUTextureFormat format, DRWTextureFlag flags)
GPUTexture * DRW_texture_create_2d(int w, int h, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
GPUTexture * DRW_texture_pool_query_2d(int w, int h, eGPUTextureFormat format, DrawEngineType *engine_type)
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img GPU_RGBA16F
void GPENCIL_antialiasing_draw(struct GPENCIL_Data *vedata)
void GPENCIL_antialiasing_init(struct GPENCIL_Data *vedata)
GPENCIL_tLayer * gpencil_layer_cache_get(GPENCIL_tObject *tgp_ob, int number)
GPENCIL_tLayer * gpencil_layer_cache_add(GPENCIL_PrivateData *pd, const Object *ob, const bGPDlayer *gpl, const bGPDframe *gpf, GPENCIL_tObject *tgp_ob)
void gpencil_object_cache_sort(GPENCIL_PrivateData *pd)
GPENCIL_tObject * gpencil_object_cache_add(GPENCIL_PrivateData *pd, Object *ob)
void gpencil_light_pool_populate(GPENCIL_LightPool *lightpool, Object *ob)
GPENCIL_ViewLayerData * GPENCIL_view_layer_data_ensure(void)
GPENCIL_LightPool * gpencil_light_pool_add(GPENCIL_PrivateData *pd)
void gpencil_light_pool_free(void *storage)
void gpencil_material_pool_free(void *storage)
GPENCIL_MaterialPool * gpencil_material_pool_create(GPENCIL_PrivateData *pd, Object *ob, int *ofs)
void gpencil_light_ambient_add(GPENCIL_LightPool *lightpool, const float color[3])
void gpencil_material_resources_get(GPENCIL_MaterialPool *first_pool, int mat_id, GPUTexture **r_tex_stroke, GPUTexture **r_tex_fill, GPUUniformBuf **r_ubo_mat)
static void gpencil_stroke_cache_populate(bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, void *thunk)
static const DrawEngineDataSize GPENCIL_data_size
static void gpencil_sbuffer_cache_populate(gpIterPopulateData *iter)
void GPENCIL_cache_populate(void *ved, Object *ob)
static void gpencil_drawcall_add(gpIterPopulateData *iter, struct GPUBatch *geom, bool instancing, int v_first, int v_count)
void GPENCIL_draw_scene(void *ved)
static void GPENCIL_engine_free(void)
static void gpencil_draw_mask(GPENCIL_Data *vedata, GPENCIL_tObject *ob, GPENCIL_tLayer *layer)
static void GPENCIL_draw_scene_depth_only(void *ved)
void GPENCIL_cache_init(void *ved)
static void gpencil_drawcall_flush(gpIterPopulateData *iter)
struct gpIterPopulateData gpIterPopulateData
void GPENCIL_cache_finish(void *ved)
static void GPENCIL_draw_object(GPENCIL_Data *vedata, GPENCIL_tObject *ob)
static void GPENCIL_fast_draw_end(GPENCIL_Data *vedata)
DrawEngineType draw_engine_gpencil_type
static void gpencil_sbuffer_cache_populate_fast(GPENCIL_Data *vedata, gpIterPopulateData *iter)
void GPENCIL_engine_init(void *ved)
static void GPENCIL_fast_draw_start(GPENCIL_Data *vedata)
static void gpencil_layer_cache_populate(bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *UNUSED(gps), void *thunk)
void gpencil_vfx_cache_populate(GPENCIL_Data *vedata, Object *ob, GPENCIL_tObject *tgp_ob)
struct GPUShader * GPENCIL_shader_mask_invert_get(void)
void GPENCIL_shader_free(void)
void GPENCIL_render_to_image(void *vedata, struct RenderEngine *engine, struct RenderLayer *render_layer, const rcti *rect)
struct GPUShader * GPENCIL_shader_depth_merge_get(void)
void GPU_framebuffer_multi_clear(GPUFrameBuffer *gpu_fb, const float(*clear_cols)[4])
void GPU_framebuffer_blit(GPUFrameBuffer *gpufb_read, int read_slot, GPUFrameBuffer *gpufb_write, int write_slot, eGPUFrameBufferBits blit_buffers)
ccl_gpu_kernel_postfix ccl_global float int int int int sh
void *(* MEM_callocN)(size_t len, const char *str)
struct CameraDOFSettings dof
const struct bContext * evil_C
struct Depsgraph * depsgraph
struct ViewLayer * view_layer
struct RegionView3D * rv3d
struct GPUFrameBuffer * depth_only_fb
struct GPUFrameBuffer * default_fb
struct GPUTexture * depth
struct GPENCIL_TextureList * txl
struct GPENCIL_PassList * psl
struct GPENCIL_StorageList * stl
struct GPENCIL_FramebufferList * fbl
struct GPUFrameBuffer * render_fb
struct GPUFrameBuffer * snapshot_fb
struct GPUFrameBuffer * mask_fb
struct GPUFrameBuffer * gpencil_fb
struct GPUFrameBuffer * object_fb
struct GPUFrameBuffer * layer_fb
gpLight light_data[GPENCIL_LIGHT_BUFFER_LEN]
struct GPUUniformBuf * ubo
struct DRWPass * mask_invert_ps
struct DRWPass * merge_depth_ps
float object_bound_mat[4][4]
GPENCIL_LightPool * last_light_pool
struct BLI_memblock * gp_vfx_pool
GPUTexture * scene_depth_tx
struct bGPDstroke * sbuffer_stroke
struct BLI_memblock * gp_layer_pool
GPUTexture * color_object_tx
GPENCIL_LightPool * shadeless_light_pool
struct bGPDlayer * sbuffer_layer
struct ViewLayer * view_layer
bool snapshot_buffer_dirty
struct BLI_memblock * gp_maskbit_pool
struct BLI_memblock * gp_object_pool
struct GPENCIL_PrivateData::@219 tobjects_infront
float vertex_paint_opacity
float fade_gp_object_opacity
float v3d_single_color[3]
struct GPENCIL_PrivateData::@220 sbuffer_tobjects
GPENCIL_LightPool * global_light_pool
float fade_3d_object_opacity
struct BLI_memblock * gp_material_pool
GPUFrameBuffer * scene_fb
struct GPENCIL_PrivateData::@219 tobjects
bool use_multiedit_lines_only
GPUTexture * reveal_layer_tx
struct bGPdata * sbuffer_gpd
GPUTexture * color_layer_tx
struct BLI_memblock * gp_light_pool
GPENCIL_MaterialPool * last_material_pool
GPUTexture * reveal_object_tx
struct GPENCIL_PrivateData * pd
struct GPUTexture * snapshot_reveal_tx
struct GPUTexture * snapshot_depth_tx
struct GPUTexture * snapshot_color_tx
struct GPUTexture * render_depth_tx
struct GPUTexture * dummy_texture
struct BLI_memblock * gp_vfx_pool
struct BLI_memblock * gp_material_pool
struct BLI_memblock * gp_maskbit_pool
struct BLI_memblock * gp_light_pool
struct BLI_memblock * gp_layer_pool
struct BLI_memblock * gp_object_pool
DRWShadingGroup * base_shgrp
BLI_bitmap * mask_invert_bits
struct GPENCIL_tObject::@218 vfx
struct GPENCIL_tObject::@217 layers
struct GPENCIL_tObject * next
struct ToolSettings * toolsettings
float gpencil_paper_opacity
float gpencil_vertex_paint_opacity
float studiolight_intensity
bGPDframe_Runtime runtime
bGPDstroke_Runtime runtime
GPENCIL_MaterialPool * matpool
GPUUniformBuf * ubo_lights