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
57
58
59
60
use crate::backend::buffer::Buffer;
use crate::backend::framebuffer::Framebuffer as FramebufferBackend;
use crate::backend::shading_gate::ShadingGate as ShadingGateBackend;
use crate::backend::texture::{Texture, TextureBase};
use crate::pipeline::{PipelineError, PipelineState};
use crate::pixel::Pixel;
use crate::texture::Dimensionable;
pub unsafe trait PipelineBase: ShadingGateBackend + TextureBase {
type PipelineRepr;
unsafe fn new_pipeline(&mut self) -> Result<Self::PipelineRepr, PipelineError>;
}
pub unsafe trait Pipeline<D>: PipelineBase + FramebufferBackend<D>
where
D: Dimensionable,
{
unsafe fn start_pipeline(
&mut self,
framebuffer: &Self::FramebufferRepr,
pipeline_state: &PipelineState,
);
}
pub unsafe trait PipelineBuffer<T>: PipelineBase + Buffer<T>
where
T: Copy,
{
type BoundBufferRepr;
unsafe fn bind_buffer(
pipeline: &Self::PipelineRepr,
buffer: &Self::BufferRepr,
) -> Result<Self::BoundBufferRepr, PipelineError>;
unsafe fn buffer_binding(bound: &Self::BoundBufferRepr) -> u32;
}
pub unsafe trait PipelineTexture<D, P>: PipelineBase + Texture<D, P>
where
D: Dimensionable,
P: Pixel,
{
type BoundTextureRepr;
unsafe fn bind_texture(
pipeline: &Self::PipelineRepr,
texture: &Self::TextureRepr,
) -> Result<Self::BoundTextureRepr, PipelineError>
where
D: Dimensionable,
P: Pixel;
unsafe fn texture_binding(bound: &Self::BoundTextureRepr) -> u32;
}