mirror of
https://github.com/vulkano-rs/vulkano.git
synced 2024-11-25 16:25:31 +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
|
||||
allocating or mapping memory.
|
||||
- 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`).
|
||||
|
||||
# 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::VertexMemberInfo;
|
||||
pub use self::vertex::VertexMemberTy;
|
||||
pub use self::bufferless::BufferlessDefinition;
|
||||
pub use self::bufferless::BufferlessVertices;
|
||||
|
||||
mod definition;
|
||||
mod impl_vertex;
|
||||
@ -82,3 +84,4 @@ mod one_one;
|
||||
mod single;
|
||||
mod two;
|
||||
mod vertex;
|
||||
mod bufferless;
|
||||
|
Loading…
Reference in New Issue
Block a user