mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2024-11-22 06:45:23 +00:00
Bufferless vertex definition (#819)
* Bufferless vertex definition * Define `BufferlessVertices` to enable bufferless instanced drawing * Cleanup
This commit is contained in:
parent
de25bb2906
commit
24496cc725
@ -5,6 +5,8 @@
|
|||||||
- Changed `CpuBufferPool::next()` and `chunk()` to return a `Result` in case of an error when
|
- Changed `CpuBufferPool::next()` and `chunk()` to return a `Result` in case of an error when
|
||||||
allocating or mapping memory.
|
allocating or mapping memory.
|
||||||
- Fixed `layers` argument validation in `Swapchain::new_inner`.
|
- Fixed `layers` argument validation in `Swapchain::new_inner`.
|
||||||
|
- Added `vulkano::pipeline::vertex::BufferlessDefinition` and `BufferlessVertices` to enable
|
||||||
|
bufferless drawing.
|
||||||
- Provide 32-bit word constructor for `ShaderModule` (`ShaderModule::from_words`).
|
- Provide 32-bit word constructor for `ShaderModule` (`ShaderModule::from_words`).
|
||||||
|
|
||||||
# Version 0.6.2 (2017-09-06)
|
# Version 0.6.2 (2017-09-06)
|
||||||
|
52
vulkano/src/pipeline/vertex/bufferless.rs
Normal file
52
vulkano/src/pipeline/vertex/bufferless.rs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Copyright (c) 2017 The vulkano developers
|
||||||
|
// Licensed under the Apache License, Version 2.0
|
||||||
|
// <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT
|
||||||
|
// license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
|
||||||
|
// at your option. All files in the project carrying such
|
||||||
|
// notice may not be copied, modified, or distributed except
|
||||||
|
// according to those terms.
|
||||||
|
|
||||||
|
use std::iter;
|
||||||
|
|
||||||
|
use pipeline::vertex::AttributeInfo;
|
||||||
|
use pipeline::vertex::IncompatibleVertexDefinitionError;
|
||||||
|
use pipeline::vertex::InputRate;
|
||||||
|
use pipeline::vertex::VertexDefinition;
|
||||||
|
use pipeline::vertex::VertexSource;
|
||||||
|
use buffer::BufferAccess;
|
||||||
|
|
||||||
|
/// Implementation of `VertexDefinition` for drawing with no buffers at all.
|
||||||
|
///
|
||||||
|
/// This is only useful if your shaders come up with vertex data on their own, e.g. by inspecting
|
||||||
|
/// `gl_VertexIndex`
|
||||||
|
pub struct BufferlessDefinition;
|
||||||
|
|
||||||
|
/// Value to be passed as the vertex source for bufferless draw commands.
|
||||||
|
///
|
||||||
|
/// Note that the concrete type of the graphics pipeline using `BufferlessDefinition` must be
|
||||||
|
/// visible to the command buffer builder for this to be usable.
|
||||||
|
pub struct BufferlessVertices {
|
||||||
|
pub vertices: usize,
|
||||||
|
pub instances: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe impl VertexSource<BufferlessVertices> for BufferlessDefinition {
|
||||||
|
fn decode(&self, n: BufferlessVertices) -> (Vec<Box<BufferAccess + Sync + Send + 'static>>, usize, usize) {
|
||||||
|
(Vec::new(), n.vertices, n.instances)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe impl<T> VertexSource<Vec<T>> for BufferlessDefinition {
|
||||||
|
fn decode<'l>(&self, _: Vec<T>) -> (Vec<Box<BufferAccess + Sync + Send + 'static>>, usize, usize) {
|
||||||
|
panic!("bufferless drawing should not be supplied with buffers")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe impl<I> VertexDefinition<I> for BufferlessDefinition {
|
||||||
|
type BuffersIter = iter::Empty<(u32, usize, InputRate)>;
|
||||||
|
type AttribsIter = iter::Empty<(u32, u32, AttributeInfo)>;
|
||||||
|
fn definition(&self, _: &I) -> Result<(Self::BuffersIter, Self::AttribsIter), IncompatibleVertexDefinitionError> {
|
||||||
|
Ok((iter::empty(), iter::empty()))
|
||||||
|
}
|
||||||
|
}
|
@ -75,6 +75,8 @@ pub use self::two::TwoBuffersDefinition;
|
|||||||
pub use self::vertex::Vertex;
|
pub use self::vertex::Vertex;
|
||||||
pub use self::vertex::VertexMemberInfo;
|
pub use self::vertex::VertexMemberInfo;
|
||||||
pub use self::vertex::VertexMemberTy;
|
pub use self::vertex::VertexMemberTy;
|
||||||
|
pub use self::bufferless::BufferlessDefinition;
|
||||||
|
pub use self::bufferless::BufferlessVertices;
|
||||||
|
|
||||||
mod definition;
|
mod definition;
|
||||||
mod impl_vertex;
|
mod impl_vertex;
|
||||||
@ -82,3 +84,4 @@ mod one_one;
|
|||||||
mod single;
|
mod single;
|
||||||
mod two;
|
mod two;
|
||||||
mod vertex;
|
mod vertex;
|
||||||
|
mod bufferless;
|
||||||
|
Loading…
Reference in New Issue
Block a user