34 const int fs_size[2] = {(int)viewport_size[0], (
int)viewport_size[1]};
58 GPU_framebuffer_ensure_config(
59 &fbl->
sss_blit_fb, {GPU_ATTACHMENT_TEXTURE(effects->sss_stencil), GPU_ATTACHMENT_NONE});
61 stencil_tex = dtxl->
depth;
64 GPU_framebuffer_ensure_config(
66 {GPU_ATTACHMENT_TEXTURE(stencil_tex), GPU_ATTACHMENT_TEXTURE(effects->sss_blur)});
68 GPU_framebuffer_ensure_config(
70 {GPU_ATTACHMENT_TEXTURE(stencil_tex), GPU_ATTACHMENT_TEXTURE(txl->color)});
72 GPU_framebuffer_ensure_config(
74 {GPU_ATTACHMENT_TEXTURE(stencil_tex), GPU_ATTACHMENT_TEXTURE(effects->sss_irradiance)});
78 GPU_ATTACHMENT_TEXTURE(effects->sss_irradiance),
79 GPU_ATTACHMENT_TEXTURE(effects->sss_radius)});
122 stencil_tex = dtxl->
depth;
125 GPU_framebuffer_ensure_config(
127 {GPU_ATTACHMENT_TEXTURE(stencil_tex), GPU_ATTACHMENT_TEXTURE(txl->sss_accum)});
135 const float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
180 BLI_assert_msg(0,
"SSS pass requested but no SSS data was found");
187 printf(
"Error: Too many different Subsurface shader in the scene.\n");
250 const float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
255 GPU_framebuffer_ensure_config(&fbl->
main_fb,
256 {GPU_ATTACHMENT_LEAVE,
257 GPU_ATTACHMENT_LEAVE,
258 GPU_ATTACHMENT_LEAVE,
259 GPU_ATTACHMENT_LEAVE,
260 GPU_ATTACHMENT_TEXTURE(effects->sss_irradiance),
261 GPU_ATTACHMENT_TEXTURE(effects->sss_radius),
262 GPU_ATTACHMENT_TEXTURE(effects->sss_albedo)});
268 GPU_framebuffer_ensure_config(&fbl->
main_fb,
269 {GPU_ATTACHMENT_LEAVE,
270 GPU_ATTACHMENT_LEAVE,
271 GPU_ATTACHMENT_LEAVE,
272 GPU_ATTACHMENT_LEAVE,
275 GPU_ATTACHMENT_NONE});
288 const float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
#define BLI_assert_msg(a, msg)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ EEVEE_RENDER_PASS_DIFFUSE_LIGHT
@ DRW_STATE_STENCIL_EQUAL
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
#define DRW_TEXTURE_FREE_SAFE(tex)
bool GPU_depth_blitting_workaround(void)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
struct GPUUniformBuf * GPU_material_sss_profile_get(GPUMaterial *material, int sample_len, struct GPUTexture **tex_profile)
struct GPUTexture GPUTexture
void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)
const DRWContextState * DRW_context_state_get(void)
const float * DRW_viewport_size_get(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_shgroup_uniform_texture(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex)
void DRW_shgroup_uniform_texture_ref_ex(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex, eGPUSamplerState sampler_state)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, Object *ob, uint tri_count)
bool DRW_pass_is_empty(DRWPass *pass)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_stencil_mask(DRWShadingGroup *shgroup, uint mask)
void DRW_draw_pass(DRWPass *pass)
void DRW_stats_group_start(const char *name)
void DRW_stats_group_end(void)
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
GPUTexture * DRW_texture_pool_query_2d(int w, int h, eGPUTextureFormat format, DrawEngineType *engine_type)
struct GPUTexture * depth_src
DrawEngineType draw_engine_eevee_type
struct GPUTexture * EEVEE_materials_get_util_tex(void)
struct GPUShader * EEVEE_shaders_subsurface_translucency_sh_get(void)
struct GPUShader * EEVEE_shaders_subsurface_first_pass_sh_get(void)
struct GPUShader * EEVEE_shaders_subsurface_second_pass_sh_get(void)
void EEVEE_subsurface_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_subsurface_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *UNUSED(vedata))
void EEVEE_subsurface_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_subsurface_add_pass(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Material *ma, DRWShadingGroup *shgrp, struct GPUMaterial *gpumat)
void EEVEE_subsurface_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_subsurface_draw_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_subsurface_data_render(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_subsurface_output_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, uint UNUSED(tot_samples))
void GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int mip)
void GPU_framebuffer_blit(GPUFrameBuffer *gpufb_read, int read_slot, GPUFrameBuffer *gpufb_write, int write_slot, eGPUFrameBufferBits blit_buffers)
static void clear(Message *msg)
struct Depsgraph * depsgraph
struct GPUTexture * depth
EEVEE_FramebufferList * fbl
struct GPUTexture * sss_irradiance
struct GPUTexture * sss_blur
struct GPUTexture * sss_radius
EEVEE_EffectsFlag enabled_effects
struct GPUTexture * sss_stencil
struct GPUTexture * sss_albedo
struct GPUFrameBuffer * main_fb
struct GPUFrameBuffer * sss_resolve_fb
struct GPUFrameBuffer * sss_translucency_fb
struct GPUFrameBuffer * sss_blit_fb
struct GPUFrameBuffer * sss_accum_fb
struct GPUFrameBuffer * sss_clear_fb
struct GPUFrameBuffer * sss_blur_fb
struct DRWPass * material_sss_ps
struct DRWPass * sss_resolve_ps
struct DRWPass * sss_blur_ps
struct DRWPass * sss_translucency_ps
eViewLayerEEVEEPassType render_passes
struct EEVEE_PrivateData * g_data
struct EEVEE_EffectsInfo * effects
struct GPUTexture * sss_accum
struct GPUTexture * color
struct EEVEE_CommonUniformBuffer common_data
struct GPUTexture * shadow_cube_pool
struct GPUUniformBuf * combined
struct GPUUniformBuf * shadow_ubo
struct EEVEE_ViewLayerData::@210 renderpass_ubo
struct GPUUniformBuf * common_ubo
struct GPUUniformBuf * light_ubo
struct GPUTexture * shadow_cascade_pool
float sss_jitter_threshold