indexed drawing
parent
1fc9d9ff1a
commit
10a748e3b3
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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]
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue