Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save pcwalton/7ada89374431581039c60a5afcb95d94 to your computer and use it in GitHub Desktop.
Save pcwalton/7ada89374431581039c60a5afcb95d94 to your computer and use it in GitHub Desktop.
diff --git a/crates/bevy_pbr/src/meshlet/material_draw_prepare.rs b/crates/bevy_pbr/src/meshlet/material_draw_prepare.rs
index 1fee72d69..fb723a0d5 100644
--- a/crates/bevy_pbr/src/meshlet/material_draw_prepare.rs
+++ b/crates/bevy_pbr/src/meshlet/material_draw_prepare.rs
@@ -9,11 +9,11 @@ use bevy_core_pipeline::{
use bevy_derive::{Deref, DerefMut};
use bevy_render::{
camera::TemporalJitter,
- mesh::{InnerMeshVertexBufferLayout, Mesh, MeshVertexBufferLayout},
+ mesh::{Mesh, MeshVertexBufferLayout, MeshVertexBufferLayoutRef, MeshVertexBufferLayouts},
render_resource::*,
view::ExtractedView,
};
-use bevy_utils::{HashMap, Hashed};
+use bevy_utils::HashMap;
use std::hash::Hash;
/// A list of `(Material ID, Pipeline, BindGroup)` for a view for use in [`super::MeshletMainOpaquePass3dNode`].
@@ -32,6 +32,7 @@ pub fn prepare_material_meshlet_meshes_main_opaque_pass<M: Material>(
render_materials: Res<RenderMaterials<M>>,
render_material_instances: Res<RenderMaterialInstances<M>>,
asset_server: Res<AssetServer>,
+ mut mesh_vertex_buffer_layouts: ResMut<MeshVertexBufferLayouts>,
mut views: Query<
(
&mut MeshletViewMaterialsMainOpaquePass,
@@ -56,7 +57,7 @@ pub fn prepare_material_meshlet_meshes_main_opaque_pass<M: Material>(
) where
M::Data: PartialEq + Eq + Hash + Clone,
{
- let fake_vertex_buffer_layout = &fake_vertex_buffer_layout();
+ let fake_vertex_buffer_layout = &fake_vertex_buffer_layout(&mut mesh_vertex_buffer_layouts);
for (
mut materials,
@@ -227,6 +228,7 @@ pub fn prepare_material_meshlet_meshes_prepass<M: Material>(
prepass_pipeline: Res<PrepassPipeline<M>>,
render_materials: Res<RenderMaterials<M>>,
render_material_instances: Res<RenderMaterialInstances<M>>,
+ mut mesh_vertex_buffer_layouts: ResMut<MeshVertexBufferLayouts>,
asset_server: Res<AssetServer>,
mut views: Query<
(
@@ -240,7 +242,7 @@ pub fn prepare_material_meshlet_meshes_prepass<M: Material>(
) where
M::Data: PartialEq + Eq + Hash + Clone,
{
- let fake_vertex_buffer_layout = &fake_vertex_buffer_layout();
+ let fake_vertex_buffer_layout = &fake_vertex_buffer_layout(&mut *mesh_vertex_buffer_layouts);
for (
mut materials,
@@ -365,8 +367,8 @@ pub fn prepare_material_meshlet_meshes_prepass<M: Material>(
}
// Meshlet materials don't use a traditional vertex buffer, but the material specialization requires one.
-fn fake_vertex_buffer_layout() -> Hashed<InnerMeshVertexBufferLayout> {
- MeshVertexBufferLayout::new(InnerMeshVertexBufferLayout::new(
+fn fake_vertex_buffer_layout(layouts: &mut MeshVertexBufferLayouts) -> MeshVertexBufferLayoutRef {
+ layouts.insert(MeshVertexBufferLayout::new(
vec![
Mesh::ATTRIBUTE_POSITION.id,
Mesh::ATTRIBUTE_NORMAL.id,
diff --git a/crates/bevy_render/src/mesh/mod.rs b/crates/bevy_render/src/mesh/mod.rs
index a6d67e960..0a40d9b72 100644
--- a/crates/bevy_render/src/mesh/mod.rs
+++ b/crates/bevy_render/src/mesh/mod.rs
@@ -61,7 +61,7 @@ impl MeshVertexBufferLayouts {
/// Inserts a new mesh vertex buffer layout in the store and returns a
/// reference to it, reusing the existing reference if this mesh vertex
/// buffer layout was already in the store.
- pub(crate) fn insert(&mut self, layout: MeshVertexBufferLayout) -> MeshVertexBufferLayoutRef {
+ pub fn insert(&mut self, layout: MeshVertexBufferLayout) -> MeshVertexBufferLayoutRef {
// Because the special `PartialEq` and `Hash` implementations that
// compare by pointer are on `MeshVertexBufferLayoutRef`, not on
// `Arc<MeshVertexBufferLayout>`, this compares the mesh vertex buffer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment