pub struct RenderDataBundleStorage {
pub observer_info: ObserverInfo,
pub bundles: Vec<RenderDataBundle>,
pub light_sources: Vec<LightSource>,
/* private fields */
}
Expand description
Bundle storage handles bundle generation for a scene before rendering. It is used to optimize rendering by reducing amount of state changes of OpenGL context.
Fields§
§observer_info: ObserverInfo
§bundles: Vec<RenderDataBundle>
A sorted list of bundles.
light_sources: Vec<LightSource>
Implementations§
Source§impl RenderDataBundleStorage
impl RenderDataBundleStorage
pub fn new_empty(observer_info: ObserverInfo) -> Self
Sourcepub fn from_graph(
graph: &Graph,
elapsed_time: f32,
observer_info: ObserverInfo,
render_pass_name: ImmutableString,
options: RenderDataBundleStorageOptions,
) -> Self
pub fn from_graph( graph: &Graph, elapsed_time: f32, observer_info: ObserverInfo, render_pass_name: ImmutableString, options: RenderDataBundleStorageOptions, ) -> Self
Creates a new render bundle storage from the given graph and observer info. It “asks” every node in the
graph one-by-one to give render data which is then put in the storage, sorted and ready for rendering.
Frustum culling is done on scene node side (crate::scene::node::NodeTrait::collect_render_data
).
pub fn write_global_uniform_blocks( &self, render_context: &mut BundleRenderContext<'_>, ) -> GlobalUniformData
Sourcepub fn render_to_frame_buffer<BundleFilter, InstanceFilter>(
&self,
server: &dyn GraphicsServer,
geometry_cache: &mut GeometryCache,
shader_cache: &mut ShaderCache,
bundle_filter: BundleFilter,
instance_filter: InstanceFilter,
render_context: BundleRenderContext<'_>,
) -> Result<RenderPassStatistics, FrameworkError>where
BundleFilter: FnMut(&RenderDataBundle) -> bool,
InstanceFilter: FnMut(&SurfaceInstanceData) -> bool,
pub fn render_to_frame_buffer<BundleFilter, InstanceFilter>(
&self,
server: &dyn GraphicsServer,
geometry_cache: &mut GeometryCache,
shader_cache: &mut ShaderCache,
bundle_filter: BundleFilter,
instance_filter: InstanceFilter,
render_context: BundleRenderContext<'_>,
) -> Result<RenderPassStatistics, FrameworkError>where
BundleFilter: FnMut(&RenderDataBundle) -> bool,
InstanceFilter: FnMut(&SurfaceInstanceData) -> bool,
Draws the entire bundle set to the specified frame buffer with the specified rendering environment.
Trait Implementations§
Source§impl RenderDataBundleStorageTrait for RenderDataBundleStorage
impl RenderDataBundleStorageTrait for RenderDataBundleStorage
Source§fn push_triangles(
&mut self,
layout: &[VertexAttributeDescriptor],
material: &MaterialResource,
render_path: RenderPath,
sort_index: u64,
node_handle: Handle<Node>,
func: &mut dyn FnMut(VertexBufferRefMut<'_>, TriangleBufferRefMut<'_>),
)
fn push_triangles( &mut self, layout: &[VertexAttributeDescriptor], material: &MaterialResource, render_path: RenderPath, sort_index: u64, node_handle: Handle<Node>, func: &mut dyn FnMut(VertexBufferRefMut<'_>, TriangleBufferRefMut<'_>), )
Adds a new mesh to the bundle storage using the given set of vertices and triangles. This method automatically creates a render bundle according to a hash of the following parameters:
- Material
- Vertex Type
- Render Path
If one of these parameters is different, then a new bundle will be created and used to store the given vertices and indices. If an appropriate bundle exists, the method will store the given vertices and the triangles in it.
§When to use
This method is used to reduce amount of draw calls of underlying GAPI, by merging small portions of data into one big block that shares drawing parameters and can be rendered in a single draw call. The vertices in this case should be pre-processed by applying world transform to them.
Do not use this method if you have a mesh with lots of vertices and triangles, because pre-processing them on CPU could take more time than rendering them directly on GPU one-by-one.
Source§fn push(
&mut self,
data: &SurfaceResource,
material: &MaterialResource,
render_path: RenderPath,
sort_index: u64,
instance_data: SurfaceInstanceData,
)
fn push( &mut self, data: &SurfaceResource, material: &MaterialResource, render_path: RenderPath, sort_index: u64, instance_data: SurfaceInstanceData, )
Adds a new surface instance to the storage. The method will automatically put the instance in the appropriate bundle. Bundle selection is done using the material, surface data, render path. If only one of these parameters is different, then the surface instance will be put in a separate bundle.
Auto Trait Implementations§
impl Freeze for RenderDataBundleStorage
impl !RefUnwindSafe for RenderDataBundleStorage
impl Send for RenderDataBundleStorage
impl Sync for RenderDataBundleStorage
impl Unpin for RenderDataBundleStorage
impl !UnwindSafe for RenderDataBundleStorage
Blanket Implementations§
Source§impl<T> AsyncTaskResult for T
impl<T> AsyncTaskResult for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Any
. Could be used to downcast a trait object
to a particular type.fn into_any(self: Box<T>) -> Box<dyn Any>
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FieldValue for Twhere
T: 'static,
impl<T> FieldValue for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.