Trait rafx_renderer::RenderFeaturePlugin
source · pub trait RenderFeaturePlugin: Send + Sync {
Show 17 methods
// Required methods
fn feature_debug_constants(&self) -> &'static RenderFeatureDebugConstants;
fn feature_index(&self) -> RenderFeatureIndex;
fn is_view_relevant(&self, view: &RenderView) -> bool;
fn requires_visible_render_objects(&self) -> bool;
fn new_frame_packet(
&self,
frame_packet_size: &FramePacketSize
) -> Box<dyn RenderFeatureFramePacket>;
fn new_extract_job<'extract>(
&self,
extract_context: &RenderJobExtractContext<'extract>,
frame_packet: Box<dyn RenderFeatureFramePacket>
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract>;
fn new_submit_packet(
&self,
frame_packet: &Box<dyn RenderFeatureFramePacket>
) -> Box<dyn RenderFeatureSubmitPacket>;
fn new_prepare_job<'prepare>(
&self,
prepare_context: &RenderJobPrepareContext<'prepare>,
frame_packet: Box<dyn RenderFeatureFramePacket>,
submit_packet: Box<dyn RenderFeatureSubmitPacket>
) -> Arc<dyn RenderFeaturePrepareJob<'prepare> + 'prepare>;
fn new_write_job<'write>(
&self,
write_context: &RenderJobWriteContext<'write>,
frame_packet: Box<dyn RenderFeatureFramePacket>,
submit_packet: Box<dyn RenderFeatureSubmitPacket>
) -> Arc<dyn RenderFeatureWriteJob<'write> + 'write>;
// Provided methods
fn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool { ... }
fn add_asset_paths(&self, _asset_paths: &mut Vec<PathBuf>) { ... }
fn configure_render_registry(
&self,
render_registry: RenderRegistryBuilder
) -> RenderRegistryBuilder { ... }
fn initialize_static_resources(
&self,
_renderer_load_context: &RendererLoadContext,
_asset_manager: &mut AssetManager,
_asset_resource: &mut AssetResource,
_extract_resources: &ExtractResources<'_>,
_render_resources: &mut RenderResources,
_upload: &mut RafxTransferUpload
) -> RafxResult<()> { ... }
fn prepare_renderer_destroy(
&self,
_render_resources: &RenderResources
) -> RafxResult<()> { ... }
fn add_render_views(
&self,
_extract_resources: &ExtractResources<'_>,
_render_resources: &RenderResources,
_render_view_set: &RenderViewSet,
_render_views: &mut Vec<RenderView>
) { ... }
fn calculate_frame_packet_size<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
render_object_instance_object_ids: &mut RenderObjectInstanceObjectIds,
frame_packet_size: &mut FramePacketSize
) { ... }
fn populate_frame_packet<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
_frame_packet_size: &FramePacketSize,
frame_packet: &mut Box<dyn RenderFeatureFramePacket>
) { ... }
}
Expand description
A RenderFeaturePlugin
defines a RenderFeature
for the Renderer
. The RenderFeaturePlugin
completely encapsulates the logic needed by the Renderer
, RenderFrameJob
, and RendererThreadPool
.
§Initialization
configure_render_registry
and initialize_static_resources
setup the RenderFeature
for usage with
the Renderer
.
§Extract
is_relevant
, is_view_relevant
, and requires_visible_render_objects
are used to identify which
RenderView
s need to be included in the RenderFeature
’s frame packet. Then, calculate_frame_packet_size
is used to size the FramePacket
, new_frame_packet
allocates the memory for the FramePacket
, and
populate_frame_packet
fills the FramePacket
with the mapping of RenderObjectInstance
and
RenderObjectInstancePerView
for each ViewPacket
. new_extract_job
wraps the FramePacket
to
return a RenderFeatureExtractJob
.
§Prepare
new_submit_packet
sizes and allocates the memory for a SubmitPacket
using the FramePacket
as
a reference. new_prepare_job
wraps the FramePacket
and SubmitPacket
to return a RenderFeaturePrepareJob
.
§Write
new_write_job
wraps the FramePacket
and SubmitPacket
to return a RenderFeatureWriteJob
.
Required Methods§
fn feature_debug_constants(&self) -> &'static RenderFeatureDebugConstants
fn feature_index(&self) -> RenderFeatureIndex
sourcefn is_view_relevant(&self, view: &RenderView) -> bool
fn is_view_relevant(&self, view: &RenderView) -> bool
Returns true
if the RenderView
should be included in the FramePacket
for this RenderFeature
.
This is normally implemented by checking if the RenderView
’s RenderPhaseMask
includes the
RenderPhase
s needed by the RenderFeature
.
sourcefn requires_visible_render_objects(&self) -> bool
fn requires_visible_render_objects(&self) -> bool
Returns true
if this RenderFeature
requires at least one RenderObject
associated with this
RenderFeature
in the RenderViewVisibilityQuery
in order to include the RenderView
in the
FramePacket
for this RenderFeature
. This is normally true
if the RenderFeature
defines
a RenderObjectSet
and false
otherwise.
sourcefn new_frame_packet(
&self,
frame_packet_size: &FramePacketSize
) -> Box<dyn RenderFeatureFramePacket>
fn new_frame_packet( &self, frame_packet_size: &FramePacketSize ) -> Box<dyn RenderFeatureFramePacket>
Allocates the memory for the FramePacket
.
sourcefn new_extract_job<'extract>(
&self,
extract_context: &RenderJobExtractContext<'extract>,
frame_packet: Box<dyn RenderFeatureFramePacket>
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract>
fn new_extract_job<'extract>( &self, extract_context: &RenderJobExtractContext<'extract>, frame_packet: Box<dyn RenderFeatureFramePacket> ) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract>
Returns a RenderFeatureExtractJob
wrapping the FramePacket
.
sourcefn new_submit_packet(
&self,
frame_packet: &Box<dyn RenderFeatureFramePacket>
) -> Box<dyn RenderFeatureSubmitPacket>
fn new_submit_packet( &self, frame_packet: &Box<dyn RenderFeatureFramePacket> ) -> Box<dyn RenderFeatureSubmitPacket>
Determines the size of the SubmitPacket
according to the size of the FramePacket
and
allocates the memory for it. The SubmitPacket
is populated by the RenderFeaturePrepareJob
so there is no equivalent to populate_frame_packet
.
sourcefn new_prepare_job<'prepare>(
&self,
prepare_context: &RenderJobPrepareContext<'prepare>,
frame_packet: Box<dyn RenderFeatureFramePacket>,
submit_packet: Box<dyn RenderFeatureSubmitPacket>
) -> Arc<dyn RenderFeaturePrepareJob<'prepare> + 'prepare>
fn new_prepare_job<'prepare>( &self, prepare_context: &RenderJobPrepareContext<'prepare>, frame_packet: Box<dyn RenderFeatureFramePacket>, submit_packet: Box<dyn RenderFeatureSubmitPacket> ) -> Arc<dyn RenderFeaturePrepareJob<'prepare> + 'prepare>
Returns a RenderFeaturePrepareJob
wrapping the FramePacket
and SubmitPacket
.
sourcefn new_write_job<'write>(
&self,
write_context: &RenderJobWriteContext<'write>,
frame_packet: Box<dyn RenderFeatureFramePacket>,
submit_packet: Box<dyn RenderFeatureSubmitPacket>
) -> Arc<dyn RenderFeatureWriteJob<'write> + 'write>
fn new_write_job<'write>( &self, write_context: &RenderJobWriteContext<'write>, frame_packet: Box<dyn RenderFeatureFramePacket>, submit_packet: Box<dyn RenderFeatureSubmitPacket> ) -> Arc<dyn RenderFeatureWriteJob<'write> + 'write>
Returns a RenderFeatureWriteJob
wrapping the FramePacket
and SubmitPacket
.
Provided Methods§
sourcefn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool
fn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool
Returns true
if the RenderView
represented by the RenderViewVisibilityQuery
should be
included in the FramePacket
for this RenderFeature
. Most features should only need to
implement is_view_relevant
and requires_visible_render_objects
.
fn add_asset_paths(&self, _asset_paths: &mut Vec<PathBuf>)
fn configure_render_registry( &self, render_registry: RenderRegistryBuilder ) -> RenderRegistryBuilder
fn initialize_static_resources( &self, _renderer_load_context: &RendererLoadContext, _asset_manager: &mut AssetManager, _asset_resource: &mut AssetResource, _extract_resources: &ExtractResources<'_>, _render_resources: &mut RenderResources, _upload: &mut RafxTransferUpload ) -> RafxResult<()>
fn prepare_renderer_destroy( &self, _render_resources: &RenderResources ) -> RafxResult<()>
fn add_render_views( &self, _extract_resources: &ExtractResources<'_>, _render_resources: &RenderResources, _render_view_set: &RenderViewSet, _render_views: &mut Vec<RenderView> )
sourcefn calculate_frame_packet_size<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
render_object_instance_object_ids: &mut RenderObjectInstanceObjectIds,
frame_packet_size: &mut FramePacketSize
)
fn calculate_frame_packet_size<'extract>( &self, _extract_context: &RenderJobExtractContext<'extract>, visibility_results: &Vec<RenderViewVisibilityQuery>, render_object_instance_object_ids: &mut RenderObjectInstanceObjectIds, frame_packet_size: &mut FramePacketSize )
Determines the unique set of RenderObjectInstance
s in FramePacket
and the size of each
ViewPacket
in the FramePacket
.
sourcefn populate_frame_packet<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
_frame_packet_size: &FramePacketSize,
frame_packet: &mut Box<dyn RenderFeatureFramePacket>
)
fn populate_frame_packet<'extract>( &self, _extract_context: &RenderJobExtractContext<'extract>, visibility_results: &Vec<RenderViewVisibilityQuery>, _frame_packet_size: &FramePacketSize, frame_packet: &mut Box<dyn RenderFeatureFramePacket> )
Creates the mapping of RenderObjectInstance
and RenderObjectInstancePerView
in the
FramePacket
. This is done separately from new_frame_packet
so that all of the frame
packets can be allocated at once and then populated in parallel.