minigw 0.0.6

A convenient Rust library for creating cross platform windows and displaying pixel buffers.
Documentation
#![allow(dead_code)]

extern crate gl;
extern crate glutin;

use gl::types::*;

pub mod buffers;
pub use buffers::*;
pub mod shaders;
pub use shaders::*;
pub mod textures;
pub use textures::*;
pub mod imgui_impl;
pub use imgui_impl::*;

use crate::Window;

pub(crate) fn gl_init(window: &Window) {
    gl::load_with(|ptr| window.internal_context().get_proc_address(ptr) as *const _);
    gl_check();
}

#[cfg(debug_assertions)]
fn gl_check() {
    unsafe {
        let error = gl::GetError();
        match error {
            gl::NO_ERROR => (),
            gl::INVALID_ENUM => panic!("GL invalid enum."),
            gl::INVALID_VALUE => panic!("GL invalid value."),
            gl::INVALID_OPERATION => panic!("GL invalid operation."),
            gl::OUT_OF_MEMORY => panic!("GL out of memory."),
            gl::STACK_OVERFLOW => panic!("GL stack overflow."),
            gl::STACK_UNDERFLOW => panic!("GL stack underflow"),
            _ => panic!("GL unkown error."),
        }
    }
}

#[cfg(not(debug_assertions))]
fn gl_check() {}

pub fn gl_enable_depth() {
    unsafe {
        gl::Enable(gl::DEPTH_TEST);
        gl_check();
    }
}

pub fn gl_cull(mode: GLenum) {
    unsafe {
        gl::Enable(gl::CULL_FACE);
        gl::CullFace(mode);
        gl_check();
    }
}

pub fn gl_clear_color(color: cgmath::Vector3<f32>) {
    unsafe {
        gl::ClearColor(color.x, color.y, color.z, 1.0f32);
        gl_check();
    }
}

pub fn gl_clear() {
    unsafe {
        gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT);
        gl_check();
    }
}

pub fn gl_viewport(width: u32, height: u32) {
    unsafe {
        gl::Viewport(0, 0, width as i32, height as i32);
        gl_check();
    }
}

pub fn gl_draw_elems(mode: GLenum, count: usize, index_type: GLenum) {
    unsafe {
        gl::DrawElements(mode, count as i32, index_type, std::ptr::null());
        gl_check();
    }
}

pub fn gl_draw_arrays(mode: GLenum, offset: usize, count: usize) {
    unsafe {
        gl::DrawArrays(mode, offset as i32, count as i32);
        gl_check();
    }
}

pub fn gl_finish() {
    unsafe {
        gl::Finish();
        gl_check();
    }
}