30 #define SETUP_BUFFER(tex, fb, fb_color) \
32 eGPUTextureFormat format = (DRW_state_is_scene_render()) ? GPU_RGBA32F : GPU_RGBA16F; \
33 DRW_texture_ensure_fullscreen_2d(&tex, format, DRW_TEX_FILTER); \
34 GPU_framebuffer_ensure_config(&fb, \
36 GPU_ATTACHMENT_TEXTURE(dtxl->depth), \
37 GPU_ATTACHMENT_TEXTURE(tex), \
39 GPU_framebuffer_ensure_config(&fb_color, \
41 GPU_ATTACHMENT_NONE, \
42 GPU_ATTACHMENT_TEXTURE(tex), \
47 #define CLEANUP_BUFFER(tex, fb, fb_color) \
50 DRW_TEXTURE_FREE_SAFE(tex); \
51 GPU_FRAMEBUFFER_FREE_SAFE(fb); \
52 GPU_FRAMEBUFFER_FREE_SAFE(fb_color); \
69 const int size_fs[2] = {(int)viewport_size[0], (
int)viewport_size[1]};
117 GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer),
125 GPU_ATTACHMENT_TEXTURE(txl->maxzbuffer),
157 GPU_ATTACHMENT_TEXTURE(txl->filtered_radiance),
187 GPU_ATTACHMENT_TEXTURE(dtxl->depth),
188 GPU_ATTACHMENT_TEXTURE(effects->velocity_tx),
191 GPU_framebuffer_ensure_config(
193 {GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(effects->velocity_tx)});
206 {GPU_ATTACHMENT_TEXTURE(txl->depth_double_buffer)});
330 static void min_downsample_cb(
void *vedata,
int UNUSED(level))
343 e_data.texel_size[0] = 1.0f / texture_size[0];
344 e_data.texel_size[1] = 1.0f / texture_size[1];
362 e_data.depth_src_layer = layer;
394 e_data.texel_size[0] = 1.0f / texture_size[0];
395 e_data.texel_size[1] = 1.0f / texture_size[1];
404 e_data.color_src = texture_src;
418 e_data.color_src = texture_src;
typedef float(TangentPoint)[2]
MINLINE uint divide_ceil_u(uint a, uint b)
@ EEVEE_RENDER_PASS_NORMAL
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
#define DRW_shgroup_call(shgroup, geom, ob)
#define DRW_TEXTURE_FREE_SAFE(tex)
bool GPU_mip_render_workaround(void)
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
void GPU_framebuffer_texture_detach(GPUFrameBuffer *fb, struct GPUTexture *tex)
GPUFrameBuffer * GPU_framebuffer_create(const char *name)
struct GPUTexture GPUTexture
int GPU_texture_width(const GPUTexture *tex)
void GPU_texture_get_mipmap_size(GPUTexture *tex, int lvl, int *size)
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Sky Generate a procedural sky texture Noise Generate fractal Perlin noise Wave Generate procedural bands or rings with noise Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
GPUBatch * DRW_cache_fullscreen_quad_get(void)
const float * DRW_viewport_size_get(void)
bool DRW_state_is_image_render(void)
void DRW_viewport_request_redraw(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
void DRW_view_persmat_get(const DRWView *view, float mat[4][4], bool inverse)
void DRW_shgroup_call_instances(DRWShadingGroup *shgroup, Object *ob, struct GPUBatch *geom, uint count)
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)
void DRW_shgroup_uniform_int_copy(DRWShadingGroup *shgroup, const char *name, const int value)
void DRW_shgroup_uniform_texture_ex(DRWShadingGroup *shgroup, const char *name, const GPUTexture *tex, eGPUSamplerState sampler_state)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
void DRW_shgroup_uniform_int(DRWShadingGroup *shgroup, const char *name, const int *value, int arraysize)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_uniform_mat4(DRWShadingGroup *shgroup, const char *name, const float(*value)[4])
void DRW_shgroup_uniform_float(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
void DRW_shgroup_uniform_vec2(DRWShadingGroup *shgroup, const char *name, const float *value, int arraysize)
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)
void DRW_texture_ensure_2d(GPUTexture **tex, int w, int h, eGPUTextureFormat format, DRWTextureFlag flags)
GPUTexture * DRW_texture_pool_query_2d(int w, int h, eGPUTextureFormat format, DrawEngineType *engine_type)
void EEVEE_bloom_draw(EEVEE_Data *vedata)
int EEVEE_bloom_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_depth_of_field_draw(EEVEE_Data *vedata)
int EEVEE_depth_of_field_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, Object *camera)
static void simple_downsample_cube_cb(void *vedata, int level)
#define SETUP_BUFFER(tex, fb, fb_color)
#define CLEANUP_BUFFER(tex, fb, fb_color)
void EEVEE_create_minmax_buffer(EEVEE_Data *vedata, GPUTexture *depth_src, int layer)
void EEVEE_effects_downsample_radiance_buffer(EEVEE_Data *vedata, GPUTexture *texture_src)
void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
static void max_downsample_cb(void *vedata, int level)
struct GPUTexture * color_src
void EEVEE_draw_effects(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_effects_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *camera, const bool minimal)
void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int level)
static void EEVEE_velocity_resolve(EEVEE_Data *vedata)
static void downsample_radiance_cb(void *vedata, int level)
static struct @200 e_data
void EEVEE_effects_draw_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
struct GPUTexture * depth_src
DrawEngineType draw_engine_eevee_type
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx GPU_R32F
void EEVEE_lookdev_init(EEVEE_Data *vedata)
void EEVEE_lookdev_draw(EEVEE_Data *vedata)
void EEVEE_motion_blur_draw(EEVEE_Data *vedata)
int EEVEE_motion_blur_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
int EEVEE_occlusion_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_color_copy_sh_get(void)
void EEVEE_renderpasses_output_accumulate(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, bool post_effect)
struct GPUShader * EEVEE_shaders_effect_maxz_downlevel_sh_get(void)
#define MAX_SCREEN_BUFFERS_LOD_LEVEL
struct GPUShader * EEVEE_shaders_velocity_resolve_sh_get(void)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_sh_get(void)
int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_downsample_cube_sh_get(void)
#define SWAP_DOUBLE_BUFFERS()
struct GPUShader * EEVEE_shaders_effect_downsample_sh_get(void)
void EEVEE_subsurface_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata)
struct GPUShader * EEVEE_shaders_effect_maxz_copydepth_layer_sh_get(void)
@ EFFECT_DEPTH_DOUBLE_BUFFER
int EEVEE_screen_raytrace_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_temporal_sampling_update_matrices(EEVEE_Data *vedata)
void GPU_framebuffer_texture_attach(GPUFrameBuffer *fb, GPUTexture *tex, int slot, int mip)
void GPU_framebuffer_recursive_downsample(GPUFrameBuffer *gpu_fb, int max_lvl, void(*callback)(void *userData, int level), void *userData)
void *(* MEM_callocN)(size_t len, const char *str)
struct GPUTexture * depth
EEVEE_FramebufferList * fbl
struct GPUTexture * source_buffer
struct GPUTexture * final_tx
struct GPUFrameBuffer * target_buffer
EEVEE_EffectsFlag enabled_effects
struct GPUTexture * velocity_tx
struct GPUFrameBuffer * final_fb
struct GPUTexture * ssr_normal_input
struct DRWView * taa_view
struct EEVEE_MotionBlurData motion_blur
struct GPUFrameBuffer * main_fb
struct GPUFrameBuffer * taa_history_color_fb
struct GPUFrameBuffer * radiance_filtered_fb
struct GPUFrameBuffer * double_buffer_color_fb
struct GPUFrameBuffer * velocity_resolve_fb
struct GPUFrameBuffer * double_buffer_depth_fb
struct GPUFrameBuffer * downsample_fb
struct GPUFrameBuffer * taa_history_fb
struct GPUFrameBuffer * main_color_fb
struct GPUFrameBuffer * double_buffer_fb
struct GPUFrameBuffer * effect_fb
struct GPUFrameBuffer * velocity_fb
struct GPUFrameBuffer * maxzbuffer_fb
struct GPUFrameBuffer * effect_color_fb
struct EEVEE_MotionBlurData::@208 camera[3]
struct DRWPass * velocity_object
struct DRWPass * maxz_copydepth_ps
struct DRWPass * maxz_copydepth_layer_ps
struct DRWPass * velocity_resolve
struct DRWPass * maxz_downlevel_ps
struct DRWPass * color_copy_ps
struct DRWPass * color_downsample_cube_ps
struct DRWPass * color_downsample_ps
eViewLayerEEVEEPassType render_passes
struct EEVEE_PrivateData * g_data
struct EEVEE_EffectsInfo * effects
struct GPUTexture * filtered_radiance
struct GPUTexture * depth_double_buffer
struct GPUTexture * color_double_buffer
struct GPUTexture * maxzbuffer
struct GPUTexture * color_post
struct GPUTexture * taa_history
struct GPUTexture * color
struct EEVEE_CommonUniformBuffer common_data
struct GPUUniformBuf * combined
struct EEVEE_ViewLayerData::@210 renderpass_ubo
struct GPUUniformBuf * common_ubo