mepeyew 0.3.5

mepeyew - Small But Powerful Graphics Library
Documentation
use super::error::*;

#[allow(unused_imports)]
use super::mock::*;
#[cfg(all(
    not(all(target_arch = "wasm32", target_os = "unknown")),
    feature = "vulkan"
))]
use super::vulkan::*;
#[cfg(all(feature = "webgpu", target_arch = "wasm32", target_os = "unknown"))]
use super::webgpu::*;

pub mod extensions;

mod buffer;
mod pass;
mod pass_step;
mod platform;
mod program;
mod sampler;
mod submit;
mod texture;

#[macro_export]
macro_rules! def_id_ty {
    ($NAME: ident) => {
        impl $NAME {
            pub fn from_id(id: usize) -> Self {
                Self(id)
            }

            pub fn id(&self) -> usize {
                self.0
            }
        }
    };
}

#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct VertexBufferId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct IndexBufferId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct UniformBufferId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct DynamicUniformBufferId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct ProgramId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct ComputeProgramId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct SamplerId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct TextureId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct AttachmentImageId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq, Default)]
pub struct PassStepDependency(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct PassLocalAttachment(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct CompiledPassId(usize);
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub struct CompiledComputePassId(usize);

def_id_ty!(VertexBufferId);
def_id_ty!(IndexBufferId);
def_id_ty!(UniformBufferId);
def_id_ty!(DynamicUniformBufferId);
def_id_ty!(ProgramId);
def_id_ty!(ComputeProgramId);
def_id_ty!(SamplerId);
def_id_ty!(TextureId);
def_id_ty!(AttachmentImageId);
def_id_ty!(PassStepDependency);
def_id_ty!(PassLocalAttachment);
def_id_ty!(CompiledPassId);
def_id_ty!(CompiledComputePassId);

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Api {
    Vulkan,
    WebGpu,
}

#[allow(clippy::large_enum_variant)]
pub enum Context {
    #[cfg(all(
        not(all(target_arch = "wasm32", target_os = "unknown")),
        feature = "vulkan"
    ))]
    Vulkan(VkContext),
    #[cfg(any(target_arch = "wasm32", target_os = "unknown", not(feature = "vulkan")))]
    Vulkan(MockContext),
    #[cfg(all(target_arch = "wasm32", target_os = "unknown"))]
    WebGpu(WebGpuContext),
    #[cfg(not(all(feature = "webgpu", target_arch = "wasm32", target_os = "unknown")))]
    WebGpu(MockContext),
}

pub use buffer::{
    BufferStorageType, DynamicUniformBufferTypeGuard, IndexBufferElement,
    NewDynamicUniformBufferExt, NewIndexBufferExt, NewUniformBufferExt, NewVertexBufferExt,
    UniformBufferTypeGuard, VertexBufferElement, VertexBufferInput,
};
pub use extensions::{Extension, Extensions};
pub use pass::{
    CompilePassExt, MsaaSampleCount, NewPassExt, Pass, PassAttachment, PassInputLoadOpColorType,
    PassInputLoadOpDepthStencilType, PassInputType,
};
pub use pass_step::PassStep;
pub use program::{
    NewProgramExt, ShaderBlendFactor, ShaderBlendOperation, ShaderCompareOp, ShaderCullFrontFace,
    ShaderCullMode, ShaderPrimitiveTopology, ShaderSet, ShaderStage, ShaderStencilOp, ShaderType,
    ShaderUniform, ShaderUniformType,
};
pub use sampler::{GetSamplerExt, MipSamplerFilter, SamplerFilter, SamplerMode};
pub use submit::{
    ClearColor, ClearDepthStencil, Draw, DrawScissor, DrawType, DrawViewport,
    DynamicGenericBufferId, PassSubmitData, StepSubmitData, Submit, SubmitExt, SubmitPassType,
};
pub use texture::{
    AttachmentImageColorFormat, AttachmentImageUsage, CubemapTextureUpload, NewAttachmentImageExt,
    NewTextureExt, TextureFormat, UploadCubemapTextureExt, UploadTextureExt,
};