Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_private.h
| Show First 20 Lines • Show All 509 Lines • ▼ Show 20 Lines | enum { | ||||
| EFFECT_GTAO = (1 << 7), | EFFECT_GTAO = (1 << 7), | ||||
| EFFECT_TAA = (1 << 8), | EFFECT_TAA = (1 << 8), | ||||
| EFFECT_POST_BUFFER = (1 << 9), /* Not really an effect but a feature */ | EFFECT_POST_BUFFER = (1 << 9), /* Not really an effect but a feature */ | ||||
| EFFECT_NORMAL_BUFFER = (1 << 10), /* Not really an effect but a feature */ | EFFECT_NORMAL_BUFFER = (1 << 10), /* Not really an effect but a feature */ | ||||
| EFFECT_SSS = (1 << 11), | EFFECT_SSS = (1 << 11), | ||||
| }; | }; | ||||
| /* ************** SCENE LAYER DATA ************** */ | /* ************** SCENE LAYER DATA ************** */ | ||||
| typedef struct EEVEE_SceneLayerData { | typedef struct EEVEE_ViewLayerData { | ||||
| /* Lamps */ | /* Lamps */ | ||||
| struct EEVEE_LampsInfo *lamps; | struct EEVEE_LampsInfo *lamps; | ||||
| struct GPUUniformBuffer *light_ubo; | struct GPUUniformBuffer *light_ubo; | ||||
| struct GPUUniformBuffer *shadow_ubo; | struct GPUUniformBuffer *shadow_ubo; | ||||
| struct GPUUniformBuffer *shadow_render_ubo; | struct GPUUniformBuffer *shadow_render_ubo; | ||||
| struct GPUUniformBuffer *shadow_samples_ubo; | struct GPUUniformBuffer *shadow_samples_ubo; | ||||
| Show All 22 Lines | typedef struct EEVEE_ViewLayerData { | ||||
| struct GPUTexture *probe_pool; | struct GPUTexture *probe_pool; | ||||
| struct GPUTexture *irradiance_pool; | struct GPUTexture *irradiance_pool; | ||||
| struct GPUTexture *irradiance_rt; | struct GPUTexture *irradiance_rt; | ||||
| struct ListBase probe_queue; /* List of probes to update */ | struct ListBase probe_queue; /* List of probes to update */ | ||||
| /* Volumetrics */ | /* Volumetrics */ | ||||
| struct EEVEE_VolumetricsInfo *volumetrics; | struct EEVEE_VolumetricsInfo *volumetrics; | ||||
| } EEVEE_SceneLayerData; | } EEVEE_ViewLayerData; | ||||
| /* ************ OBJECT DATA ************ */ | /* ************ OBJECT DATA ************ */ | ||||
| typedef struct EEVEE_LampEngineData { | typedef struct EEVEE_LampEngineData { | ||||
| bool need_update; | bool need_update; | ||||
| struct ListBase shadow_caster_list; | struct ListBase shadow_caster_list; | ||||
| void *storage; /* either EEVEE_LightData, EEVEE_ShadowCubeData, EEVEE_ShadowCascadeData */ | void *storage; /* either EEVEE_LightData, EEVEE_ShadowCubeData, EEVEE_ShadowCascadeData */ | ||||
| } EEVEE_LampEngineData; | } EEVEE_LampEngineData; | ||||
| ▲ Show 20 Lines • Show All 53 Lines • ▼ Show 20 Lines | typedef struct EEVEE_PrivateData { | ||||
| float mip_ratio[10][2]; /* TODO put in a UBO */ | float mip_ratio[10][2]; /* TODO put in a UBO */ | ||||
| /* For double buffering */ | /* For double buffering */ | ||||
| bool view_updated; | bool view_updated; | ||||
| bool valid_double_buffer; | bool valid_double_buffer; | ||||
| float prev_persmat[4][4]; | float prev_persmat[4][4]; | ||||
| } EEVEE_PrivateData; /* Transient data */ | } EEVEE_PrivateData; /* Transient data */ | ||||
| /* eevee_data.c */ | /* eevee_data.c */ | ||||
| EEVEE_SceneLayerData *EEVEE_scene_layer_data_get(void); | EEVEE_ViewLayerData *EEVEE_view_layer_data_get(void); | ||||
| EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob); | EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob); | ||||
| EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob); | EEVEE_LightProbeEngineData *EEVEE_lightprobe_data_get(Object *ob); | ||||
| EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob); | EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob); | ||||
| /* eevee_materials.c */ | /* eevee_materials.c */ | ||||
| struct GPUTexture *EEVEE_materials_get_util_tex(void); /* XXX */ | struct GPUTexture *EEVEE_materials_get_util_tex(void); /* XXX */ | ||||
| void EEVEE_materials_init(EEVEE_StorageList *stl); | void EEVEE_materials_init(EEVEE_StorageList *stl); | ||||
| void EEVEE_materials_cache_init(EEVEE_Data *vedata); | void EEVEE_materials_cache_init(EEVEE_Data *vedata); | ||||
| void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_SceneLayerData *sldata, Object *ob); | void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob); | ||||
| void EEVEE_materials_cache_finish(EEVEE_Data *vedata); | void EEVEE_materials_cache_finish(EEVEE_Data *vedata); | ||||
| struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, struct World *wo); | struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, struct World *wo); | ||||
| struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, struct World *wo); | struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, struct World *wo); | ||||
| struct GPUMaterial *EEVEE_material_world_volume_get(struct Scene *scene, struct World *wo); | struct GPUMaterial *EEVEE_material_world_volume_get(struct Scene *scene, struct World *wo); | ||||
| struct GPUMaterial *EEVEE_material_mesh_get( | struct GPUMaterial *EEVEE_material_mesh_get( | ||||
| struct Scene *scene, Material *ma, EEVEE_Data *vedata, | struct Scene *scene, Material *ma, EEVEE_Data *vedata, | ||||
| bool use_blend, bool use_multiply, bool use_refract, bool use_sss, bool use_translucency, int shadow_method); | bool use_blend, bool use_multiply, bool use_refract, bool use_sss, bool use_translucency, int shadow_method); | ||||
| struct GPUMaterial *EEVEE_material_mesh_volume_get(struct Scene *scene, Material *ma); | struct GPUMaterial *EEVEE_material_mesh_volume_get(struct Scene *scene, Material *ma); | ||||
| struct GPUMaterial *EEVEE_material_mesh_depth_get(struct Scene *scene, Material *ma, bool use_hashed_alpha, bool is_shadow); | struct GPUMaterial *EEVEE_material_mesh_depth_get(struct Scene *scene, Material *ma, bool use_hashed_alpha, bool is_shadow); | ||||
| struct GPUMaterial *EEVEE_material_hair_get(struct Scene *scene, Material *ma, int shadow_method); | struct GPUMaterial *EEVEE_material_hair_get(struct Scene *scene, Material *ma, int shadow_method); | ||||
| void EEVEE_materials_free(void); | void EEVEE_materials_free(void); | ||||
| void EEVEE_draw_default_passes(EEVEE_PassList *psl); | void EEVEE_draw_default_passes(EEVEE_PassList *psl); | ||||
| void EEVEE_update_util_texture(float offset); | void EEVEE_update_util_texture(float offset); | ||||
| /* eevee_lights.c */ | /* eevee_lights.c */ | ||||
| void EEVEE_lights_init(EEVEE_SceneLayerData *sldata); | void EEVEE_lights_init(EEVEE_ViewLayerData *sldata); | ||||
| void EEVEE_lights_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl); | void EEVEE_lights_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl); | ||||
| void EEVEE_lights_cache_add(EEVEE_SceneLayerData *sldata, struct Object *ob); | void EEVEE_lights_cache_add(EEVEE_ViewLayerData *sldata, struct Object *ob); | ||||
| void EEVEE_lights_cache_shcaster_add( | void EEVEE_lights_cache_shcaster_add( | ||||
| EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4]); | EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, struct Gwn_Batch *geom, float (*obmat)[4]); | ||||
| void EEVEE_lights_cache_shcaster_material_add( | void EEVEE_lights_cache_shcaster_material_add( | ||||
| EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl, | EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl, | ||||
| struct GPUMaterial *gpumat, struct Gwn_Batch *geom, struct Object *ob, | struct GPUMaterial *gpumat, struct Gwn_Batch *geom, struct Object *ob, | ||||
| float (*obmat)[4], float *alpha_threshold); | float (*obmat)[4], float *alpha_threshold); | ||||
| void EEVEE_lights_cache_finish(EEVEE_SceneLayerData *sldata); | void EEVEE_lights_cache_finish(EEVEE_ViewLayerData *sldata); | ||||
| void EEVEE_lights_update(EEVEE_SceneLayerData *sldata); | void EEVEE_lights_update(EEVEE_ViewLayerData *sldata); | ||||
| void EEVEE_draw_shadows(EEVEE_SceneLayerData *sldata, EEVEE_PassList *psl); | void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_PassList *psl); | ||||
| void EEVEE_lights_free(void); | void EEVEE_lights_free(void); | ||||
| /* eevee_lightprobes.c */ | /* eevee_lightprobes.c */ | ||||
| void EEVEE_lightprobes_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_lightprobes_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_lightprobes_cache_add(EEVEE_SceneLayerData *sldata, Object *ob); | void EEVEE_lightprobes_cache_add(EEVEE_ViewLayerData *sldata, Object *ob); | ||||
| void EEVEE_lightprobes_cache_finish(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_lightprobes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_lightprobes_refresh(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_lightprobes_refresh(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_lightprobes_free(void); | void EEVEE_lightprobes_free(void); | ||||
| /* eevee_depth_of_field.c */ | /* eevee_depth_of_field.c */ | ||||
| int EEVEE_depth_of_field_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_depth_of_field_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_depth_of_field_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_depth_of_field_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_depth_of_field_draw(EEVEE_Data *vedata); | void EEVEE_depth_of_field_draw(EEVEE_Data *vedata); | ||||
| void EEVEE_depth_of_field_free(void); | void EEVEE_depth_of_field_free(void); | ||||
| /* eevee_bloom.c */ | /* eevee_bloom.c */ | ||||
| int EEVEE_bloom_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_bloom_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_bloom_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_bloom_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_bloom_draw(EEVEE_Data *vedata); | void EEVEE_bloom_draw(EEVEE_Data *vedata); | ||||
| void EEVEE_bloom_free(void); | void EEVEE_bloom_free(void); | ||||
| /* eevee_occlusion.c */ | /* eevee_occlusion.c */ | ||||
| int EEVEE_occlusion_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_occlusion_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_occlusion_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_occlusion_compute(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_occlusion_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_occlusion_draw_debug(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_occlusion_draw_debug(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_occlusion_free(void); | void EEVEE_occlusion_free(void); | ||||
| /* eevee_screen_raytrace.c */ | /* eevee_screen_raytrace.c */ | ||||
| int EEVEE_screen_raytrace_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_screen_raytrace_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_screen_raytrace_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_refraction_compute(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_refraction_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_reflection_compute(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_reflection_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_screen_raytrace_free(void); | void EEVEE_screen_raytrace_free(void); | ||||
| /* eevee_subsurface.c */ | /* eevee_subsurface.c */ | ||||
| int EEVEE_subsurface_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_subsurface_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_subsurface_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_subsurface_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_subsurface_add_pass(EEVEE_Data *vedata, unsigned int sss_id, struct GPUUniformBuffer *sss_profile); | void EEVEE_subsurface_add_pass(EEVEE_Data *vedata, unsigned int sss_id, struct GPUUniformBuffer *sss_profile); | ||||
| void EEVEE_subsurface_data_render(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_subsurface_data_render(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_subsurface_compute(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_subsurface_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_subsurface_free(void); | void EEVEE_subsurface_free(void); | ||||
| /* eevee_motion_blur.c */ | /* eevee_motion_blur.c */ | ||||
| int EEVEE_motion_blur_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_motion_blur_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_motion_blur_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_motion_blur_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_motion_blur_draw(EEVEE_Data *vedata); | void EEVEE_motion_blur_draw(EEVEE_Data *vedata); | ||||
| void EEVEE_motion_blur_free(void); | void EEVEE_motion_blur_free(void); | ||||
| /* eevee_temporal_sampling.c */ | /* eevee_temporal_sampling.c */ | ||||
| int EEVEE_temporal_sampling_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_temporal_sampling_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata); | void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata); | ||||
| void EEVEE_temporal_sampling_free(void); | void EEVEE_temporal_sampling_free(void); | ||||
| /* eevee_volumes.c */ | /* eevee_volumes.c */ | ||||
| int EEVEE_volumes_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_volumes_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_volumes_cache_object_add(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata, struct Scene *scene, Object *ob); | void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct Scene *scene, Object *ob); | ||||
| void EEVEE_volumes_compute(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_volumes_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_volumes_resolve(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_volumes_resolve(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_volumes_free_smoke_textures(void); | void EEVEE_volumes_free_smoke_textures(void); | ||||
| void EEVEE_volumes_free(void); | void EEVEE_volumes_free(void); | ||||
| /* eevee_effects.c */ | /* eevee_effects.c */ | ||||
| void EEVEE_effects_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_effects_cache_init(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, struct GPUTexture *depth_src, int layer); | void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, struct GPUTexture *depth_src, int layer); | ||||
| void EEVEE_downsample_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level); | void EEVEE_downsample_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level); | ||||
| void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level); | void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, struct GPUFrameBuffer *fb_src, struct GPUTexture *texture_src, int level); | ||||
| void EEVEE_effects_do_gtao(EEVEE_SceneLayerData *sldata, EEVEE_Data *vedata); | void EEVEE_effects_do_gtao(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata); | ||||
| void EEVEE_draw_effects(EEVEE_Data *vedata); | void EEVEE_draw_effects(EEVEE_Data *vedata); | ||||
| void EEVEE_effects_free(void); | void EEVEE_effects_free(void); | ||||
| /* Shadow Matrix */ | /* Shadow Matrix */ | ||||
| static const float texcomat[4][4] = { /* From NDC to TexCo */ | static const float texcomat[4][4] = { /* From NDC to TexCo */ | ||||
| {0.5f, 0.0f, 0.0f, 0.0f}, | {0.5f, 0.0f, 0.0f, 0.0f}, | ||||
| {0.0f, 0.5f, 0.0f, 0.0f}, | {0.0f, 0.5f, 0.0f, 0.0f}, | ||||
| {0.0f, 0.0f, 0.5f, 0.0f}, | {0.0f, 0.0f, 0.5f, 0.0f}, | ||||
| Show All 38 Lines | |||||