Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/workbench_private.h
| Show All 32 Lines | |||||
| #include "DRW_render.h" | #include "DRW_render.h" | ||||
| #include "workbench_engine.h" | #include "workbench_engine.h" | ||||
| #define WORKBENCH_ENGINE "BLENDER_WORKBENCH" | #define WORKBENCH_ENGINE "BLENDER_WORKBENCH" | ||||
| #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 << 6) | #define MAX_PREPASS_SHADERS (1 << 7) | ||||
| #define MAX_ACCUM_SHADERS (1 << 5) | #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 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) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_WORLD)) | #define STUDIOLIGHT_TYPE_WORLD_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_WORLD)) | ||||
| #define STUDIOLIGHT_TYPE_STUDIO_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_STUDIO)) | #define STUDIOLIGHT_TYPE_STUDIO_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_STUDIO)) | ||||
| #define STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd) (MATCAP_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_MATCAP)) | #define STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd) (MATCAP_ENABLED(wpd) && (wpd->studio_light->flag & STUDIOLIGHT_TYPE_MATCAP)) | ||||
| #define SSAO_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_CAVITY) && ((wpd->shading.cavity_type == V3D_SHADING_CAVITY_SSAO) || (wpd->shading.cavity_type == V3D_SHADING_CAVITY_BOTH))) | #define SSAO_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_CAVITY) && ((wpd->shading.cavity_type == V3D_SHADING_CAVITY_SSAO) || (wpd->shading.cavity_type == V3D_SHADING_CAVITY_BOTH))) | ||||
| #define CURVATURE_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_CAVITY) && ((wpd->shading.cavity_type == V3D_SHADING_CAVITY_CURVATURE) || (wpd->shading.cavity_type == V3D_SHADING_CAVITY_BOTH))) | #define CURVATURE_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_CAVITY) && ((wpd->shading.cavity_type == V3D_SHADING_CAVITY_CURVATURE) || (wpd->shading.cavity_type == V3D_SHADING_CAVITY_BOTH))) | ||||
| #define CAVITY_ENABLED(wpd) (CURVATURE_ENABLED(wpd) || SSAO_ENABLED(wpd)) | #define CAVITY_ENABLED(wpd) (CURVATURE_ENABLED(wpd) || SSAO_ENABLED(wpd)) | ||||
| #define SHADOW_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_SHADOW) | #define SHADOW_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_SHADOW) | ||||
| #define GHOST_ENABLED(psl) (!DRW_pass_is_empty(psl->ghost_prepass_pass) || !DRW_pass_is_empty(psl->ghost_prepass_hair_pass)) | #define GHOST_ENABLED(psl) (!DRW_pass_is_empty(psl->ghost_prepass_pass) || !DRW_pass_is_empty(psl->ghost_prepass_hair_pass)) | ||||
| #define CULL_BACKFACE_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_BACKFACE_CULLING) != 0) | #define CULL_BACKFACE_ENABLED(wpd) ((wpd->shading.flag & V3D_SHADING_BACKFACE_CULLING) != 0) | ||||
| #define OIT_ENABLED(wpd) (ELEM(wpd->shading.color_type, V3D_SHADING_MATERIAL_COLOR, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_TEXTURE_COLOR)) | #define OIT_ENABLED(wpd) (ELEM(wpd->shading.color_type, V3D_SHADING_MATERIAL_COLOR, V3D_SHADING_OBJECT_COLOR, V3D_SHADING_VERTEX_COLOR, V3D_SHADING_TEXTURE_COLOR)) | ||||
| #define IS_NAVIGATING(wpd) ((DRW_context_state_get()->rv3d) && (DRW_context_state_get()->rv3d->rflag & RV3D_NAVIGATING)) | #define IS_NAVIGATING(wpd) ((DRW_context_state_get()->rv3d) && (DRW_context_state_get()->rv3d->rflag & RV3D_NAVIGATING)) | ||||
| #define FXAA_ENABLED(wpd) ((!DRW_state_is_opengl_render()) && \ | #define FXAA_ENABLED(wpd) ((!DRW_state_is_opengl_render()) && \ | ||||
| (IN_RANGE(wpd->preferences->gpu_viewport_quality, GPU_VIEWPORT_QUALITY_FXAA, GPU_VIEWPORT_QUALITY_TAA8) || \ | (IN_RANGE(wpd->preferences->gpu_viewport_quality, GPU_VIEWPORT_QUALITY_FXAA, GPU_VIEWPORT_QUALITY_TAA8) || \ | ||||
| ((IS_NAVIGATING(wpd) || wpd->is_playback) && (wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8)))) | ((IS_NAVIGATING(wpd) || wpd->is_playback) && (wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8)))) | ||||
| #define TAA_ENABLED(wpd) ((DRW_state_is_image_render() && DRW_context_state_get()->scene->r.mode & R_OSA) || \ | #define TAA_ENABLED(wpd) ((DRW_state_is_image_render() && DRW_context_state_get()->scene->r.mode & R_OSA) || \ | ||||
| (!DRW_state_is_image_render() && wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8 && !IS_NAVIGATING(wpd) && !wpd->is_playback)) | (!DRW_state_is_image_render() && wpd->preferences->gpu_viewport_quality >= GPU_VIEWPORT_QUALITY_TAA8 && !IS_NAVIGATING(wpd) && !wpd->is_playback)) | ||||
| #define SPECULAR_HIGHLIGHT_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT) && (!STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd))) | #define SPECULAR_HIGHLIGHT_ENABLED(wpd) (STUDIOLIGHT_ENABLED(wpd) && (wpd->shading.flag & V3D_SHADING_SPECULAR_HIGHLIGHT) && (!STUDIOLIGHT_TYPE_MATCAP_ENABLED(wpd))) | ||||
| ▲ Show 20 Lines • Show All 117 Lines • ▼ Show 20 Lines | typedef struct WORKBENCH_UBO_World { | ||||
| int pad[3]; | int pad[3]; | ||||
| } WORKBENCH_UBO_World; | } WORKBENCH_UBO_World; | ||||
| BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16) | BLI_STATIC_ASSERT_ALIGN(WORKBENCH_UBO_World, 16) | ||||
| 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_solid_sh; | struct GPUShader *prepass_fallback_sh; | ||||
| struct GPUShader *prepass_solid_hair_sh; | struct GPUShader *prepass_fallback_hair_sh; | ||||
| struct GPUShader *prepass_texture_sh; | struct GPUShader *prepass_primary_sh; | ||||
| struct GPUShader *prepass_texture_hair_sh; | struct GPUShader *prepass_primary_hair_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_fallback_sh; | ||||
| struct GPUShader *transparent_accum_hair_sh; | struct GPUShader *transparent_accum_fallback_hair_sh; | ||||
| struct GPUShader *transparent_accum_texture_sh; | struct GPUShader *transparent_accum_primary_sh; | ||||
| struct GPUShader *transparent_accum_texture_hair_sh; | struct GPUShader *transparent_accum_primary_hair_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 138 Lines • ▼ Show 20 Lines | |||||
| void workbench_dof_engine_init(WORKBENCH_Data *vedata, Object *camera); | void workbench_dof_engine_init(WORKBENCH_Data *vedata, Object *camera); | ||||
| void workbench_dof_engine_free(void); | void workbench_dof_engine_free(void); | ||||
| void workbench_dof_create_pass(WORKBENCH_Data *vedata, GPUTexture **dof_input, GPUTexture *noise_tex); | void workbench_dof_create_pass(WORKBENCH_Data *vedata, GPUTexture **dof_input, GPUTexture *noise_tex); | ||||
| void workbench_dof_draw_pass(WORKBENCH_Data *vedata); | void workbench_dof_draw_pass(WORKBENCH_Data *vedata); | ||||
| /* workbench_materials.c */ | /* workbench_materials.c */ | ||||
| int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima, Object *ob); | int workbench_material_determine_color_type(WORKBENCH_PrivateData *wpd, Image *ima, Object *ob); | ||||
| void workbench_material_get_image_and_mat(Object *ob, int mat_nr, Image **r_image, ImageUser **r_iuser, int *r_interp, Material **r_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); | ||||
| char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair); | char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool is_primary_shader, bool is_hair); | ||||
| void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data); | void workbench_material_update_data(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, WORKBENCH_MaterialData *data); | ||||
| 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, bool use_textures, bool is_hair); | int workbench_material_get_prepass_shader_index(WORKBENCH_PrivateData *wpd, bool is_primary_shader, bool is_hair); | ||||
| int workbench_material_get_accum_shader_index(WORKBENCH_PrivateData *wpd, bool use_textures, bool is_hair); | int workbench_material_get_accum_shader_index(WORKBENCH_PrivateData *wpd, bool is_primary_shader, bool is_hair); | ||||
| void workbench_material_shgroup_uniform( | void workbench_material_shgroup_uniform( | ||||
| WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material, Object *ob, | WORKBENCH_PrivateData *wpd, DRWShadingGroup *grp, WORKBENCH_MaterialData *material, Object *ob, | ||||
| const bool use_metallic, const bool deferred, const int interp); | const bool use_metallic, const bool deferred, const int interp); | ||||
| void workbench_material_copy(WORKBENCH_MaterialData *dest_material, const WORKBENCH_MaterialData *source_material); | void workbench_material_copy(WORKBENCH_MaterialData *dest_material, const WORKBENCH_MaterialData *source_material); | ||||
| /* workbench_studiolight.c */ | /* workbench_studiolight.c */ | ||||
| void studiolight_update_world(WORKBENCH_PrivateData *wpd, StudioLight *sl, WORKBENCH_UBO_World *wd); | void studiolight_update_world(WORKBENCH_PrivateData *wpd, StudioLight *sl, WORKBENCH_UBO_World *wd); | ||||
| void studiolight_update_light(WORKBENCH_PrivateData *wpd, const float light_direction[3]); | void studiolight_update_light(WORKBENCH_PrivateData *wpd, const float light_direction[3]); | ||||
| Show All 22 Lines | |||||