Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/workbench_private.h
| Show All 37 Lines | |||||
| #define M_GOLDEN_RATION_CONJUGATE 0.618033988749895 | #define M_GOLDEN_RATION_CONJUGATE 0.618033988749895 | ||||
| #define MAX_COMPOSITE_SHADERS (1 << 6) | #define MAX_COMPOSITE_SHADERS (1 << 6) | ||||
| #define MAX_PREPASS_SHADERS (1 << 7) | #define MAX_PREPASS_SHADERS (1 << 7) | ||||
| #define MAX_ACCUM_SHADERS (1 << 6) | #define MAX_ACCUM_SHADERS (1 << 6) | ||||
| #define MAX_CAVITY_SHADERS (1 << 3) | #define MAX_CAVITY_SHADERS (1 << 3) | ||||
| #define TEXTURE_DRAWING_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_TEXTURE_COLOR) | #define TEXTURE_DRAWING_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_TEXTURE_COLOR) | ||||
| #define VERTEX_COLORS_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_VERTEX_COLOR) | #define VERTEX_COLORS_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_VERTEX_COLOR) | ||||
| #define MATERIAL_COLORS_ENABLED(wpd) (wpd->shading.color_type == V3D_SHADING_MATERIAL_COLOR) | |||||
| #define FLAT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_FLAT) | #define FLAT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_FLAT) | ||||
| #define STUDIOLIGHT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_STUDIO) | #define STUDIOLIGHT_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_STUDIO) | ||||
| #define MATCAP_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_MATCAP) | #define MATCAP_ENABLED(wpd) (wpd->shading.light == V3D_LIGHTING_MATCAP) | ||||
| #define USE_WORLD_ORIENTATION(wpd) ((wpd->shading.flag & V3D_SHADING_WORLD_ORIENTATION) != 0) | #define USE_WORLD_ORIENTATION(wpd) ((wpd->shading.flag & V3D_SHADING_WORLD_ORIENTATION) != 0) | ||||
| #define STUDIOLIGHT_TYPE_WORLD_ENABLED(wpd) \ | #define STUDIOLIGHT_TYPE_WORLD_ENABLED(wpd) \ | ||||
| (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_WORLD)) | (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_WORLD)) | ||||
| #define STUDIOLIGHT_TYPE_STUDIO_ENABLED(wpd) \ | #define STUDIOLIGHT_TYPE_STUDIO_ENABLED(wpd) \ | ||||
| (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_STUDIO)) | (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_STUDIO)) | ||||
| Show All 22 Lines | |||||
| #define IS_NAVIGATING(wpd) \ | #define IS_NAVIGATING(wpd) \ | ||||
| ((DRW_context_state_get()->rv3d) && (DRW_context_state_get()->rv3d->rflag & RV3D_NAVIGATING)) | ((DRW_context_state_get()->rv3d) && (DRW_context_state_get()->rv3d->rflag & RV3D_NAVIGATING)) | ||||
| #define SPECULAR_HIGHLIGHT_ENABLED(wpd) \ | #define SPECULAR_HIGHLIGHT_ENABLED(wpd) \ | ||||
| (STUDIOLIGHT_ENABLED(wpd) && (wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT) && \ | (STUDIOLIGHT_ENABLED(wpd) && (wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT) && \ | ||||
| (!STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd))) | (!STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd))) | ||||
| #define OBJECT_OUTLINE_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_OBJECT_OUTLINE) | #define OBJECT_OUTLINE_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_OBJECT_OUTLINE) | ||||
| #define OBJECT_ID_PASS_ENABLED(wpd) (OBJECT_OUTLINE_ENABLED(wpd) || CURVATURE_ENABLED(wpd)) | #define OBJECT_ID_PASS_ENABLED(wpd) (OBJECT_OUTLINE_ENABLED(wpd) || CURVATURE_ENABLED(wpd)) | ||||
| #define MATDATA_PASS_ENABLED(wpd) \ | |||||
| (wpd->shading.color_type != V3D_SHADING_SINGLE_COLOR || MATCAP_ENABLED(wpd)) | |||||
| #define NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) \ | #define NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) \ | ||||
| (MATCAP_ENABLED(wpd) || STUDIOLIGHT_ENABLED(wpd) || SHADOW_ENABLED(wpd)) | (MATCAP_ENABLED(wpd) || STUDIOLIGHT_ENABLED(wpd) || SHADOW_ENABLED(wpd)) | ||||
| #define NORMAL_VIEWPORT_PASS_ENABLED(wpd) \ | #define NORMAL_VIEWPORT_PASS_ENABLED(wpd) \ | ||||
| (NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) || SSAO_ENABLED(wpd) || CURVATURE_ENABLED(wpd)) | (NORMAL_VIEWPORT_COMP_PASS_ENABLED(wpd) || SSAO_ENABLED(wpd) || CURVATURE_ENABLED(wpd)) | ||||
| #define NORMAL_ENCODING_ENABLED() (true) | #define NORMAL_ENCODING_ENABLED() (true) | ||||
| #define WORLD_CLIPPING_ENABLED(wpd) (wpd->world_clip_planes != NULL) | #define WORLD_CLIPPING_ENABLED(wpd) (wpd->world_clip_planes != NULL) | ||||
| struct RenderEngine; | struct RenderEngine; | ||||
| ▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | |||||
| typedef struct WORKBENCH_PrivateData { | typedef struct WORKBENCH_PrivateData { | ||||
| struct GHash *material_hash; | struct GHash *material_hash; | ||||
| struct GHash *material_transp_hash; | struct GHash *material_transp_hash; | ||||
| struct GPUShader *prepass_sh; | struct GPUShader *prepass_sh; | ||||
| struct GPUShader *prepass_hair_sh; | struct GPUShader *prepass_hair_sh; | ||||
| struct GPUShader *prepass_uniform_sh; | struct GPUShader *prepass_uniform_sh; | ||||
| struct GPUShader *prepass_uniform_hair_sh; | struct GPUShader *prepass_uniform_hair_sh; | ||||
| struct GPUShader *prepass_textured_sh; | |||||
| struct GPUShader *composite_sh; | struct GPUShader *composite_sh; | ||||
| struct GPUShader *background_sh; | struct GPUShader *background_sh; | ||||
| struct GPUShader *transparent_accum_sh; | struct GPUShader *transparent_accum_sh; | ||||
| struct GPUShader *transparent_accum_hair_sh; | struct GPUShader *transparent_accum_hair_sh; | ||||
| struct GPUShader *transparent_accum_uniform_sh; | struct GPUShader *transparent_accum_uniform_sh; | ||||
| struct GPUShader *transparent_accum_uniform_hair_sh; | struct GPUShader *transparent_accum_uniform_hair_sh; | ||||
| struct GPUShader *transparent_accum_textured_sh; | |||||
| View3DShading shading; | View3DShading shading; | ||||
| StudioLight *studio_light; | StudioLight *studio_light; | ||||
| const UserDef *preferences; | const UserDef *preferences; | ||||
| struct GPUUniformBuffer *world_ubo; | struct GPUUniformBuffer *world_ubo; | ||||
| struct DRWShadingGroup *shadow_shgrp; | struct DRWShadingGroup *shadow_shgrp; | ||||
| struct DRWShadingGroup *depth_shgrp; | struct DRWShadingGroup *depth_shgrp; | ||||
| WORKBENCH_UBO_World world_data; | WORKBENCH_UBO_World world_data; | ||||
| float shadow_multiplier; | float shadow_multiplier; | ||||
| ▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | else { | ||||
| } | } | ||||
| /* when navigating or animation playback use FXAA if scene uses TAA. */ | /* when navigating or animation playback use FXAA if scene uses TAA. */ | ||||
| return (IS_NAVIGATING(wpd) || wpd->is_playback) && | return (IS_NAVIGATING(wpd) || wpd->is_playback) && | ||||
| wpd->preferences->viewport_aa > SCE_DISPLAY_AA_FXAA; | wpd->preferences->viewport_aa > SCE_DISPLAY_AA_FXAA; | ||||
| } | } | ||||
| } | } | ||||
| /** Is texture paint mode enabled (globally) */ | |||||
| BLI_INLINE bool workbench_is_in_texture_paint_mode(void) | |||||
| { | |||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | |||||
| return draw_ctx->object_mode == OB_MODE_TEXTURE_PAINT; | |||||
| } | |||||
| /** Is texture paint mode active for the given object */ | |||||
| BLI_INLINE bool workbench_is_object_in_texture_paint_mode(Object *ob) | |||||
| { | |||||
| const DRWContextState *draw_ctx = DRW_context_state_get(); | |||||
| if (ob->type == OB_MESH && (draw_ctx->obact == ob)) { | |||||
| const enum eContextObjectMode mode = CTX_data_mode_enum_ex( | |||||
| draw_ctx->object_edit, draw_ctx->obact, draw_ctx->object_mode); | |||||
| return (mode == CTX_MODE_PAINT_TEXTURE); | |||||
| } | |||||
| return false; | |||||
| } | |||||
| BLI_INLINE bool workbench_is_matdata_pass_enabled(WORKBENCH_PrivateData *wpd) | |||||
| { | |||||
| return (wpd->shading.color_type != V3D_SHADING_SINGLE_COLOR || MATCAP_ENABLED(wpd)) || | |||||
| workbench_is_in_texture_paint_mode(); | |||||
| } | |||||
| /* workbench_deferred.c */ | /* workbench_deferred.c */ | ||||
| void workbench_deferred_engine_init(WORKBENCH_Data *vedata); | void workbench_deferred_engine_init(WORKBENCH_Data *vedata); | ||||
| void workbench_deferred_engine_free(void); | void workbench_deferred_engine_free(void); | ||||
| void workbench_deferred_draw_background(WORKBENCH_Data *vedata); | void workbench_deferred_draw_background(WORKBENCH_Data *vedata); | ||||
| void workbench_deferred_draw_scene(WORKBENCH_Data *vedata); | void workbench_deferred_draw_scene(WORKBENCH_Data *vedata); | ||||
| void workbench_deferred_draw_finish(WORKBENCH_Data *vedata); | void workbench_deferred_draw_finish(WORKBENCH_Data *vedata); | ||||
| void workbench_deferred_cache_init(WORKBENCH_Data *vedata); | void workbench_deferred_cache_init(WORKBENCH_Data *vedata); | ||||
| void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob); | void workbench_deferred_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob); | ||||
| Show All 13 Lines | |||||
| void workbench_forward_outline_shaders_ensure(WORKBENCH_PrivateData *wpd, eGPUShaderConfig sh_cfg); | void workbench_forward_outline_shaders_ensure(WORKBENCH_PrivateData *wpd, eGPUShaderConfig sh_cfg); | ||||
| void workbench_forward_choose_shaders(WORKBENCH_PrivateData *wpd, eGPUShaderConfig sh_cfg); | void workbench_forward_choose_shaders(WORKBENCH_PrivateData *wpd, eGPUShaderConfig sh_cfg); | ||||
| WORKBENCH_MaterialData *workbench_forward_get_or_create_material_data(WORKBENCH_Data *vedata, | WORKBENCH_MaterialData *workbench_forward_get_or_create_material_data(WORKBENCH_Data *vedata, | ||||
| Object *ob, | Object *ob, | ||||
| Material *mat, | Material *mat, | ||||
| Image *ima, | Image *ima, | ||||
| ImageUser *iuser, | ImageUser *iuser, | ||||
| int color_type, | int color_type, | ||||
| int interp, | int interp); | ||||
| bool use_sculpt_pbvh); | |||||
| /* workbench_effect_aa.c */ | /* workbench_effect_aa.c */ | ||||
| void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx); | void workbench_aa_create_pass(WORKBENCH_Data *vedata, GPUTexture **tx); | ||||
| void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx); | void workbench_aa_draw_pass(WORKBENCH_Data *vedata, GPUTexture *tx); | ||||
| /* workbench_effect_fxaa.c */ | /* workbench_effect_fxaa.c */ | ||||
| void workbench_fxaa_engine_init(void); | void workbench_fxaa_engine_init(void); | ||||
| void workbench_fxaa_engine_free(void); | void workbench_fxaa_engine_free(void); | ||||
| Show All 21 Lines | |||||
| int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, | int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, | ||||
| Image *ima, | Image *ima, | ||||
| Object *ob, | Object *ob, | ||||
| bool use_sculpt_pbvh); | bool use_sculpt_pbvh); | ||||
| void workbench_material_get_image_and_mat( | void workbench_material_get_image_and_mat( | ||||
| Object *ob, int mat_nr, Image **r_image, ImageUser **r_iuser, int *r_interp, Material **r_mat); | Object *ob, int mat_nr, Image **r_image, ImageUser **r_iuser, int *r_interp, Material **r_mat); | ||||
| char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, | char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, | ||||
| bool is_uniform_color, | bool is_uniform_color, | ||||
| bool is_hair); | bool is_hair, | ||||
| bool is_texture_painting); | |||||
| void workbench_material_update_data(WORKBENCH_PrivateData *wpd, | void workbench_material_update_data(WORKBENCH_PrivateData *wpd, | ||||
| Object *ob, | Object *ob, | ||||
| Material *mat, | Material *mat, | ||||
| WORKBENCH_MaterialData *data); | WORKBENCH_MaterialData *data, | ||||
| int color_type); | |||||
| uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template, bool is_ghost); | uint workbench_material_get_hash(WORKBENCH_MaterialData *material_template, bool is_ghost); | ||||
| int workbench_material_get_composite_shader_index(WORKBENCH_PrivateData *wpd); | int workbench_material_get_composite_shader_index(WORKBENCH_PrivateData *wpd); | ||||
| int workbench_material_get_prepass_shader_index(WORKBENCH_PrivateData *wpd, | int workbench_material_get_prepass_shader_index(WORKBENCH_PrivateData *wpd, | ||||
| bool is_uniform_color, | bool is_uniform_color, | ||||
| bool is_hair); | bool is_hair, | ||||
| bool is_texture_painting); | |||||
| int workbench_material_get_accum_shader_index(WORKBENCH_PrivateData *wpd, | int workbench_material_get_accum_shader_index(WORKBENCH_PrivateData *wpd, | ||||
| bool is_uniform_color, | bool is_uniform_color, | ||||
| bool is_hair); | bool is_hair, | ||||
| bool is_texture_painting); | |||||
| void workbench_material_shgroup_uniform(WORKBENCH_PrivateData *wpd, | void workbench_material_shgroup_uniform(WORKBENCH_PrivateData *wpd, | ||||
| DRWShadingGroup *grp, | DRWShadingGroup *grp, | ||||
| WORKBENCH_MaterialData *material, | WORKBENCH_MaterialData *material, | ||||
| Object *ob, | Object *ob, | ||||
| const bool use_metallic, | const bool use_metallic, | ||||
| const bool deferred, | const bool deferred, | ||||
| const int interp); | const int interp); | ||||
| void workbench_material_copy(WORKBENCH_MaterialData *dest_material, | void workbench_material_copy(WORKBENCH_MaterialData *dest_material, | ||||
| ▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines | |||||