Skip to content

Commit 11e9eb0

Browse files
authored
Merge pull request #1 from IceSentry/erased_materials_minor_changes
2 parents 1e6b8ed + 5d939a2 commit 11e9eb0

File tree

3 files changed

+41
-110
lines changed

3 files changed

+41
-110
lines changed

crates/bevy_pbr/src/extended_material.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -383,19 +383,17 @@ impl<B: Material, E: MaterialExtension> Material for ExtendedMaterial<B, E> {
383383
key: MaterialPipelineKey<Self>,
384384
) -> Result<(), SpecializedMeshPipelineError> {
385385
// Call the base material's specialize function
386-
let MaterialPipeline { mesh_pipeline } = pipeline.clone();
387-
let base_pipeline = MaterialPipeline { mesh_pipeline };
388386
let base_key = MaterialPipelineKey::<B> {
389387
mesh_key: key.mesh_key,
390388
bind_group_data: key.bind_group_data.base,
391389
};
392-
B::specialize(&base_pipeline, descriptor, layout, base_key)?;
390+
B::specialize(pipeline, descriptor, layout, base_key)?;
393391

394392
// Call the extended material's specialize function afterwards
395-
let MaterialPipeline { mesh_pipeline, .. } = pipeline.clone();
396-
397393
E::specialize(
398-
&MaterialExtensionPipeline { mesh_pipeline },
394+
&MaterialExtensionPipeline {
395+
mesh_pipeline: pipeline.mesh_pipeline.clone(),
396+
},
399397
descriptor,
400398
layout,
401399
MaterialExtensionKey {

crates/bevy_pbr/src/material.rs

Lines changed: 29 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -303,23 +303,6 @@ impl Plugin for MaterialsPlugin {
303303
queue_shadows.in_set(RenderSystems::QueueMeshes),
304304
),
305305
);
306-
307-
#[cfg(feature = "meshlet")]
308-
render_app.add_systems(
309-
Render,
310-
queue_material_meshlet_meshes
311-
.in_set(RenderSystems::QueueMeshes)
312-
.run_if(resource_exists::<InstanceManager>),
313-
);
314-
315-
#[cfg(feature = "meshlet")]
316-
render_app.add_systems(
317-
Render,
318-
prepare_material_meshlet_meshes_main_opaque_pass
319-
.in_set(RenderSystems::QueueMeshes)
320-
.before(queue_material_meshlet_meshes)
321-
.run_if(resource_exists::<InstanceManager>),
322-
);
323306
}
324307
}
325308

@@ -1507,97 +1490,40 @@ where
15071490
}
15081491

15091492
let mut shaders = HashMap::new();
1510-
1511-
let vertex_shader = match M::vertex_shader() {
1512-
ShaderRef::Default => None,
1513-
ShaderRef::Handle(handle) => Some(handle),
1514-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1515-
};
1516-
if let Some(vertex_shader) = vertex_shader {
1517-
shaders.insert(MaterialVertexShader.intern(), vertex_shader);
1518-
}
1519-
let fragment_shader = match M::fragment_shader() {
1520-
ShaderRef::Default => None,
1521-
ShaderRef::Handle(handle) => Some(handle),
1522-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1523-
};
1524-
if let Some(fragment_shader) = fragment_shader {
1525-
shaders.insert(MaterialFragmentShader.intern(), fragment_shader);
1526-
}
1527-
let prepass_material_vertex_shader = match M::prepass_vertex_shader() {
1528-
ShaderRef::Default => None,
1529-
ShaderRef::Handle(handle) => Some(handle),
1530-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1531-
};
1532-
if let Some(prepass_material_vertex_shader) = prepass_material_vertex_shader {
1533-
shaders.insert(PrepassVertexShader.intern(), prepass_material_vertex_shader);
1534-
}
1535-
let prepass_material_fragment_shader = match M::prepass_fragment_shader() {
1536-
ShaderRef::Default => None,
1537-
ShaderRef::Handle(handle) => Some(handle),
1538-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1539-
};
1540-
if let Some(prepass_material_fragment_shader) = prepass_material_fragment_shader {
1541-
shaders.insert(
1542-
PrepassFragmentShader.intern(),
1543-
prepass_material_fragment_shader,
1544-
);
1545-
}
1546-
let deferred_material_vertex_shader = match M::deferred_vertex_shader() {
1547-
ShaderRef::Default => None,
1548-
ShaderRef::Handle(handle) => Some(handle),
1549-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1550-
};
1551-
if let Some(deferred_material_vertex_shader) = deferred_material_vertex_shader {
1552-
shaders.insert(
1553-
DeferredVertexShader.intern(),
1554-
deferred_material_vertex_shader,
1555-
);
1556-
}
1557-
let deferred_material_fragment_shader = match M::deferred_fragment_shader() {
1558-
ShaderRef::Default => None,
1559-
ShaderRef::Handle(handle) => Some(handle),
1560-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1561-
};
1562-
if let Some(deferred_material_fragment_shader) = deferred_material_fragment_shader {
1563-
shaders.insert(
1564-
DeferredFragmentShader.intern(),
1565-
deferred_material_fragment_shader,
1566-
);
1567-
}
1568-
#[cfg(feature = "meshlet")]
1569-
{
1570-
let meshlet_fragment_shader = match M::meshlet_mesh_fragment_shader() {
1571-
ShaderRef::Default => None,
1572-
ShaderRef::Handle(handle) => Some(handle),
1573-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1574-
};
1575-
if let Some(meshlet_fragment_shader) = meshlet_fragment_shader {
1576-
shaders.insert(MeshletFragmentShader.intern(), meshlet_fragment_shader);
1577-
}
1578-
let meshlet_prepass_fragment_shader = match M::meshlet_mesh_prepass_fragment_shader() {
1579-
ShaderRef::Default => None,
1580-
ShaderRef::Handle(handle) => Some(handle),
1581-
ShaderRef::Path(path) => Some(asset_server.load(path)),
1582-
};
1583-
if let Some(meshlet_prepass_fragment_shader) = meshlet_prepass_fragment_shader {
1584-
shaders.insert(
1585-
MeshletPrepassFragmentShader.intern(),
1586-
meshlet_prepass_fragment_shader,
1587-
);
1588-
}
1589-
let meshlet_deferred_fragment_shader = match M::meshlet_mesh_deferred_fragment_shader()
1590-
{
1493+
let mut add_shader = |label: InternedShaderLabel, shader_ref: ShaderRef| {
1494+
let mayber_shader = match shader_ref {
15911495
ShaderRef::Default => None,
15921496
ShaderRef::Handle(handle) => Some(handle),
15931497
ShaderRef::Path(path) => Some(asset_server.load(path)),
15941498
};
1595-
if let Some(meshlet_deferred_fragment_shader) = meshlet_deferred_fragment_shader {
1596-
shaders.insert(
1597-
MeshletDeferredFragmentShader.intern(),
1598-
meshlet_deferred_fragment_shader,
1599-
);
1499+
if let Some(shader) = mayber_shader {
1500+
shaders.insert(label, shader);
16001501
}
1502+
};
1503+
add_shader(MaterialVertexShader.intern(), M::vertex_shader());
1504+
add_shader(MaterialFragmentShader.intern(), M::fragment_shader());
1505+
add_shader(PrepassVertexShader.intern(), M::prepass_vertex_shader());
1506+
add_shader(PrepassFragmentShader.intern(), M::prepass_fragment_shader());
1507+
add_shader(DeferredVertexShader.intern(), M::deferred_vertex_shader());
1508+
add_shader(
1509+
DeferredFragmentShader.intern(),
1510+
M::deferred_fragment_shader(),
1511+
);
1512+
1513+
#[cfg(feature = "meshlet")]
1514+
{
1515+
add_shader(
1516+
MeshletFragmentShader.intern(),
1517+
M::meshlet_mesh_fragment_shader(),
1518+
);
1519+
add_shader(
1520+
MeshletPrepassFragmentShader.intern(),
1521+
M::meshlet_mesh_prepass_fragment_shader(),
1522+
);
1523+
add_shader(
1524+
MeshletDeferredFragmentShader.intern(),
1525+
M::meshlet_mesh_deferred_fragment_shader(),
1526+
);
16011527
}
16021528

16031529
let bindless = material_uses_bindless_resources::<M>(render_device);

crates/bevy_pbr/src/meshlet/mod.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ use bevy_ecs::{
6969
entity::Entity,
7070
query::Has,
7171
reflect::ReflectComponent,
72-
schedule::IntoScheduleConfigs,
72+
schedule::{common_conditions::resource_exists, IntoScheduleConfigs},
7373
system::{Commands, Query},
7474
};
7575
use bevy_reflect::{std_traits::ReflectDefault, Reflect};
@@ -283,6 +283,13 @@ impl Plugin for MeshletPlugin {
283283
.in_set(RenderSystems::ManageViews),
284284
prepare_meshlet_per_frame_resources.in_set(RenderSystems::PrepareResources),
285285
prepare_meshlet_view_bind_groups.in_set(RenderSystems::PrepareBindGroups),
286+
queue_material_meshlet_meshes
287+
.in_set(RenderSystems::QueueMeshes)
288+
.run_if(resource_exists::<InstanceManager>),
289+
prepare_material_meshlet_meshes_main_opaque_pass
290+
.in_set(RenderSystems::QueueMeshes)
291+
.before(queue_material_meshlet_meshes)
292+
.run_if(resource_exists::<InstanceManager>),
286293
),
287294
);
288295
}

0 commit comments

Comments
 (0)