niko 0.1.8

the niko wasm game engine
Documentation
use glow::HasContext;
use crate::{
    Error,
    NikoError,
    graphics::{
        BufferType,
        BufferUsage,
        BufferId,
    },
};

unsafe fn create_buffer(gl: &glow::Context, target: u32, usage: u32, data: &[u8]) -> Result<BufferId, Error> {
    let buffer = gl.create_buffer()
        .map_err(|error| NikoError::PlatformError(error))?;

    gl.bind_buffer(target, Some(buffer));
    gl.buffer_data_u8_slice(target, data, usage);

    Ok(buffer)
}

#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
pub struct Buffer {
    inner: BufferId,
}

impl Buffer {
    pub fn create(gl: &glow::Context, buffer_type: BufferType, buffer_usage: BufferUsage, data: &[u8]) -> Result<Self, Error> {
        let inner = unsafe { create_buffer(gl, buffer_type.into(), buffer_usage.into(), data)? };

        Ok(Self {
            inner,
        })
    }

    pub(crate) fn get_inner(&self) -> BufferId {
        self.inner
    }
}