Trait rafx_renderer::RenderFeaturePlugin [−][src]
pub trait RenderFeaturePlugin: Send + Sync {}Show 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>; fn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool { ... } fn configure_render_registry(
&self,
render_registry: RenderRegistryBuilder
) -> RenderRegistryBuilder { ... } fn initialize_static_resources(
&self,
_asset_manager: &mut AssetManager,
_asset_resource: &mut AssetResource,
_extract_resources: &ExtractResources<'_>,
_render_resources: &mut ResourceMap,
_upload: &mut RafxTransferUpload
) -> 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
[src]
fn feature_debug_constants(&self) -> &'static RenderFeatureDebugConstants
[src]fn feature_index(&self) -> RenderFeatureIndex
[src]
fn feature_index(&self) -> RenderFeatureIndex
[src]fn is_view_relevant(&self, view: &RenderView) -> bool
[src]
fn is_view_relevant(&self, view: &RenderView) -> bool
[src]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
.
fn requires_visible_render_objects(&self) -> bool
[src]
fn requires_visible_render_objects(&self) -> bool
[src]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.
fn new_frame_packet(
&self,
frame_packet_size: &FramePacketSize
) -> Box<dyn RenderFeatureFramePacket>
[src]
fn new_frame_packet(
&self,
frame_packet_size: &FramePacketSize
) -> Box<dyn RenderFeatureFramePacket>
[src]Allocates the memory for the FramePacket
.
fn new_extract_job<'extract>(
&self,
extract_context: &RenderJobExtractContext<'extract>,
frame_packet: Box<dyn RenderFeatureFramePacket>
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract>
[src]
fn new_extract_job<'extract>(
&self,
extract_context: &RenderJobExtractContext<'extract>,
frame_packet: Box<dyn RenderFeatureFramePacket>
) -> Arc<dyn RenderFeatureExtractJob<'extract> + 'extract>
[src]Returns a RenderFeatureExtractJob
wrapping the FramePacket
.
fn new_submit_packet(
&self,
frame_packet: &Box<dyn RenderFeatureFramePacket>
) -> Box<dyn RenderFeatureSubmitPacket>
[src]
fn new_submit_packet(
&self,
frame_packet: &Box<dyn RenderFeatureFramePacket>
) -> Box<dyn RenderFeatureSubmitPacket>
[src]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
.
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>
[src]
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>
[src]Returns a RenderFeaturePrepareJob
wrapping the FramePacket
and SubmitPacket
.
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>
[src]
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>
[src]Returns a RenderFeatureWriteJob
wrapping the FramePacket
and SubmitPacket
.
Provided methods
fn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool
[src]
fn is_relevant(&self, view_visibility: &RenderViewVisibilityQuery) -> bool
[src]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 configure_render_registry(
&self,
render_registry: RenderRegistryBuilder
) -> RenderRegistryBuilder
[src]
fn configure_render_registry(
&self,
render_registry: RenderRegistryBuilder
) -> RenderRegistryBuilder
[src]fn initialize_static_resources(
&self,
_asset_manager: &mut AssetManager,
_asset_resource: &mut AssetResource,
_extract_resources: &ExtractResources<'_>,
_render_resources: &mut ResourceMap,
_upload: &mut RafxTransferUpload
) -> RafxResult<()>
[src]
fn initialize_static_resources(
&self,
_asset_manager: &mut AssetManager,
_asset_resource: &mut AssetResource,
_extract_resources: &ExtractResources<'_>,
_render_resources: &mut ResourceMap,
_upload: &mut RafxTransferUpload
) -> RafxResult<()>
[src]fn add_render_views(
&self,
_extract_resources: &ExtractResources<'_>,
_render_resources: &RenderResources,
_render_view_set: &RenderViewSet,
_render_views: &mut Vec<RenderView>
)
[src]
fn add_render_views(
&self,
_extract_resources: &ExtractResources<'_>,
_render_resources: &RenderResources,
_render_view_set: &RenderViewSet,
_render_views: &mut Vec<RenderView>
)
[src]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
)
[src]
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
)
[src]Determines the unique set of RenderObjectInstance
s in FramePacket
and the size of each
ViewPacket
in the FramePacket
.
fn populate_frame_packet<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
_frame_packet_size: &FramePacketSize,
frame_packet: &mut Box<dyn RenderFeatureFramePacket>
)
[src]
fn populate_frame_packet<'extract>(
&self,
_extract_context: &RenderJobExtractContext<'extract>,
visibility_results: &Vec<RenderViewVisibilityQuery>,
_frame_packet_size: &FramePacketSize,
frame_packet: &mut Box<dyn RenderFeatureFramePacket>
)
[src]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.