72 const int64_t num_probes = inst_.light_probes.planar_map_.size();
75 int2 extent = main_view_extent;
76 int layer_count = num_probes;
78 if (num_probes == 0) {
85 radiance_tx_.ensure_2d_array(gpu::TextureFormat::UFLOAT_11_11_10, extent, layer_count, usage);
86 depth_tx_.ensure_2d_array(gpu::TextureFormat::SFLOAT_32_DEPTH, extent, layer_count, usage);
87 depth_tx_.ensure_layer_views();
89 do_display_draw_ = inst_.draw_overlays && num_probes > 0;
91 int resource_index = 0;
92 int display_index = 0;
93 for (
PlanarProbe &probe : inst_.light_probes.planar_map_.values()) {
98 PlanarResources &res = resources_[resource_index];
102 probe.set_view(main_view, resource_index);
103 probe_planar_buf_[resource_index] = probe;
105 res.view.
sync(probe.viewmat, probe.winmat);
107 world_clip_buf_.plane = probe.reflection_clip_plane_get();
108 world_clip_buf_.push_update();
111 inst_.pipelines.deferred.header_layer_count(),
112 inst_.pipelines.deferred.closure_layer_count(),
113 inst_.pipelines.deferred.normal_layer_count());
125 inst_.pipelines.planar.render(
126 res.view, depth_tx_.layer_view(resource_index), res.gbuffer_fb, res.combined_fb, extent);
128 if (do_display_draw_ && probe.viewport_display) {
129 display_data_buf_.get_or_resize(display_index++) = {probe.plane_to_world, resource_index};
139 probe_planar_buf_[resource_index].layer_id = -1;
141 probe_planar_buf_.push_update();
143 do_display_draw_ = display_index > 0;
144 if (do_display_draw_) {
145 display_data_buf_.resize(display_index);
146 display_data_buf_.push_update();
152 if (!do_display_draw_) {
156 viewport_display_ps_.init();
160 viewport_display_ps_.framebuffer_set(&view_fb);
163 viewport_display_ps_.push_constant(
"world_coord_packed",
165 viewport_display_ps_.bind_resources(*
this);
166 viewport_display_ps_.bind_resources(inst_.sphere_probes);
167 viewport_display_ps_.bind_ssbo(
"display_data_buf", display_data_buf_);
168 viewport_display_ps_.draw_procedural(
GPU_PRIM_TRIS, 1, display_data_buf_.size() * 6);
170 inst_.manager->submit(viewport_display_ps_,
view);
@ GPU_TEXTURE_USAGE_SHADER_READ
@ GPU_TEXTURE_USAGE_ATTACHMENT
void ensure(GPUAttachment depth=GPU_ATTACHMENT_NONE, GPUAttachment color1=GPU_ATTACHMENT_NONE, GPUAttachment color2=GPU_ATTACHMENT_NONE, GPUAttachment color3=GPU_ATTACHMENT_NONE, GPUAttachment color4=GPU_ATTACHMENT_NONE, GPUAttachment color5=GPU_ATTACHMENT_NONE, GPUAttachment color6=GPU_ATTACHMENT_NONE, GPUAttachment color7=GPU_ATTACHMENT_NONE, GPUAttachment color8=GPU_ATTACHMENT_NONE)
gpu::Texture * layer_view(int layer)
void DRW_viewport_request_redraw()