pixelpwnr-render 0.0.1

Blazingly fast GPU accelerated pixelflut server
Documentation
use draw_state::state::RefValues;
use gfx::{
    handle::Manager,
    pso::{AccessInfo, DataBind, DataLink, PipelineData, RawDataSet},
    Resources,
};

const REF_VALUES: RefValues = RefValues {
    stencil: (0, 0),
    blend: [0.2, 0.2, 0.2, 0.2],
};

#[derive(Clone, Debug, PartialEq)]
pub struct RefValuesWrapper(RefValues);

impl<R: Resources> PipelineData<R> for RefValuesWrapper {
    type Meta = crate::stats_renderer::bg_pipe::Meta;

    fn bake_to(
        &self,
        _: &mut RawDataSet<R>,
        _: &Self::Meta,
        _: &mut Manager<R>,
        _: &mut AccessInfo<R>,
    ) {
        ()
    }
}

impl<R: Resources> DataBind<R> for RefValuesWrapper {
    type Data = ();

    fn bind_to(&self, out: &mut RawDataSet<R>, _: &(), _: &mut Manager<R>, _: &mut AccessInfo<R>) {
        out.ref_values = REF_VALUES;
    }
}

impl<'a> DataLink<'a> for RefValuesWrapper {
    type Init = RefValuesWrapper;

    fn new() -> Self {
        RefValuesWrapper(REF_VALUES)
    }

    fn is_active(&self) -> bool {
        true
    }
}

impl std::hash::Hash for RefValuesWrapper {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        self.0
            .blend
            .iter()
            .for_each(|val| val.to_be_bytes().hash(state));
        self.0.stencil.hash(state);
    }
}