use crate::*;
#[derive(Clone, Debug, Copy, PartialEq, Eq, Hash, Default, PartialOrd, Ord)]
pub struct RawShaderID { pub index : usize }
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct UniformDesc
{
pub name : String,
pub uniform_type : UniformType,
pub nb : usize,
}
pub struct UniformsSource<'a> { pub source : UntypedSlice<'a> }
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct UniformBlockLayout {
pub uniforms: Vec<UniformDesc>,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ShaderMeta {
pub uniforms: UniformBlockLayout,
pub images : Vec<String>,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ShaderSource
{
GLSL(ShaderSourceGLSL),
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct ShaderSourceGLSL
{
pub vertex: String,
pub fragment: String,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum UniformType {
Float1,
Float2,
Float3,
Float4,
Int1,
Int2,
Int3,
Int4,
Mat4,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
pub struct ShaderData
{
pub source: ShaderSource,
pub meta : ShaderMeta,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ShaderType {
Vertex,
Fragment,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "hexga_io", derive(Save, Load))]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ShaderError
{
CompilationError {
shader_type: ShaderType,
error_message: String,
},
LinkError(String),
FFINulError(usize, Vec<u8>),
}