mev 0.1.0

Metal Et Vulkan abstraction
Documentation
use std::{fmt, sync::Arc};

use super::shader::Bindings;

#[derive(Clone)]
pub struct RenderPipeline {
    state: metal::RenderPipelineState,
    primitive: metal::MTLPrimitiveType,
    vertex_bindings: Option<Arc<Bindings>>,
    fragment_bindings: Option<Arc<Bindings>>,
    vertex_buffers_count: u32,
}

unsafe impl Send for RenderPipeline {}
unsafe impl Sync for RenderPipeline {}

impl RenderPipeline {
    pub(super) fn new(
        state: metal::RenderPipelineState,
        primitive: metal::MTLPrimitiveType,
        vertex_bindings: Option<Arc<Bindings>>,
        fragment_bindings: Option<Arc<Bindings>>,
        vertex_buffers_count: u32,
    ) -> Self {
        RenderPipeline {
            state,
            primitive,
            vertex_bindings,
            fragment_bindings,
            vertex_buffers_count,
        }
    }

    pub(super) fn metal(&self) -> &metal::RenderPipelineState {
        &self.state
    }

    pub(super) fn primitive(&self) -> metal::MTLPrimitiveType {
        self.primitive
    }

    pub(super) fn vertex_bindings(&self) -> Option<Arc<Bindings>> {
        self.vertex_bindings.clone()
    }

    pub(super) fn fragment_bindings(&self) -> Option<Arc<Bindings>> {
        self.fragment_bindings.clone()
    }

    pub(super) fn vertex_buffers_count(&self) -> u32 {
        self.vertex_buffers_count
    }
}