mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 22:18:33 +00:00
support downcasting RenderResourceContext ... this should be a part of std!
This commit is contained in:
parent
1f5f432e6c
commit
c213865cbf
4 changed files with 12 additions and 19 deletions
|
@ -27,4 +27,5 @@ glam = "0.8.6"
|
||||||
zerocopy = "0.3"
|
zerocopy = "0.3"
|
||||||
bitflags = "1.0"
|
bitflags = "1.0"
|
||||||
# TODO: replace once_cell with std equivalent if/when this lands: https://github.com/rust-lang/rfcs/pull/2788
|
# TODO: replace once_cell with std equivalent if/when this lands: https://github.com/rust-lang/rfcs/pull/2788
|
||||||
once_cell = "1.3.1"
|
once_cell = "1.3.1"
|
||||||
|
downcast-rs = "1.1.1"
|
|
@ -5,35 +5,24 @@ use crate::{
|
||||||
};
|
};
|
||||||
use bevy_asset::{AssetStorage, Handle, HandleUntyped};
|
use bevy_asset::{AssetStorage, Handle, HandleUntyped};
|
||||||
use bevy_window::{Window, WindowId};
|
use bevy_window::{Window, WindowId};
|
||||||
use std::any::Any;
|
use downcast_rs::{Downcast, impl_downcast};
|
||||||
|
|
||||||
pub struct GlobalRenderResourceContext {
|
pub struct GlobalRenderResourceContext {
|
||||||
pub context: Box<dyn Any + Send + Sync + 'static>,
|
pub context: Box<dyn RenderResourceContext>,
|
||||||
// TODO: why doesn't this work?
|
|
||||||
// pub context: Box<dyn RenderResourceContext + Send + Sync + 'static>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GlobalRenderResourceContext {
|
impl GlobalRenderResourceContext {
|
||||||
pub fn new<T>(context: T) -> GlobalRenderResourceContext
|
pub fn new<T>(context: T) -> GlobalRenderResourceContext
|
||||||
where
|
where
|
||||||
T: RenderResourceContext + Send + Sync + 'static,
|
T: RenderResourceContext,
|
||||||
{
|
{
|
||||||
GlobalRenderResourceContext {
|
GlobalRenderResourceContext {
|
||||||
context: Box::new(context),
|
context: Box::new(context),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub fn render_resources_mut(&mut self) -> &dyn RenderResourceContext {
|
|
||||||
// (&mut self.context).downcast_mut::<dyn RenderResourceContext>()
|
|
||||||
// }
|
|
||||||
|
|
||||||
// pub fn downcast_mut(&self) -> &dyn RenderResourceContext {
|
|
||||||
// self.context.downcast_ref::<RenderResourceContext>()
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Rename to RenderResources after cleaning up AssetResources rename
|
pub trait RenderResourceContext: Downcast + Send + Sync + 'static {
|
||||||
pub trait RenderResourceContext: Any {
|
|
||||||
fn create_swap_chain(&mut self, window: &Window);
|
fn create_swap_chain(&mut self, window: &Window);
|
||||||
fn next_swap_chain_texture(&mut self, window_id: WindowId);
|
fn next_swap_chain_texture(&mut self, window_id: WindowId);
|
||||||
fn drop_swap_chain_texture(&mut self, window_id: WindowId);
|
fn drop_swap_chain_texture(&mut self, window_id: WindowId);
|
||||||
|
@ -90,3 +79,5 @@ impl dyn RenderResourceContext {
|
||||||
self.get_asset_resource_untyped(handle.into(), index)
|
self.get_asset_resource_untyped(handle.into(), index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl_downcast!(RenderResourceContext);
|
|
@ -3,7 +3,7 @@ use crate::WgpuResources;
|
||||||
use bevy_asset::{AssetStorage, Handle, HandleUntyped};
|
use bevy_asset::{AssetStorage, Handle, HandleUntyped};
|
||||||
use bevy_render::{
|
use bevy_render::{
|
||||||
render_resource::{BufferInfo, RenderResource, ResourceInfo},
|
render_resource::{BufferInfo, RenderResource, ResourceInfo},
|
||||||
renderer_2::RenderResourceContext,
|
renderer_2::{RenderResourceContext},
|
||||||
shader::Shader,
|
shader::Shader,
|
||||||
texture::{SamplerDescriptor, TextureDescriptor},
|
texture::{SamplerDescriptor, TextureDescriptor},
|
||||||
};
|
};
|
||||||
|
@ -25,6 +25,8 @@ impl WgpuRenderResourceContext {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// impl AnyRenderResourceContext for WgpuRenderResourceContext {}
|
||||||
|
|
||||||
impl RenderResourceContext for WgpuRenderResourceContext {
|
impl RenderResourceContext for WgpuRenderResourceContext {
|
||||||
fn create_sampler(&mut self, sampler_descriptor: &SamplerDescriptor) -> RenderResource {
|
fn create_sampler(&mut self, sampler_descriptor: &SamplerDescriptor) -> RenderResource {
|
||||||
self.wgpu_resources
|
self.wgpu_resources
|
||||||
|
|
|
@ -12,7 +12,6 @@ use bevy_render::{
|
||||||
use bevy_window::{WindowCreated, WindowResized, Windows};
|
use bevy_window::{WindowCreated, WindowResized, Windows};
|
||||||
use legion::prelude::*;
|
use legion::prelude::*;
|
||||||
use std::{collections::HashSet, ops::Deref, sync::Arc};
|
use std::{collections::HashSet, ops::Deref, sync::Arc};
|
||||||
|
|
||||||
pub struct WgpuRenderer {
|
pub struct WgpuRenderer {
|
||||||
pub device: Arc<wgpu::Device>,
|
pub device: Arc<wgpu::Device>,
|
||||||
pub queue: wgpu::Queue,
|
pub queue: wgpu::Queue,
|
||||||
|
@ -85,7 +84,6 @@ impl WgpuRenderer {
|
||||||
let world = &*world;
|
let world = &*world;
|
||||||
let resources = &*resources;
|
let resources = &*resources;
|
||||||
actual_thread_count += 1;
|
actual_thread_count += 1;
|
||||||
// println!("spawn {}", resource_provider_chunk.len());
|
|
||||||
let render_resource_context = render_resource_context.clone();
|
let render_resource_context = render_resource_context.clone();
|
||||||
s.spawn(move |_| {
|
s.spawn(move |_| {
|
||||||
let mut render_context =
|
let mut render_context =
|
||||||
|
@ -273,6 +271,7 @@ impl WgpuRenderer {
|
||||||
.context
|
.context
|
||||||
.downcast_mut::<WgpuRenderResourceContext>()
|
.downcast_mut::<WgpuRenderResourceContext>()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mut render_context =
|
let mut render_context =
|
||||||
WgpuRenderContext::new(self.device.clone(), render_resource_context.clone());
|
WgpuRenderContext::new(self.device.clone(), render_resource_context.clone());
|
||||||
if let Some(command_encoder) = encoder.take() {
|
if let Some(command_encoder) = encoder.take() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue