use super::{FrameData, SceneEffects, ViewportId, ViewportRenderer};
pub struct ScenePreparedToken {
_private: (),
}
pub struct OwnedPath<'r> {
pub(super) renderer: &'r mut ViewportRenderer,
}
pub struct PassPath<'r> {
pub(super) renderer: &'r mut ViewportRenderer,
}
pub struct PassView<'r> {
pub(super) renderer: &'r ViewportRenderer,
}
impl<'r> OwnedPath<'r> {
pub fn render(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
output_view: &wgpu::TextureView,
frame: &FrameData,
) -> wgpu::CommandBuffer {
self.renderer.render(device, queue, output_view, frame)
}
pub fn prepare_scene(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
frame: &FrameData,
scene_effects: &SceneEffects<'_>,
) -> ScenePreparedToken {
self.renderer
.prepare_scene(device, queue, frame, scene_effects);
ScenePreparedToken { _private: () }
}
pub fn prepare_viewport(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
_token: &ScenePreparedToken,
id: ViewportId,
frame: &FrameData,
) {
self.renderer.prepare_viewport(device, queue, id, frame);
}
pub fn render_viewport(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
output_view: &wgpu::TextureView,
id: ViewportId,
frame: &FrameData,
) -> wgpu::CommandBuffer {
self.renderer
.render_viewport(device, queue, output_view, id, frame)
}
}
impl<'r> PassPath<'r> {
pub fn prepare(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
frame: &FrameData,
) -> Vec<wgpu::CommandBuffer> {
self.renderer.prepare_callback(device, queue, frame)
}
pub fn paint<'rp>(&self, render_pass: &mut wgpu::RenderPass<'rp>, frame: &FrameData) {
self.renderer.paint_callback(render_pass, frame);
}
pub fn prepare_scene(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
frame: &FrameData,
scene_effects: &SceneEffects<'_>,
) -> ScenePreparedToken {
self.renderer
.prepare_scene(device, queue, frame, scene_effects);
ScenePreparedToken { _private: () }
}
pub fn prepare_viewport(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
_token: &ScenePreparedToken,
id: ViewportId,
frame: &FrameData,
) {
self.renderer.prepare_viewport(device, queue, id, frame);
}
pub fn paint_viewport<'rp>(
&self,
render_pass: &mut wgpu::RenderPass<'rp>,
id: ViewportId,
frame: &FrameData,
) {
self.renderer.paint_viewport_to(render_pass, id, frame);
}
pub fn prepare_hdr_viewport(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
id: ViewportId,
frame: &FrameData,
) -> wgpu::CommandBuffer {
self.renderer
.prepare_hdr_callback_viewport(device, queue, id, frame)
}
}
impl<'r> PassView<'r> {
pub fn paint<'rp>(&self, render_pass: &mut wgpu::RenderPass<'rp>, frame: &FrameData) {
self.renderer.paint_callback(render_pass, frame);
}
pub fn paint_viewport<'rp>(
&self,
render_pass: &mut wgpu::RenderPass<'rp>,
id: ViewportId,
frame: &FrameData,
) {
self.renderer.paint_viewport_to(render_pass, id, frame);
}
pub fn paint_hdr_blit<'rp>(&self, render_pass: &mut wgpu::RenderPass<'rp>, frame: &FrameData) {
self.renderer.paint_hdr_blit(render_pass, frame);
}
pub fn paint_hdr_blit_no_ds<'rp>(
&self,
render_pass: &mut wgpu::RenderPass<'rp>,
frame: &FrameData,
) {
self.renderer.paint_hdr_blit_no_ds(render_pass, frame);
}
}