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() {
gl_PointSize = size;
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]) {
let inner_buffer = self.mapped_slice_mut().unwrap();
inner_buffer.copy_from_slice(data);
pub unsafe fn fill<T: Sized>(&mut self, data: &[T]) {
let slice = self.mapped_slice_mut().unwrap();
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)?;
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");
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 {
let data: [u8; 16] = std::mem::transmute([-0.5f32, 0.0f32, 0.0f32, 1.0f32]);
buffer1.fill(&data);
}
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]);
buffer2.fill(&data);
}
buffer1.fill(&[
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, pbuflen2 as u64 * nvertex as u64)?;
unsafe { buffer2.fill(&[15.0f32, 0.0f32, 1.0f32, 0.0f32, 1.0f32]) };
let vertex_attrib_descs = [
vk::VertexInputAttributeDescription {
@ -149,12 +152,12 @@ impl EngineInstance {
let vertex_binding_descs = [
vk::VertexInputBindingDescription {
binding: 0,
stride: 16,
input_rate: vk::VertexInputRate::VERTEX,
stride: pbuflen1,
input_rate: vk::VertexInputRate::INSTANCE,
},
vk::VertexInputBindingDescription {
binding: 1,
stride: 20,
stride: pbuflen2,
input_rate: vk::VertexInputRate::VERTEX,
},
];
@ -183,6 +186,8 @@ impl EngineInstance {
&pipeline,
buffer1.buffer,
buffer2.buffer,
nvertex,
ninstance,
)?;
}
@ -391,6 +396,8 @@ impl EngineInstance {
// buffers: &[vk::Buffer],
buffer1: vk::Buffer,
buffer2: vk::Buffer,
vertex_count: u32,
instance_count: u32,
) -> Result<(), vk::Result> {
let commandbuffer_begininfo = vk::CommandBufferBeginInfo::default();
unsafe {
@ -424,7 +431,7 @@ impl EngineInstance {
);
device.cmd_bind_vertex_buffers(commandbuffer, 0, &[buffer1], &[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.end_command_buffer(commandbuffer)?;
}