1 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT 2 // file at the top-level directory of this distribution. 3 // 4 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or 5 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your 7 // option. This file may not be copied, modified, or distributed 8 // except according to those terms. 9 10 // Mac-specific OpenGL bindings. 11 12 #![allow(non_upper_case_globals)] 13 14 use libc::{c_void, c_int, c_char}; 15 use std::os::raw; 16 17 pub type GLenum = raw::c_uint; 18 pub type GLint = raw::c_int; 19 pub type GLsizei = raw::c_int; 20 pub type GLuint = raw::c_uint; 21 22 pub type CGLPixelFormatAttribute = c_int; 23 pub type CGLContextParameter = c_int; 24 pub type CGLContextEnable = c_int; 25 pub type CGLGlobalOption = c_int; 26 pub type CGLError = c_int; 27 28 pub type CGLPixelFormatObj = *mut c_void; 29 pub type CGLContextObj = *mut c_void; 30 pub type CGLShareGroupObj = *mut c_void; 31 pub type IOSurfaceRef = *mut c_void; 32 33 pub const kCGLNoError: CGLError = 0; 34 35 pub const kCGLPFAAllRenderers: CGLPixelFormatAttribute = 1; 36 pub const kCGLPFADoubleBuffer: CGLPixelFormatAttribute = 5; 37 pub const kCGLPFAStereo: CGLPixelFormatAttribute = 6; 38 pub const kCGLPFAAuxBuffers: CGLPixelFormatAttribute = 7; 39 pub const kCGLPFAColorSize: CGLPixelFormatAttribute = 8; 40 pub const kCGLPFAAlphaSize: CGLPixelFormatAttribute = 11; 41 pub const kCGLPFADepthSize: CGLPixelFormatAttribute = 12; 42 pub const kCGLPFAStencilSize: CGLPixelFormatAttribute = 13; 43 pub const kCGLPFAAccumSize: CGLPixelFormatAttribute = 14; 44 pub const kCGLPFAMinimumPolicy: CGLPixelFormatAttribute = 51; 45 pub const kCGLPFAMaximumPolicy: CGLPixelFormatAttribute = 52; 46 pub const kCGLPFAOffScreen: CGLPixelFormatAttribute = 53; 47 pub const kCGLPFAFullScreen: CGLPixelFormatAttribute = 54; 48 pub const kCGLPFASampleBuffers: CGLPixelFormatAttribute = 55; 49 pub const kCGLPFASamples: CGLPixelFormatAttribute = 56; 50 pub const kCGLPFAAuxDepthStencil: CGLPixelFormatAttribute = 57; 51 pub const kCGLPFAColorFloat: CGLPixelFormatAttribute = 58; 52 pub const kCGLPFAMultisample: CGLPixelFormatAttribute = 59; 53 pub const kCGLPFASupersample: CGLPixelFormatAttribute = 60; 54 pub const kCGLPFASampleAlpha: CGLPixelFormatAttribute = 61; 55 pub const kCGLPFARendererID: CGLPixelFormatAttribute = 70; 56 pub const kCGLPFASingleRenderer: CGLPixelFormatAttribute = 71; 57 pub const kCGLPFANoRecovery: CGLPixelFormatAttribute = 72; 58 pub const kCGLPFAAccelerated: CGLPixelFormatAttribute = 73; 59 pub const kCGLPFAClosestPolicy: CGLPixelFormatAttribute = 74; 60 pub const kCGLPFARobust: CGLPixelFormatAttribute = 75; 61 pub const kCGLPFABackingStore: CGLPixelFormatAttribute = 76; 62 pub const kCGLPFAMPSafe: CGLPixelFormatAttribute = 78; 63 pub const kCGLPFAWindow: CGLPixelFormatAttribute = 80; 64 pub const kCGLPFAMultiScreen: CGLPixelFormatAttribute = 81; 65 pub const kCGLPFACompliant: CGLPixelFormatAttribute = 83; 66 pub const kCGLPFADisplayMask: CGLPixelFormatAttribute = 84; 67 pub const kCGLPFAPBuffer: CGLPixelFormatAttribute = 90; 68 pub const kCGLPFARemotePBuffer: CGLPixelFormatAttribute = 91; 69 pub const kCGLPFAAllowOfflineRenderers: CGLPixelFormatAttribute = 96; 70 pub const kCGLPFAAcceleratedCompute: CGLPixelFormatAttribute = 97; 71 pub const kCGLPFAOpenGLProfile: CGLPixelFormatAttribute = 99; 72 pub const kCGLPFAVirtualScreenCount: CGLPixelFormatAttribute = 128; 73 74 pub const kCGLCESwapRectangle: CGLContextEnable = 201; 75 pub const kCGLCESwapLimit: CGLContextEnable = 203; 76 pub const kCGLCERasterization: CGLContextEnable = 221; 77 pub const kCGLCEStateValidation: CGLContextEnable = 301; 78 pub const kCGLCESurfaceBackingSize: CGLContextEnable = 305; 79 pub const kCGLCEDisplayListOptimization: CGLContextEnable = 307; 80 pub const kCGLCEMPEngine: CGLContextEnable = 313; 81 pub const kCGLCECrashOnRemovedFunctions: CGLContextEnable = 316; 82 83 pub const kCGLCPSwapRectangle: CGLContextParameter = 200; 84 pub const kCGLCPSwapInterval: CGLContextParameter = 222; 85 pub const kCGLCPDispatchTableSize: CGLContextParameter = 224; 86 pub const kCGLCPClientStorage: CGLContextParameter = 226; 87 pub const kCGLCPSurfaceTexture: CGLContextParameter = 228; 88 pub const kCGLCPSurfaceOrder: CGLContextParameter = 235; 89 pub const kCGLCPSurfaceOpacity: CGLContextParameter = 236; 90 pub const kCGLCPSurfaceBackingSize: CGLContextParameter = 304; 91 pub const kCGLCPSurfaceSurfaceVolatile: CGLContextParameter = 306; 92 pub const kCGLCPReclaimResources: CGLContextParameter = 308; 93 pub const kCGLCPCurrentRendererID: CGLContextParameter = 309; 94 pub const kCGLCPGPUVertexProcessing: CGLContextParameter = 310; 95 pub const kCGLCPGPUFragmentProcessing: CGLContextParameter = 311; 96 pub const kCGLCPHasDrawable: CGLContextParameter = 314; 97 pub const kCGLCPMPSwapsInFlight: CGLContextParameter = 315; 98 99 pub const kCGLGOFormatCacheSize: CGLGlobalOption = 501; 100 pub const kCGLGOClearFormatCache: CGLGlobalOption = 502; 101 pub const kCGLGORetainRenderers: CGLGlobalOption = 503; 102 pub const kCGLGOResetLibrary: CGLGlobalOption = 504; 103 pub const kCGLGOUseErrorHandler: CGLGlobalOption = 505; 104 pub const kCGLGOUseBuildCache: CGLGlobalOption = 506; 105 106 pub const CORE_BOOLEAN_ATTRIBUTES: &'static [CGLPixelFormatAttribute] = 107 &[kCGLPFAAllRenderers, 108 kCGLPFADoubleBuffer, 109 kCGLPFAStereo, 110 kCGLPFAAuxBuffers, 111 kCGLPFAMinimumPolicy, 112 kCGLPFAMaximumPolicy, 113 kCGLPFAOffScreen, 114 kCGLPFAFullScreen, 115 kCGLPFAAuxDepthStencil, 116 kCGLPFAColorFloat, 117 kCGLPFAMultisample, 118 kCGLPFASupersample, 119 kCGLPFASampleAlpha, 120 kCGLPFASingleRenderer, 121 kCGLPFANoRecovery, 122 kCGLPFAAccelerated, 123 kCGLPFAClosestPolicy, 124 kCGLPFARobust, 125 kCGLPFABackingStore, 126 kCGLPFAMPSafe, 127 kCGLPFAWindow, 128 kCGLPFAMultiScreen, 129 kCGLPFACompliant, 130 kCGLPFAPBuffer, 131 kCGLPFARemotePBuffer, 132 kCGLPFAAllowOfflineRenderers, 133 kCGLPFAAcceleratedCompute]; 134 135 pub const CORE_INTEGER_ATTRIBUTES: &'static [CGLPixelFormatAttribute] = 136 &[kCGLPFAColorSize, 137 kCGLPFAAlphaSize, 138 kCGLPFADepthSize, 139 kCGLPFAStencilSize, 140 kCGLPFAAccumSize, 141 kCGLPFASampleBuffers, 142 kCGLPFASamples, 143 kCGLPFARendererID, 144 kCGLPFADisplayMask, 145 kCGLPFAOpenGLProfile, 146 kCGLPFAVirtualScreenCount]; 147 148 #[link(name = "OpenGL", kind = "framework")] 149 extern { 150 // CGLCurrent.h 151 CGLSetCurrentContext(ctx: CGLContextObj) -> CGLError152 pub fn CGLSetCurrentContext(ctx: CGLContextObj) -> CGLError; CGLGetCurrentContext() -> CGLContextObj153 pub fn CGLGetCurrentContext() -> CGLContextObj; CGLGetShareGroup(context: CGLContextObj) -> CGLShareGroupObj154 pub fn CGLGetShareGroup(context: CGLContextObj) -> CGLShareGroupObj; 155 156 // OpenGL.h 157 158 // Pixel format functions CGLChoosePixelFormat(attribs: *const CGLPixelFormatAttribute, pix: *mut CGLPixelFormatObj, npix: *mut GLint) -> CGLError159 pub fn CGLChoosePixelFormat(attribs: *const CGLPixelFormatAttribute, 160 pix: *mut CGLPixelFormatObj, 161 npix: *mut GLint) -> CGLError; CGLDescribePixelFormat(pix: CGLPixelFormatObj, pix_num: GLint, attrib: CGLPixelFormatAttribute, value: *mut GLint) -> CGLError162 pub fn CGLDescribePixelFormat(pix: CGLPixelFormatObj, 163 pix_num: GLint, 164 attrib: CGLPixelFormatAttribute, 165 value: *mut GLint) -> CGLError; CGLDestroyPixelFormat(pix: CGLPixelFormatObj) -> CGLError166 pub fn CGLDestroyPixelFormat(pix: CGLPixelFormatObj) -> CGLError; CGLReleasePixelFormat(pix: CGLPixelFormatObj)167 pub fn CGLReleasePixelFormat(pix: CGLPixelFormatObj); CGLRetainPixelFormat(pix: CGLPixelFormatObj) -> CGLPixelFormatObj168 pub fn CGLRetainPixelFormat(pix: CGLPixelFormatObj) -> CGLPixelFormatObj; CGLGetPixelFormatRetainCount(pix: CGLPixelFormatObj) -> GLuint169 pub fn CGLGetPixelFormatRetainCount(pix: CGLPixelFormatObj) -> GLuint; 170 171 // Context functions CGLCreateContext(pix: CGLPixelFormatObj, share: CGLContextObj, ctx: *mut CGLContextObj) -> CGLError172 pub fn CGLCreateContext(pix: CGLPixelFormatObj, share: CGLContextObj, ctx: *mut CGLContextObj) -> 173 CGLError; CGLDestroyContext(ctx: CGLContextObj) -> CGLError174 pub fn CGLDestroyContext(ctx: CGLContextObj) -> CGLError; CGLGetPixelFormat(ctx: CGLContextObj) -> CGLPixelFormatObj175 pub fn CGLGetPixelFormat(ctx: CGLContextObj) -> CGLPixelFormatObj; 176 177 // Getting and Setting Context Options CGLEnable(ctx: CGLContextObj, pname: CGLContextEnable) -> CGLError178 pub fn CGLEnable(ctx: CGLContextObj, pname: CGLContextEnable) -> CGLError; CGLDisable(ctx: CGLContextObj, pname: CGLContextEnable) -> CGLError179 pub fn CGLDisable(ctx: CGLContextObj, pname: CGLContextEnable) -> CGLError; CGLIsEnabled(ctx: CGLContextObj, pname: CGLContextEnable, enable: &mut GLint) -> CGLError180 pub fn CGLIsEnabled(ctx: CGLContextObj, pname: CGLContextEnable, enable: &mut GLint) -> CGLError; CGLSetParameter(ctx: CGLContextObj, pname: CGLContextParameter, params: &GLint) -> CGLError181 pub fn CGLSetParameter(ctx: CGLContextObj, pname: CGLContextParameter, params: &GLint) -> CGLError; CGLGetParameter(ctx: CGLContextObj, pname: CGLContextParameter, params: &mut GLint) -> CGLError182 pub fn CGLGetParameter(ctx: CGLContextObj, pname: CGLContextParameter, params: &mut GLint) -> CGLError; 183 184 // Locking functions CGLLockContext(ctx: CGLContextObj) -> CGLError185 pub fn CGLLockContext(ctx: CGLContextObj) -> CGLError; CGLUnlockContext(ctx: CGLContextObj) -> CGLError186 pub fn CGLUnlockContext(ctx: CGLContextObj) -> CGLError; 187 188 // Getting and Setting Global Information CGLSetOption(pname: CGLGlobalOption, param: &GLint) -> CGLError189 pub fn CGLSetOption(pname: CGLGlobalOption, param: &GLint) -> CGLError; CGLGetOption(pname: CGLGlobalOption, param: &mut GLint) -> CGLError190 pub fn CGLGetOption(pname: CGLGlobalOption, param: &mut GLint) -> CGLError; CGLSetGlobalOption(pname: CGLGlobalOption, param: &GLint) -> CGLError191 pub fn CGLSetGlobalOption(pname: CGLGlobalOption, param: &GLint) -> CGLError; CGLGetGlobalOption(pname: CGLGlobalOption, param: &mut GLint) -> CGLError192 pub fn CGLGetGlobalOption(pname: CGLGlobalOption, param: &mut GLint) -> CGLError; CGLGetVersion(major: &mut GLint, minor: &mut GLint) -> CGLError193 pub fn CGLGetVersion (major: &mut GLint, minor: &mut GLint) -> CGLError; 194 195 // CGLIOSurface.h 196 CGLTexImageIOSurface2D(ctx: CGLContextObj, target: GLenum, internal_format: GLenum, width: GLsizei, height: GLsizei, format: GLenum, ty: GLenum, ioSurface: IOSurfaceRef, plane: GLuint) -> CGLError197 pub fn CGLTexImageIOSurface2D(ctx: CGLContextObj, target: GLenum, internal_format: GLenum, 198 width: GLsizei, height: GLsizei, format: GLenum, ty: GLenum, 199 ioSurface: IOSurfaceRef, plane: GLuint) -> CGLError; 200 201 // https://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CGL_OpenGL/#//apple_ref/c/func/CGLErrorString 202 CGLErrorString(error: CGLError) -> *const c_char203 pub fn CGLErrorString(error: CGLError) -> *const c_char; 204 } 205