1 ##########################################################################
3 # Copyright 2008-2009 VMware, Inc.
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 ##########################################################################/
26 """CGL API description.
28 http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGL_OpenGL/Reference/reference.html
34 from glapi import glapi
36 IOSurfaceRef = Opaque("IOSurfaceRef")
37 CGLContextObj = Opaque("CGLContextObj")
38 CGLPixelFormatObj = Opaque("CGLPixelFormatObj")
39 CGLRendererInfoObj = Opaque("CGLRendererInfoObj")
40 CGLPBufferObj = Opaque("CGLPBufferObj")
41 CGLShareGroup = Opaque("CGLShareGroup")
42 CGLShareGroupObj = Opaque("CGLShareGroupObj")
43 CGSConnectionID = Opaque("CGSConnectionID")
44 CGSWindowID = Alias("CGSWindowID", Int)
45 CGSSurfaceID = Alias("CGSSurfaceID", Int)
47 CGLPixelFormatBoolAttributes = [
48 "kCGLPFAAllRenderers",
49 "kCGLPFADoubleBuffer",
52 "kCGLPFAMinimumPolicy",
53 "kCGLPFAMaximumPolicy",
56 "kCGLPFAAuxDepthStencil",
61 "kCGLPFASingleRenderer",
64 "kCGLPFAClosestPolicy",
66 "kCGLPFABackingStore",
72 "kCGLPFARemotePBuffer",
73 "kCGLPFAAllowOfflineRenderers",
74 "kCGLPFAAcceleratedCompute",
75 "kCGLOGLPVersion_Legacy",
76 "kCGLOGLPVersion_3_2_Core"
79 CGLPixelFormatIntAttributes = [
85 "kCGLPFASampleBuffers",
89 "kCGLPFAOpenGLProfile",
90 "kCGLPFAVirtualScreenCount"
93 CGLPixelFormatAttribute = Enum("CGLPixelFormatAttribute", CGLPixelFormatBoolAttributes + CGLPixelFormatIntAttributes)
95 CGLPixelFormatAttribs = AttribArray(CGLPixelFormatAttribute,
96 [(a, None) for a in CGLPixelFormatBoolAttributes] +
97 [(a, Int) for a in CGLPixelFormatIntAttributes])
99 CGLRendererProperty = Enum("CGLRendererProperty", [
105 "kCGLRPBackingStore",
115 "kCGLRPStencilModes",
116 "kCGLRPMaxAuxBuffers",
117 "kCGLRPMaxSampleBuffers",
122 "kCGLRPTextureMemory",
123 "kCGLRPGPUVertProcCapable",
124 "kCGLRPGPUFragProcCapable",
125 "kCGLRPRendererCount",
127 "kCGLRPAcceleratedCompute",
130 CGLContextEnable = Enum("CGLContextEnable", [
131 "kCGLCESwapRectangle",
133 "kCGLCERasterization",
134 "kCGLCEStateValidation",
135 "kCGLCESurfaceBackingSize",
136 "kCGLCEDisplayListOptimization",
140 CGLContextParameter = Enum("CGLContextParameter", [
141 "kCGLCPSwapRectangle",
142 "kCGLCPSwapInterval",
143 "kCGLCPDispatchTableSize",
144 "kCGLCPClientStorage",
145 "kCGLCPSurfaceTexture",
146 "kCGLCPSurfaceOrder",
147 "kCGLCPSurfaceOpacity",
148 "kCGLCPSurfaceBackingSize",
149 "kCGLCPSurfaceSurfaceVolatile",
150 "kCGLCPReclaimResources",
151 "kCGLCPCurrentRendererID",
152 "kCGLCPGPUVertexProcessing",
153 "kCGLCPGPUFragmentProcessing",
155 "kCGLCPMPSwapsInFlight",
158 CGLGlobalOption = Enum("CGLGlobalOption", [
159 "kCGLGOFormatCacheSize",
160 "kCGLGOClearFormatCache",
161 "kCGLGORetainRenderers",
162 "kCGLGOResetLibrary",
163 "kCGLGOUseErrorHandler",
164 "kCGLGOUseBuildCache",
167 CGLError = Enum("CGLError", [
171 "kCGLBadPixelFormat",
172 "kCGLBadRendererInfo",
179 "kCGLBadEnumeration",
189 CGLContextObj = Opaque("CGLContextObj")
191 cglapi = Module("CGL")
193 cglapi.addFunctions([
194 # CGLCurrent.h, libGL.dylib
195 Function(CGLError, "CGLSetCurrentContext", [(CGLContextObj, "ctx")]),
196 Function(CGLContextObj, "CGLGetCurrentContext", []),
198 # OpenGL.h, OpenGL framework
199 Function(CGLError, "CGLChoosePixelFormat", [(CGLPixelFormatAttribs, "attribs"), Out(Pointer(CGLPixelFormatObj), "pix"), Out(Pointer(GLint), "npix")]),
200 Function(CGLError, "CGLDestroyPixelFormat", [(CGLPixelFormatObj, "pix")]),
201 Function(CGLError, "CGLDescribePixelFormat", [(CGLPixelFormatObj, "pix"), (GLint, "pix_num"), (CGLPixelFormatAttribute, "attrib"), Out(Pointer(GLint), "value")]),
202 Function(Void, "CGLReleasePixelFormat", [(CGLPixelFormatObj, "pix")]),
203 Function(CGLPixelFormatObj, "CGLRetainPixelFormat", [(CGLPixelFormatObj, "pix")]),
204 Function(GLuint, "CGLGetPixelFormatRetainCount", [(CGLPixelFormatObj, "pix")]),
205 Function(CGLError, "CGLQueryRendererInfo", [(GLuint, "display_mask"), Out(Pointer(CGLRendererInfoObj), "rend"), Out(Pointer(GLint), "nrend")]),
206 Function(CGLError, "CGLDestroyRendererInfo", [(CGLRendererInfoObj, "rend")]),
207 Function(CGLError, "CGLDescribeRenderer", [(CGLRendererInfoObj, "rend"), (GLint, "rend_num"), (CGLRendererProperty, "prop"), (OpaquePointer(GLint), "value")]),
208 Function(CGLError, "CGLCreateContext", [(CGLPixelFormatObj, "pix"), (CGLContextObj, "share"), Out(Pointer(CGLContextObj), "ctx")]),
209 Function(CGLError, "CGLDestroyContext", [(CGLContextObj, "ctx")]),
210 Function(CGLError, "CGLCopyContext", [(CGLContextObj, "src"), (CGLContextObj, "dst"), (GLbitfield, "mask")]),
211 Function(CGLContextObj, "CGLRetainContext", [(CGLContextObj, "ctx")]),
212 Function(Void, "CGLReleaseContext", [(CGLContextObj, "ctx")]),
213 Function(GLuint, "CGLGetContextRetainCount", [(CGLContextObj, "ctx")]),
214 Function(CGLPixelFormatObj, "CGLGetPixelFormat", [(CGLContextObj, "ctx")]),
215 Function(CGLError, "CGLCreatePBuffer", [(GLsizei, "width"), (GLsizei, "height"), (GLenum, "target"), (GLenum, "internalFormat"), (GLint, "max_level"), Out(Pointer(CGLPBufferObj), "pbuffer")]),
216 Function(CGLError, "CGLDestroyPBuffer", [(CGLPBufferObj, "pbuffer")]),
217 Function(CGLError, "CGLDescribePBuffer", [(CGLPBufferObj, "obj"), Out(Pointer(GLsizei), "width"), Out(Pointer(GLsizei), "height"), Out(Pointer(GLenum), "target"), Out(Pointer(GLenum), "internalFormat"), Out(Pointer(GLint), "mipmap")]),
218 Function(CGLError, "CGLTexImagePBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "source")]),
219 Function(CGLPBufferObj, "CGLRetainPBuffer", [(CGLPBufferObj, "pbuffer")]),
220 Function(Void, "CGLReleasePBuffer", [(CGLPBufferObj, "pbuffer")]),
221 Function(GLuint, "CGLGetPBufferRetainCount", [(CGLPBufferObj, "pbuffer")]),
222 Function(CGLError, "CGLSetOffScreen", [(CGLContextObj, "ctx"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "rowbytes"), (OpaquePointer(Void), "baseaddr")]),
223 Function(CGLError, "CGLGetOffScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLsizei), "width"), Out(Pointer(GLsizei), "height"), Out(Pointer(GLint), "rowbytes"), Out(Pointer(OpaquePointer(Void)), "baseaddr")]),
224 Function(CGLError, "CGLSetFullScreen", [(CGLContextObj, "ctx")]),
225 Function(CGLError, "CGLSetFullScreenOnDisplay", [(CGLContextObj, "ctx"), (GLuint, "display_mask")]),
226 Function(CGLError, "CGLSetPBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "face"), (GLint, "level"), (GLint, "screen")]),
227 Function(CGLError, "CGLGetPBuffer", [(CGLContextObj, "ctx"), Out(Pointer(CGLPBufferObj), "pbuffer"), Out(Pointer(GLenum), "face"), Out(Pointer(GLint), "level"), Out(Pointer(GLint), "screen")]),
228 Function(CGLError, "CGLClearDrawable", [(CGLContextObj, "ctx")]),
229 Function(CGLError, "CGLFlushDrawable", [(CGLContextObj, "ctx")]),
230 Function(CGLError, "CGLEnable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]),
231 Function(CGLError, "CGLDisable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]),
232 Function(CGLError, "CGLIsEnabled", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname"), Out(Pointer(GLint), "enable")], sideeffects=False),
233 Function(CGLError, "CGLSetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), (Array(Const(GLint), 1), "params")]),
234 Function(CGLError, "CGLGetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), Out(Array(GLint, 1), "params")], sideeffects=False),
235 Function(CGLError, "CGLSetVirtualScreen", [(CGLContextObj, "ctx"), (GLint, "screen")]),
236 Function(CGLError, "CGLGetVirtualScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLint), "screen")], sideeffects=False),
237 Function(CGLError, "CGLSetGlobalOption", [(CGLGlobalOption, "pname"), (OpaquePointer(Const(GLint)), "params")]),
238 Function(CGLError, "CGLGetGlobalOption", [(CGLGlobalOption, "pname"), Out(OpaquePointer(GLint), "params")]),
239 Function(CGLError, "CGLSetOption", [(CGLGlobalOption, "pname"), (GLint, "param")]),
240 Function(CGLError, "CGLGetOption", [(CGLGlobalOption, "pname"), Out(Pointer(GLint), "param")], sideeffects=False),
241 Function(CGLError, "CGLLockContext", [(CGLContextObj, "ctx")]),
242 Function(CGLError, "CGLUnlockContext", [(CGLContextObj, "ctx")]),
243 Function(Void, "CGLGetVersion", [Out(Pointer(GLint), "majorvers"), Out(Pointer(GLint), "minorvers")], sideeffects=False),
244 Function(ConstCString, "CGLErrorString", [(CGLError, "error")], sideeffects=False),
246 # CGLIOSurface.h, OpenGL framework
247 Function(CGLError, "CGLTexImageIOSurface2D", [(CGLContextObj, "ctx"), (GLenum, "target"), (GLenum, "internal_format"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (IOSurfaceRef, "ioSurface"), (GLuint, "plane")]),
249 # CGLDevice.h, OpenGL framework
250 Function(CGLShareGroupObj, "CGLGetShareGroup", [(CGLContextObj, "ctx")]),
252 # Undocumented, OpenGL framework
253 Function(CGLError, "CGLSetSurface", [(CGLContextObj, "ctx"), (CGSConnectionID, "cid"), (CGSWindowID, "wid"), (CGSSurfaceID, "sid")]),
254 Function(CGLError, "CGLGetSurface", [(CGLContextObj, "ctx"), (Pointer(CGSConnectionID), "cid"), (Pointer(CGSWindowID), "wid"), (Pointer(CGSSurfaceID), "sid")]),
255 Function(CGLError, "CGLUpdateContext", [(CGLContextObj, "ctx")]),
256 # XXX: All the following prototypes are little more than guesses
257 # TODO: A potentially simpler alternative would be to use the
258 # DYLD_INTERPOSE mechanism and only intercept the calls that we
260 Function(CGLError, "CGLOpenCLMuxLockDown", [], internal=True),
261 Function(GLboolean, "CGLAreContextsShared", [(CGLContextObj, "ctx1"), (CGLContextObj, "ctx2")], internal=True),
262 Function(CGLContextObj, "CGLGetNextContext", [(CGLContextObj, "ctx")], internal=True),
263 Function(OpaquePointer(Void), "CGLFrontDispatch", [(CGLContextObj, "ctx")], internal=True),
264 Function(OpaquePointer(Void), "CGLBackDispatch", [(CGLContextObj, "ctx")], internal=True),
265 Function(Void, "CGLSelectDispatch", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch")], internal=True),
266 Function(Void, "CGLSelectDispatchBounded", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch"), (GLint, "size")], internal=True),
267 Function(Void, "CGLSelectDispatchFunction", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "functionPtr"), (GLint, "functionId")], internal=True),
268 Function(Void, "CGLRestoreDispatch", [(CGLContextObj, "ctx")], internal=True),
269 Function(Void, "CGLRestoreDispatchFunction", [(CGLContextObj, "ctx"), (GLint, "functionId")], internal=True),
270 Function(CGLError, "CGLSetPBufferVolatileState", [(CGLPBufferObj, "pbuffer"), (OpaquePointer(Void), "state")], internal=True),