019: more points

This commit is contained in:
zawz 2024-07-31 10:53:54 +02:00
parent 862f6a70c8
commit 87b53d546a
3 changed files with 27 additions and 19 deletions

View file

@ -9,5 +9,5 @@ layout(location = 0) out vec4 colourdata_for_the_fragmentshader;
void main() { void main() {
gl_PointSize = size; gl_PointSize = size;
gl_Position = position; gl_Position = position;
colourdata_for_the_fragmentshader = vec4(0.4, 1.0, 0.5, 1.0); colourdata_for_the_fragmentshader = colour;
} }

View file

@ -82,8 +82,9 @@ impl Buffer {
} }
} }
pub unsafe fn fill(&mut self, data: &[u8]) { pub unsafe fn fill<T: Sized>(&mut self, data: &[T]) {
let inner_buffer = self.mapped_slice_mut().unwrap(); let slice = self.mapped_slice_mut().unwrap();
inner_buffer.copy_from_slice(data); let inner_buffer = slice.as_ptr() as *mut T;
inner_buffer.copy_from_nonoverlapping(data.as_ptr(), data.len());
} }
} }

View file

@ -111,20 +111,23 @@ impl EngineInstance {
let renderpass = Self::init_renderpass(&device, surface_format.format)?; let renderpass = Self::init_renderpass(&device, surface_format.format)?;
swapchain.create_framebuffers(&device, renderpass)?; swapchain.create_framebuffers(&device, renderpass)?;
let pbuflen1: u32 = 16;
let pbuflen2: u32 = 20;
let nvertex: u32 = 1;
let ninstance: u32 = 6;
log::debug!("Create allocator"); log::debug!("Create allocator");
let mut allocator = BufferAllocator::init(&ash_instance, physical_device, &device)?; let mut allocator = BufferAllocator::init(&ash_instance, physical_device, &device)?;
let mut buffer1 = allocator.create_buffer(&device, 16)?; let mut buffer1 = allocator.create_buffer(&device, pbuflen1 as u64 * ninstance as u64)?;
unsafe { unsafe {
let data: [u8; 16] = std::mem::transmute([-0.5f32, 0.0f32, 0.0f32, 1.0f32]); buffer1.fill(&[
buffer1.fill(&data); 0.4f32, -0.2f32, 0.0f32, 1.0f32, 0.2f32, 0.0f32, 0.0f32, 1.0f32, -0.4f32, 0.2f32,
} 0.0f32, 1.0f32, 0.5f32, 0.0f32, 0.0f32, 1.0f32, 0.0f32, 0.2f32, 0.0f32, 1.0f32,
-0.5f32, 0.0f32, 0.0f32, 1.0f32,
let mut buffer2 = allocator.create_buffer(&device, 20)?; ])
unsafe { };
let data: [u8; 20] = std::mem::transmute([5.0f32, 1.0f32, 1.0f32, 0.0f32, 1.0f32]); let mut buffer2 = allocator.create_buffer(&device, pbuflen2 as u64 * nvertex as u64)?;
buffer2.fill(&data); unsafe { buffer2.fill(&[15.0f32, 0.0f32, 1.0f32, 0.0f32, 1.0f32]) };
}
let vertex_attrib_descs = [ let vertex_attrib_descs = [
vk::VertexInputAttributeDescription { vk::VertexInputAttributeDescription {
@ -149,12 +152,12 @@ impl EngineInstance {
let vertex_binding_descs = [ let vertex_binding_descs = [
vk::VertexInputBindingDescription { vk::VertexInputBindingDescription {
binding: 0, binding: 0,
stride: 16, stride: pbuflen1,
input_rate: vk::VertexInputRate::VERTEX, input_rate: vk::VertexInputRate::INSTANCE,
}, },
vk::VertexInputBindingDescription { vk::VertexInputBindingDescription {
binding: 1, binding: 1,
stride: 20, stride: pbuflen2,
input_rate: vk::VertexInputRate::VERTEX, input_rate: vk::VertexInputRate::VERTEX,
}, },
]; ];
@ -183,6 +186,8 @@ impl EngineInstance {
&pipeline, &pipeline,
buffer1.buffer, buffer1.buffer,
buffer2.buffer, buffer2.buffer,
nvertex,
ninstance,
)?; )?;
} }
@ -391,6 +396,8 @@ impl EngineInstance {
// buffers: &[vk::Buffer], // buffers: &[vk::Buffer],
buffer1: vk::Buffer, buffer1: vk::Buffer,
buffer2: vk::Buffer, buffer2: vk::Buffer,
vertex_count: u32,
instance_count: u32,
) -> Result<(), vk::Result> { ) -> Result<(), vk::Result> {
let commandbuffer_begininfo = vk::CommandBufferBeginInfo::default(); let commandbuffer_begininfo = vk::CommandBufferBeginInfo::default();
unsafe { unsafe {
@ -424,7 +431,7 @@ impl EngineInstance {
); );
device.cmd_bind_vertex_buffers(commandbuffer, 0, &[buffer1], &[0]); device.cmd_bind_vertex_buffers(commandbuffer, 0, &[buffer1], &[0]);
device.cmd_bind_vertex_buffers(commandbuffer, 1, &[buffer2], &[0]); device.cmd_bind_vertex_buffers(commandbuffer, 1, &[buffer2], &[0]);
device.cmd_draw(commandbuffer, 1, 1, 0, 0); device.cmd_draw(commandbuffer, vertex_count, instance_count, 0, 0);
device.cmd_end_render_pass(commandbuffer); device.cmd_end_render_pass(commandbuffer);
device.end_command_buffer(commandbuffer)?; device.end_command_buffer(commandbuffer)?;
} }