// Copyright (c) 2017 The vulkano developers // Licensed under the Apache License, Version 2.0 // or the MIT // license , // at your option. All files in the project carrying such // notice may not be copied, modified, or distributed except // according to those terms. use crate::buffer::BufferAccess; use crate::pipeline::shader::ShaderInterface; use crate::pipeline::vertex::IncompatibleVertexDefinitionError; use crate::pipeline::vertex::VertexDefinition; use crate::pipeline::vertex::VertexInput; use crate::pipeline::vertex::VertexSource; /// 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` #[derive(Copy, Clone)] 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. #[derive(Copy, Clone)] pub struct BufferlessVertices { pub vertices: usize, pub instances: usize, } unsafe impl VertexSource for BufferlessDefinition { fn decode( &self, n: BufferlessVertices, ) -> ( Vec>, usize, usize, ) { (Vec::new(), n.vertices, n.instances) } } unsafe impl VertexSource> for BufferlessDefinition { fn decode<'l>( &self, _: Vec, ) -> ( Vec>, usize, usize, ) { panic!("bufferless drawing should not be supplied with buffers") } } unsafe impl VertexDefinition for BufferlessDefinition { fn definition( &self, _: &ShaderInterface, ) -> Result { Ok(VertexInput::empty()) } }