aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/src/ffi/resources.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-07-18 06:14:47 +0300
committerValentin Popov <valentin@popov.link>2026-07-18 06:14:47 +0300
commit97b1199b9e315c222827d6028eb157ed4c067ff7 (patch)
tree241845007ee35a1bf14b50ff0760625f9f3b05b0 /adapters/fparkan-render-vulkan/src/ffi/resources.rs
parent223b3b948ad4b4e9d42756b8a2ba869094542a30 (diff)
downloadfparkan-97b1199b9e315c222827d6028eb157ed4c067ff7.tar.xz
fparkan-97b1199b9e315c222827d6028eb157ed4c067ff7.zip
feat(render): accept static indexed Vulkan meshes
Diffstat (limited to 'adapters/fparkan-render-vulkan/src/ffi/resources.rs')
-rw-r--r--adapters/fparkan-render-vulkan/src/ffi/resources.rs30
1 files changed, 14 insertions, 16 deletions
diff --git a/adapters/fparkan-render-vulkan/src/ffi/resources.rs b/adapters/fparkan-render-vulkan/src/ffi/resources.rs
index c6538d9..e5d725b 100644
--- a/adapters/fparkan-render-vulkan/src/ffi/resources.rs
+++ b/adapters/fparkan-render-vulkan/src/ffi/resources.rs
@@ -2,7 +2,9 @@
use ash::vk;
-use super::{VulkanInstanceProbe, VulkanLogicalDeviceProbe, VulkanSmokeRendererError};
+use super::{
+ VulkanInstanceProbe, VulkanLogicalDeviceProbe, VulkanSmokeRendererError, VulkanStaticMesh,
+};
pub(super) struct VulkanAllocatedBuffer {
pub(super) buffer: vk::Buffer,
@@ -30,18 +32,14 @@ pub(super) fn create_command_pool(
})
}
-pub(super) fn create_triangle_vertex_buffer(
+pub(super) fn create_static_mesh_vertex_buffer(
instance: &VulkanInstanceProbe,
device: &VulkanLogicalDeviceProbe,
+ mesh: &VulkanStaticMesh,
) -> Result<VulkanAllocatedBuffer, VulkanSmokeRendererError> {
- let vertices: [[f32; 5]; 3] = [
- [0.0, -0.55, 1.0, 0.2, 0.2],
- [0.55, 0.55, 0.2, 1.0, 0.2],
- [-0.55, 0.55, 0.2, 0.4, 1.0],
- ];
- let mut bytes = Vec::with_capacity(vertices.len() * 5 * std::mem::size_of::<f32>());
- for vertex in vertices {
- for value in vertex {
+ let mut bytes = Vec::with_capacity(mesh.vertices.len() * 5 * std::mem::size_of::<f32>());
+ for vertex in &mesh.vertices {
+ for value in vertex.position.into_iter().chain(vertex.color) {
bytes.extend_from_slice(&value.to_ne_bytes());
}
}
@@ -50,17 +48,17 @@ pub(super) fn create_triangle_vertex_buffer(
device,
&bytes,
vk::BufferUsageFlags::VERTEX_BUFFER,
- "triangle vertex buffer",
+ "static mesh vertex buffer",
)
}
-pub(super) fn create_triangle_index_buffer(
+pub(super) fn create_static_mesh_index_buffer(
instance: &VulkanInstanceProbe,
device: &VulkanLogicalDeviceProbe,
+ mesh: &VulkanStaticMesh,
) -> Result<VulkanAllocatedBuffer, VulkanSmokeRendererError> {
- let indices = [0_u16, 1_u16, 2_u16];
- let mut bytes = Vec::with_capacity(indices.len() * std::mem::size_of::<u16>());
- for index in indices {
+ let mut bytes = Vec::with_capacity(mesh.indices.len() * std::mem::size_of::<u16>());
+ for &index in &mesh.indices {
bytes.extend_from_slice(&index.to_ne_bytes());
}
create_host_visible_buffer(
@@ -68,7 +66,7 @@ pub(super) fn create_triangle_index_buffer(
device,
&bytes,
vk::BufferUsageFlags::INDEX_BUFFER,
- "triangle index buffer",
+ "static mesh index buffer",
)
}