65 const int64_t num_probes = inst_.light_probes.planar_map_.size();
68 int2 extent = main_view_extent;
69 int layer_count = num_probes;
71 if (num_probes == 0) {
80 depth_tx_.ensure_layer_views();
84 int resource_index = 0;
85 int display_index = 0;
86 for (
PlanarProbe &probe : inst_.light_probes.planar_map_.values()) {
91 PlanarResources &res = resources_[resource_index];
95 probe.set_view(main_view, resource_index);
96 probe_planar_buf_[resource_index] = probe;
98 res.view.
sync(probe.viewmat, probe.winmat);
100 world_clip_buf_.plane = probe.reflection_clip_plane_get();
101 world_clip_buf_.push_update();
104 inst_.pipelines.deferred.closure_layer_count(),
105 inst_.pipelines.deferred.normal_layer_count());
117 inst_.pipelines.planar.render(
118 res.view, depth_tx_.layer_view(resource_index), res.gbuffer_fb, res.combined_fb, extent);
120 if (do_display_draw_ && probe.viewport_display) {
121 display_data_buf_.get_or_resize(display_index++) = {probe.plane_to_world, resource_index};
131 probe_planar_buf_[resource_index].layer_id = -1;
133 probe_planar_buf_.push_update();
135 do_display_draw_ = display_index > 0;
136 if (do_display_draw_) {
137 display_data_buf_.resize(display_index);
138 display_data_buf_.push_update();
144 if (!do_display_draw_) {
148 viewport_display_ps_.init();
151 viewport_display_ps_.framebuffer_set(&view_fb);
154 viewport_display_ps_.push_constant(
"world_coord_packed",
156 viewport_display_ps_.bind_resources(*
this);
157 viewport_display_ps_.bind_resources(inst_.sphere_probes);
158 viewport_display_ps_.bind_ssbo(
"display_data_buf", display_data_buf_);
159 viewport_display_ps_.draw_procedural(
GPU_PRIM_TRIS, 1, display_data_buf_.size() * 6);
161 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)
GPUTexture * layer_view(int layer)