aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/src/asset_mesh.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 07:07:45 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 07:07:45 +0300
commitefaba9001fb64eca14db3668c1c5295f078691b5 (patch)
tree867a465547d992bbb4b048cc438f6e97d9398b2d /adapters/fparkan-render-vulkan/src/asset_mesh.rs
parentb915554f3c5695bd8b9707359ffaa51ea8742341 (diff)
downloadfparkan-efaba9001fb64eca14db3668c1c5295f078691b5.tar.xz
fparkan-efaba9001fb64eca14db3668c1c5295f078691b5.zip
feat(render): bind materials per mesh batch
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/asset_mesh.rs')
-rw-r--r--adapters/fparkan-render-vulkan/src/asset_mesh.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/adapters/fparkan-render-vulkan/src/asset_mesh.rs b/adapters/fparkan-render-vulkan/src/asset_mesh.rs
index b90499a..fdc378f 100644
--- a/adapters/fparkan-render-vulkan/src/asset_mesh.rs
+++ b/adapters/fparkan-render-vulkan/src/asset_mesh.rs
@@ -68,6 +68,7 @@ pub fn project_msh_to_static_mesh(
draw_ranges.push(VulkanStaticDrawRange {
first_index,
index_count: u32::from(batch.index_count),
+ material_index: batch.material_index,
});
}
if indices.is_empty() {
@@ -181,6 +182,7 @@ mod tests {
vec![VulkanStaticDrawRange {
first_index: 0,
index_count: 3,
+ material_index: 0,
}]
);
assert_eq!(mesh.vertices[1].position, [-0.8, -0.8]);
@@ -203,4 +205,37 @@ mod tests {
assert_eq!(mesh.vertices[1].uv, [0.0, 2.0]);
assert_eq!(mesh.vertices[2].uv, [-1.0, 0.5]);
}
+
+ #[test]
+ fn retains_each_source_batch_material_selector() {
+ let mut second = batch(3, 3, 0);
+ second.material_index = 7;
+ let mesh = project_msh_to_static_mesh(&model(
+ vec![
+ [-2.0, 0.0, -1.0],
+ [2.0, 0.0, -1.0],
+ [-2.0, 0.0, 3.0],
+ [2.0, 0.0, 3.0],
+ ],
+ vec![0, 1, 2, 1, 3, 2],
+ vec![batch(0, 3, 0), second],
+ ))
+ .expect("representable MSH");
+
+ assert_eq!(
+ mesh.draw_ranges,
+ vec![
+ VulkanStaticDrawRange {
+ first_index: 0,
+ index_count: 3,
+ material_index: 0,
+ },
+ VulkanStaticDrawRange {
+ first_index: 3,
+ index_count: 3,
+ material_index: 7,
+ },
+ ]
+ );
+ }
}