1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
use std::iter;
use buffer::BufferAccess;
use pipeline::vertex::AttributeInfo;
use pipeline::vertex::IncompatibleVertexDefinitionError;
use pipeline::vertex::InputRate;
use pipeline::vertex::VertexDefinition;
use pipeline::vertex::VertexSource;
pub struct BufferlessDefinition;
pub struct BufferlessVertices {
pub vertices: usize,
pub instances: usize,
}
unsafe impl VertexSource<BufferlessVertices> for BufferlessDefinition {
fn decode(&self, n: BufferlessVertices)
-> (Vec<Box<dyn 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<dyn 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()))
}
}