35 #define WORKBENCH_ENGINE "BLENDER_WORKBENCH"
49 const float fpixel[4] = {1.0f, 0.0f, 1.0f, 1.0f};
89 memset(gpumat_array, 0,
sizeof(*gpumat_array) * materials_len);
99 if (use_single_drawcall) {
106 for (
int i = 0; i < materials_len; i++) {
131 if (use_single_drawcall) {
146 for (
int i = 0; i < materials_len; i++) {
147 if (geoms[i] ==
NULL) {
164 const bool use_single_drawcall = !
ELEM(
167 if (use_single_drawcall) {
191 for (
int i = 0; i < materials_len; i++) {
192 if (geoms[i] ==
NULL) {
207 bool use_texpaint_mode,
251 bool *r_texpaint_mode,
259 const bool is_active = (ob == draw_ctx->
obact);
274 bool has_color =
false;
307 *r_sculpt_pbvh = is_sculpt_pbvh;
309 if (r_texpaint_mode) {
310 *r_texpaint_mode =
false;
313 if (!is_sculpt_pbvh && !is_render) {
317 if (r_texpaint_mode) {
318 *r_texpaint_mode =
true;
321 else if (is_vertpaint_mode && me && has_color) {
332 if (is_sculpt_pbvh) {
347 if (is_sculpt_pbvh) {
348 *r_draw_shadow =
false;
352 *r_draw_shadow =
false;
370 bool use_texpaint_mode;
386 wpd, ob, psys, md, color_type, use_texpaint_mode, part->
omat);
413 bool use_sculpt_pbvh, use_texpaint_mode, draw_shadow, has_transp_mat =
false;
415 wpd, ob, &use_sculpt_pbvh, &use_texpaint_mode, &draw_shadow);
417 if (use_sculpt_pbvh) {
420 else if (use_texpaint_mode) {
461 GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
462 GPU_ATTACHMENT_TEXTURE(dtxl->color),
467 GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
468 GPU_ATTACHMENT_TEXTURE(wpd->material_buffer_tx),
469 GPU_ATTACHMENT_TEXTURE(wpd->normal_buffer_tx),
470 GPU_ATTACHMENT_TEXTURE(wpd->object_id_tx),
475 GPU_ATTACHMENT_TEXTURE(dtxl->depth_in_front),
476 GPU_ATTACHMENT_TEXTURE(wpd->accum_buffer_tx),
477 GPU_ATTACHMENT_TEXTURE(wpd->reveal_buffer_tx),
485 GPU_ATTACHMENT_TEXTURE(wpd->object_id_tx),
495 for (
int i = 0; i < 2; i++) {
496 for (
int j = 0; j < 2; j++) {
514 const float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
515 const float clear_col_with_alpha[4] = {0.0f, 0.0f, 0.0f, 1.0f};
526 GPU_framebuffer_clear_depth(dfbl->
in_front_fb, 1.0f);
535 GPU_framebuffer_clear_color(fbl->
id_clear_fb, clear_col);
538 if (do_opaque_pass) {
547 if (do_opaque_infront_pass) {
566 if (xray_is_visible) {
567 if (do_transparent_pass) {
569 GPU_framebuffer_clear_color(fbl->
transp_accum_fb, clear_col_with_alpha);
577 if (do_transparent_infront_pass) {
689 #undef WORKBENCH_ENGINE
bool CustomData_has_layer(const struct CustomData *data, int type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_findby_type(const struct Object *ob, ModifierType type)
General operations, lookup, etc. for blender objects.
bool BKE_sculptsession_use_pbvh_draw(const struct Object *ob, const struct RegionView3D *rv3d)
A BVH for high poly meshes.
void BKE_pbvh_is_drawing_set(PBVH *pbvh, bool val)
PBVHType BKE_pbvh_type(const PBVH *pbvh)
#define BLI_array_alloca(arr, realsize)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int max_ii(int a, int b)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CURVES_MATERIAL_NR
@ eModifierType_ParticleSystem
@ IMAGEPAINT_INTERP_LINEAR
#define IMAGEPAINT_MODE_IMAGE
@ V3D_SHADING_TEXTURE_COLOR
@ V3D_SHADING_VERTEX_COLOR
@ V3D_SHADING_MATERIAL_COLOR
@ V3D_SHADING_OBJECT_COLOR
@ V3D_SHADING_SINGLE_COLOR
#define DRW_VIEWPORT_DATA_SIZE(ty)
#define DRW_shgroup_call(shgroup, geom, ob)
eV3DShadingColorType ED_paint_shading_color_override(struct bContext *C, const struct PaintModeSettings *settings, struct Object *ob, eV3DShadingColorType orig_color_type)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
#define RE_USE_STEREO_VIEWPORT
#define RE_USE_GPU_CONTEXT
GPUBatch * DRW_cache_mesh_surface_sculptcolors_get(Object *ob)
GPUBatch * DRW_cache_mesh_surface_texpaint_single_get(Object *ob)
GPUBatch ** DRW_cache_object_surface_material_get(struct Object *ob, struct GPUMaterial **gpumat_array, uint gpumat_array_len)
GPUBatch * DRW_cache_mesh_surface_vertpaint_get(Object *ob)
GPUBatch ** DRW_cache_mesh_surface_texpaint_get(Object *ob)
int DRW_cache_object_material_count_get(struct Object *ob)
GPUBatch * DRW_cache_object_surface_get(Object *ob)
struct DRWShadingGroup * DRW_shgroup_curves_create_sub(struct Object *object, struct DRWShadingGroup *shgrp, struct GPUMaterial *gpu_material)
struct DRWShadingGroup * DRW_shgroup_hair_create_sub(struct Object *object, struct ParticleSystem *psys, struct ModifierData *md, struct DRWShadingGroup *shgrp, struct GPUMaterial *gpu_material)
bool DRW_state_is_opengl_render(void)
DefaultFramebufferList * DRW_viewport_framebuffer_list_get(void)
bool DRW_object_is_renderable(const Object *ob)
int DRW_object_visibility_in_active_context(const Object *ob)
bool DRW_object_is_visible_psys_in_active_context(const Object *object, const ParticleSystem *psys)
const DRWContextState * DRW_context_state_get(void)
void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
DrawData * DRW_drawdata_get(ID *id, DrawEngineType *engine_type)
bool DRW_object_use_hide_faces(const struct Object *ob)
bool DRW_state_is_image_render(void)
bool DRW_state_is_scene_render(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_shgroup_call_instance_range(DRWShadingGroup *shgroup, Object *ob, struct GPUBatch *geom, uint i_sta, uint i_num)
bool DRW_pass_is_empty(DRWPass *pass)
void DRW_shgroup_call_sculpt(DRWShadingGroup *shgroup, Object *ob, bool use_wire, bool use_mask)
void DRW_shgroup_call_sculpt_with_materials(DRWShadingGroup **shgroups, int num_shgroups, Object *ob)
void DRW_draw_pass(DRWPass *pass)
void DRW_view_set_active(const DRWView *view)
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
GPUTexture * DRW_texture_pool_query_fullscreen(eGPUTextureFormat format, DrawEngineType *engine_type)
GPUTexture * DRW_texture_create_2d(int w, int h, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
const struct bContext * evil_C
struct RegionView3D * rv3d
struct GPUFrameBuffer * in_front_fb
struct GPUFrameBuffer * default_fb
struct GPUFrameBuffer * color_only_fb
struct GPUTexture * depth_in_front
struct FluidDomainSettings * domain
struct BMEditMesh * edit_mesh
struct SculptSession * sculpt
struct ToolSettings * toolsettings
WORKBENCH_FramebufferList * fbl
WORKBENCH_StorageList * stl
WORKBENCH_TextureList * txl
struct GPUFrameBuffer * opaque_fb
struct GPUFrameBuffer * transp_accum_fb
struct GPUFrameBuffer * opaque_infront_fb
struct GPUFrameBuffer * id_clear_fb
struct GPUFrameBuffer * transp_accum_infront_fb
struct DRWPass * composite_ps
struct DRWPass * opaque_infront_ps
struct DRWPass * transp_accum_ps
struct DRWPass * shadow_ps[2]
struct DRWPass * merge_infront_ps
struct DRWPass * outline_ps
struct DRWPass * opaque_ps
struct DRWPass * transp_resolve_ps
struct DRWPass * transp_accum_infront_ps
struct DRWPass * cavity_ps
struct GHash * material_hash
struct GPUTexture * object_id_tx
eContextObjectMode ctx_mode
struct GPUTexture * dummy_image_tx
WORKBENCH_Prepass prepass[2][2][WORKBENCH_DATATYPE_MAX]
float background_color[4]
struct WORKBENCH_PrivateData * wpd
struct GPUTexture * dummy_image_tx
void workbench_private_data_init(WORKBENCH_PrivateData *wpd)
void workbench_private_data_alloc(WORKBENCH_StorageList *stl)
void workbench_update_world_ubo(WORKBENCH_PrivateData *wpd)
void workbench_update_material_ubos(WORKBENCH_PrivateData *UNUSED(wpd))
void workbench_antialiasing_engine_init(WORKBENCH_Data *vedata)
bool workbench_antialiasing_setup(WORKBENCH_Data *vedata)
void workbench_antialiasing_draw_pass(WORKBENCH_Data *vedata)
void workbench_antialiasing_cache_init(WORKBENCH_Data *vedata)
void workbench_antialiasing_view_updated(WORKBENCH_Data *vedata)
void workbench_cavity_cache_init(WORKBENCH_Data *data)
void workbench_dof_cache_init(WORKBENCH_Data *vedata)
void workbench_dof_draw_pass(WORKBENCH_Data *vedata)
void workbench_dof_engine_init(WORKBENCH_Data *vedata)
void workbench_outline_cache_init(WORKBENCH_Data *data)
void workbench_draw_finish(void *UNUSED(ved))
static eV3DShadingColorType workbench_color_type_get(WORKBENCH_PrivateData *wpd, Object *ob, bool *r_sculpt_pbvh, bool *r_texpaint_mode, bool *r_draw_shadow)
static void workbench_cache_texpaint_populate(WORKBENCH_PrivateData *wpd, Object *ob)
static void workbench_draw_scene(void *ved)
static struct GPUBatch ** workbench_object_surface_material_get(Object *ob)
DrawEngineType draw_engine_workbench
static void workbench_engine_free(void)
void workbench_cache_populate(void *ved, Object *ob)
static void workbench_cache_sculpt_populate(WORKBENCH_PrivateData *wpd, Object *ob, eV3DShadingColorType color_type)
RenderEngineType DRW_engine_viewport_workbench_type
void workbench_cache_init(void *ved)
static void workbench_id_update(void *UNUSED(vedata), struct ID *id)
static const CustomData * workbench_mesh_get_vert_custom_data(const Mesh *mesh)
void workbench_engine_init(void *ved)
BLI_INLINE void workbench_object_drawcall(DRWShadingGroup *grp, struct GPUBatch *geom, Object *ob)
static void workbench_view_update(void *vedata)
static void workbench_cache_hair_populate(WORKBENCH_PrivateData *wpd, Object *ob, ParticleSystem *psys, ModifierData *md, eV3DShadingColorType color_type, bool use_texpaint_mode, const int matnr)
static void workbench_cache_common_populate(WORKBENCH_PrivateData *wpd, Object *ob, eV3DShadingColorType color_type, bool *r_transp)
static const CustomData * workbench_mesh_get_loop_custom_data(const Mesh *mesh)
void workbench_cache_finish(void *ved)
void workbench_draw_sample(void *ved)
static const DrawEngineDataSize workbench_data_size
void workbench_opaque_cache_init(WORKBENCH_Data *vedata)
void workbench_opaque_engine_init(WORKBENCH_Data *data)
void workbench_transparent_engine_init(WORKBENCH_Data *data)
void workbench_volume_cache_init(WORKBENCH_Data *vedata)
void workbench_volume_draw_pass(WORKBENCH_Data *vedata)
void workbench_shader_free(void)
void workbench_shadow_cache_populate(WORKBENCH_Data *data, Object *ob, bool has_transp_mat)
void workbench_transparent_cache_init(WORKBENCH_Data *data)
#define workbench_material_setup(wpd, ob, mat_nr, color_type, r_transp)
#define workbench_image_hair_setup(wpd, ob, mat_nr, ima, iuser, interp)
#define workbench_material_hair_setup(wpd, ob, mat_nr, color_type)
void workbench_volume_engine_init(WORKBENCH_Data *vedata)
void workbench_render_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
#define workbench_image_setup(wpd, ob, mat_nr, ima, iuser, interp)
void workbench_shadow_cache_init(WORKBENCH_Data *data)
#define OBJECT_ID_PASS_ENABLED(wpd)
void workbench_render(void *ved, struct RenderEngine *engine, struct RenderLayer *render_layer, const struct rcti *rect)
#define SHADOW_ENABLED(wpd)
void workbench_transparent_draw_depth_pass(WORKBENCH_Data *data)
void workbench_volume_cache_populate(WORKBENCH_Data *vedata, struct Scene *scene, struct Object *ob, struct ModifierData *md, eV3DShadingColorType color_type)