indexed drawing

ecs
q3k 2020-01-22 03:33:56 +01:00
parent 1fc9d9ff1a
commit 10a748e3b3
4 changed files with 32 additions and 8 deletions

View File

@ -16,6 +16,7 @@ rust_binary(
"src/util/counter.rs",
],
deps = [
"//third_party/cargo:cgmath",
"//third_party/cargo:winit",
"//third_party/cargo:log",
"//third_party/cargo:env_logger",

View File

@ -1,6 +1,12 @@
// vim: set ft=glsl:
#version 450
layout(binding = 0) uniform UniformBufferObject {
mat4 model;
mat4 view;
mat4 proj;
} ubo;
layout(location = 0) in vec3 pos;
layout(location = 1) in vec3 color;

View File

@ -1,3 +1,5 @@
use cgmath as cgm;
#[derive(Copy, Clone)]
pub struct Vertex {
pos: [f32; 3],
@ -11,10 +13,15 @@ impl Vertex {
}
vulkano::impl_vertex!(Vertex, pos, color);
pub fn vertices() -> [Vertex; 3] {
pub fn vertices() -> [Vertex; 4] {
[
Vertex::new([0.0, -0.5, 0.0], [1.0, 1.0, 1.0]),
Vertex::new([0.5, 0.5, 0.0], [0.0, 1.0, 0.0]),
Vertex::new([-0.5, 0.5, 0.0], [0.0, 0.0, 1.])
Vertex::new([-0.5, -0.5, 0.0], [1.0, 0.0, 0.0]),
Vertex::new([0.5, -0.5, 0.0], [0.0, 1.0, 0.0]),
Vertex::new([0.5, 0.5, 0.0], [0.0, 0.0, 1.0]),
Vertex::new([-0.5, 0.5, 0.0], [1.0, 1.0, 1.0])
]
}
pub fn indices() -> [u16; 6] {
[0, 1, 2, 2, 3, 0]
}

View File

@ -96,14 +96,21 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
let render_pass = self.swapchain_binding().render_pass.clone();
let pipeline = shaders::pipeline_forward(device.clone(), chain.dimensions(), render_pass);
let (buffer, future) = vb::immutable::ImmutableBuffer::from_iter(
let (vbuffer, future) = vb::immutable::ImmutableBuffer::from_iter(
data::vertices().iter().cloned(),
vb::BufferUsage::vertex_buffer(),
self.surface_binding().graphics_queue.clone(),
).unwrap();
future.flush().unwrap();
self.create_command_buffers(pipeline, buffer);
let (ibuffer, future) = vb::immutable::ImmutableBuffer::from_iter(
data::indices().iter().cloned(),
vb::BufferUsage::index_buffer(),
self.surface_binding().graphics_queue.clone(),
).unwrap();
future.flush().unwrap();
self.create_command_buffers(pipeline, vbuffer, ibuffer);
self.previous_frame_end = None;
self.armed = true;
@ -163,6 +170,7 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
&mut self,
pipeline: Arc<dyn vp::GraphicsPipelineAbstract + Send + Sync>,
vertex_buffer: Arc<dyn vb::BufferAccess + Send + Sync>,
index_buffer: Arc<vb::TypedBufferAccess<Content=[u16]> + Send + Sync>,
) {
let device = self.surface_binding().device.clone();
let qf = self.surface_binding().graphics_queue.family();
@ -172,8 +180,10 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
.unwrap()
.begin_render_pass(framebuffer.clone(), false, vec![[0.0, 0.0, 0.0, 1.0].into()])
.unwrap()
.draw(pipeline.clone(), &vc::DynamicState::none(),
vec![vertex_buffer.clone()], (), ())
.draw_indexed(pipeline.clone(), &vc::DynamicState::none(),
vec![vertex_buffer.clone()],
index_buffer.clone(),
(), ())
.unwrap()
.end_render_pass()
.unwrap()