use std::os::raw::{c_float, c_int, c_uint, c_void};
pub type GLfloat = c_float;
pub type GLint = c_int;
pub type GLuint = c_uint;
pub type GLbitfield = c_uint;
pub type GLclampf = c_float;
pub type GLenum = c_int;
pub type GLsizei = c_int;
pub type GLvoid = c_void;
pub const GL_COLOR_BUFFER_BIT: GLbitfield = 0x00004000;
pub const GL_TRIANGLE_STRIP: GLenum = 0x0005;
pub const GL_TEXTURE_2D: GLenum = 0x0DE1;
pub const GL_TEXTURE_MAG_FILTER: GLenum = 0x2800;
pub const GL_TEXTURE_MIN_FILTER: GLenum = 0x2801;
pub const GL_LINEAR: GLenum = 0x2601;
pub const GL_BGRA: GLenum = 0x80E1;
pub const GL_RGBA: GLenum = 0x1908;
pub const GL_RGB: GLenum = 0x1907;
pub const GL_UNSIGNED_BYTE: GLenum = 0x1401;
pub const GL_UNSIGNED_INT_8_8_8_8_REV: GLenum = 0x8367;
pub const GL_UNPACK_ROW_LENGTH: GLenum = 0x0CF2;
pub type CGLContextObj = *mut c_void;
pub type CGLContextParameter = c_int;
pub type CGLError = c_int;
#[allow(non_upper_case_globals)]
pub const kCGLCPSurfaceOpacity: CGLContextParameter = 236;
#[link(name = "OpenGL", kind = "framework")]
extern "C" {
pub fn glClear(mask: GLbitfield);
pub fn glClearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf);
pub fn glBegin(mode: GLenum);
pub fn glEnd();
pub fn glVertex2f(x: GLfloat, y: GLfloat);
pub fn glTexCoord2f(x: GLfloat, y: GLfloat);
pub fn glEnable(cap: GLenum);
pub fn glTexImage2D(
target: GLenum,
level: GLint,
internalFormat: GLint,
width: GLsizei,
height: GLsizei,
border: GLint,
format: GLenum,
ty: GLenum,
pixels: *const GLvoid,
);
pub fn glTexSubImage2D(
target: GLenum,
level: GLint,
xoffset: GLint,
yoffset: GLint,
width: GLsizei,
height: GLsizei,
format: GLenum,
ty: GLenum,
pixels: *const GLvoid,
);
pub fn glGenTextures(n: GLsizei, textures: *mut GLuint);
pub fn glBindTexture(target: GLenum, texture: GLuint);
pub fn glTexParameteri(target: GLenum, pname: GLenum, param: GLint);
pub fn glPixelStorei(pname: GLenum, param: GLint);
pub fn CGLSetParameter(
ctx: CGLContextObj,
pname: CGLContextParameter,
params: &GLint,
) -> CGLError;
}