]> git.cworth.org Git - apitrace/blobdiff - specs/cglapi.py
gltrace: Simplify AttribArray further.
[apitrace] / specs / cglapi.py
index fbae1b149eecd539d171845a9aac963f868940b6..f54ce8a29c7910660de87f49053f05b8ceb436bd 100644 (file)
@@ -44,49 +44,57 @@ CGSConnectionID = Opaque("CGSConnectionID")
 CGSWindowID = Alias("CGSWindowID", Int)
 CGSSurfaceID = Alias("CGSSurfaceID", Int)
 
-CGLPixelFormatAttribute = Enum("CGLPixelFormatAttribute", [
+CGLPixelFormatBoolAttributes = [
     "kCGLPFAAllRenderers",
     "kCGLPFADoubleBuffer",
     "kCGLPFAStereo",
     "kCGLPFAAuxBuffers",
-    "kCGLPFAColorSize",
-    "kCGLPFAAlphaSize",
-    "kCGLPFADepthSize",
-    "kCGLPFAStencilSize",
-    "kCGLPFAAccumSize",
     "kCGLPFAMinimumPolicy",
     "kCGLPFAMaximumPolicy",
     "kCGLPFAOffScreen",
     "kCGLPFAFullScreen",
-    "kCGLPFASampleBuffers",
-    "kCGLPFASamples",
     "kCGLPFAAuxDepthStencil",
     "kCGLPFAColorFloat",
     "kCGLPFAMultisample",
     "kCGLPFASupersample",
     "kCGLPFASampleAlpha",
-    "kCGLPFARendererID",
     "kCGLPFASingleRenderer",
     "kCGLPFANoRecovery",
     "kCGLPFAAccelerated",
     "kCGLPFAClosestPolicy",
+    "kCGLPFARobust",
     "kCGLPFABackingStore",
+    "kCGLPFAMPSafe",
     "kCGLPFAWindow",
+    "kCGLPFAMultiScreen",
     "kCGLPFACompliant",
-    "kCGLPFADisplayMask",
     "kCGLPFAPBuffer",
     "kCGLPFARemotePBuffer",
     "kCGLPFAAllowOfflineRenderers",
     "kCGLPFAAcceleratedCompute",
+    "kCGLOGLPVersion_Legacy",
+    "kCGLOGLPVersion_3_2_Core"
+]
+
+CGLPixelFormatIntAttributes = [
+    "kCGLPFAColorSize",
+    "kCGLPFAAlphaSize",
+    "kCGLPFADepthSize",
+    "kCGLPFAStencilSize",
+    "kCGLPFAAccumSize",
+    "kCGLPFASampleBuffers",
+    "kCGLPFASamples",
+    "kCGLPFARendererID",
+    "kCGLPFADisplayMask",
     "kCGLPFAOpenGLProfile",
-    "kCGLPFAVirtualScreenCount",
-    "kCGLPFARobust",
-    "kCGLPFAMPSafe",
-    "kCGLPFAMultiScreen",
+    "kCGLPFAVirtualScreenCount"
+]
 
-    "kCGLOGLPVersion_Legacy",
-    "kCGLOGLPVersion_3_2_Core",
-])
+CGLPixelFormatAttribute = Enum("CGLPixelFormatAttribute", CGLPixelFormatBoolAttributes + CGLPixelFormatIntAttributes)
+
+CGLPixelFormatAttribs = AttribArray(Const(CGLPixelFormatAttribute),
+                                    [(a, None) for a in CGLPixelFormatBoolAttributes] +
+                                    [(a, Int) for a in CGLPixelFormatIntAttributes])
 
 CGLRendererProperty = Enum("CGLRendererProperty", [
     "kCGLRPOffScreen",
@@ -180,7 +188,7 @@ CGLError = Enum("CGLError", [
 
 CGLContextObj = Opaque("CGLContextObj")
 
-cglapi = API("CGL")
+cglapi = Module("CGL")
 
 cglapi.addFunctions([
     # CGLCurrent.h, libGL.dylib
@@ -188,7 +196,7 @@ cglapi.addFunctions([
     Function(CGLContextObj, "CGLGetCurrentContext", []),
 
     # OpenGL.h, OpenGL framework
-    Function(CGLError, "CGLChoosePixelFormat", [(Array(Const(CGLPixelFormatAttribute), "_AttribList_size(attribs)"), "attribs"), Out(Pointer(CGLPixelFormatObj), "pix"), Out(Pointer(GLint), "npix")]),
+    Function(CGLError, "CGLChoosePixelFormat", [(CGLPixelFormatAttribs, "attribs"), Out(Pointer(CGLPixelFormatObj), "pix"), Out(Pointer(GLint), "npix")]),
     Function(CGLError, "CGLDestroyPixelFormat", [(CGLPixelFormatObj, "pix")]),
     Function(CGLError, "CGLDescribePixelFormat", [(CGLPixelFormatObj, "pix"), (GLint, "pix_num"), (CGLPixelFormatAttribute, "attrib"), Out(Pointer(GLint), "value")]),
     Function(Void, "CGLReleasePixelFormat", [(CGLPixelFormatObj, "pix")]),
@@ -221,19 +229,19 @@ cglapi.addFunctions([
     Function(CGLError, "CGLFlushDrawable", [(CGLContextObj, "ctx")]),
     Function(CGLError, "CGLEnable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]),
     Function(CGLError, "CGLDisable", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname")]),
-    Function(CGLError, "CGLIsEnabled", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname"), Out(Pointer(GLint), "enable")]),
+    Function(CGLError, "CGLIsEnabled", [(CGLContextObj, "ctx"), (CGLContextEnable, "pname"), Out(Pointer(GLint), "enable")], sideeffects=False),
     Function(CGLError, "CGLSetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), (Array(Const(GLint), 1), "params")]),
-    Function(CGLError, "CGLGetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), Out(Array(GLint, 1), "params")]),
+    Function(CGLError, "CGLGetParameter", [(CGLContextObj, "ctx"), (CGLContextParameter, "pname"), Out(Array(GLint, 1), "params")], sideeffects=False),
     Function(CGLError, "CGLSetVirtualScreen", [(CGLContextObj, "ctx"), (GLint, "screen")]),
-    Function(CGLError, "CGLGetVirtualScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLint), "screen")]),
+    Function(CGLError, "CGLGetVirtualScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLint), "screen")], sideeffects=False),
     Function(CGLError, "CGLSetGlobalOption", [(CGLGlobalOption, "pname"), (OpaquePointer(Const(GLint)), "params")]),
     Function(CGLError, "CGLGetGlobalOption", [(CGLGlobalOption, "pname"), Out(OpaquePointer(GLint), "params")]),
     Function(CGLError, "CGLSetOption", [(CGLGlobalOption, "pname"), (GLint, "param")]),
-    Function(CGLError, "CGLGetOption", [(CGLGlobalOption, "pname"), Out(Pointer(GLint), "param")]),
+    Function(CGLError, "CGLGetOption", [(CGLGlobalOption, "pname"), Out(Pointer(GLint), "param")], sideeffects=False),
     Function(CGLError, "CGLLockContext", [(CGLContextObj, "ctx")]),
     Function(CGLError, "CGLUnlockContext", [(CGLContextObj, "ctx")]),
-    Function(Void, "CGLGetVersion", [Out(Pointer(GLint), "majorvers"), Out(Pointer(GLint), "minorvers")]),
-    Function(ConstCString, "CGLErrorString", [(CGLError, "error")]),
+    Function(Void, "CGLGetVersion", [Out(Pointer(GLint), "majorvers"), Out(Pointer(GLint), "minorvers")], sideeffects=False),
+    Function(ConstCString, "CGLErrorString", [(CGLError, "error")], sideeffects=False),
 
     # CGLIOSurface.h, OpenGL framework
     Function(CGLError, "CGLTexImageIOSurface2D", [(CGLContextObj, "ctx"), (GLenum, "target"), (GLenum, "internal_format"), (GLsizei, "width"), (GLsizei, "height"), (GLenum, "format"), (GLenum, "type"), (IOSurfaceRef, "ioSurface"), (GLuint, "plane")]),
@@ -245,17 +253,20 @@ cglapi.addFunctions([
     Function(CGLError, "CGLSetSurface", [(CGLContextObj, "ctx"), (CGSConnectionID, "cid"), (CGSWindowID, "wid"), (CGSSurfaceID, "sid")]),
     Function(CGLError, "CGLGetSurface", [(CGLContextObj, "ctx"), (Pointer(CGSConnectionID), "cid"), (Pointer(CGSWindowID), "wid"), (Pointer(CGSSurfaceID), "sid")]),
     Function(CGLError, "CGLUpdateContext", [(CGLContextObj, "ctx")]),
-    # XXX: Confirm CGLOpenCLMuxLockDown
-    Function(CGLError, "CGLOpenCLMuxLockDown", []),
-    # FIXME: CGLAreContextsShared
-    # FIXME: CGLBackDispatch
-    # FIXME: CGLFrontDispatch
-    # FIXME: CGLGetNextContext
-    # FIXME: CGLRestoreDispatch
-    # FIXME: CGLRestoreDispatchFunction
-    # FIXME: CGLSelectDispatch
-    # FIXME: CGLSelectDispatchBounded
-    # FIXME: CGLSelectDispatchFunction
-    # FIXME: CGLSetPBufferVolatileState
+    # XXX: All the following prototypes are little more than guesses
+    # TODO: A potentially simpler alternative would be to use the
+    # DYLD_INTERPOSE mechanism and only intercept the calls that we
+    # really care about
+    Function(CGLError, "CGLOpenCLMuxLockDown", [], internal=True),
+    Function(GLboolean, "CGLAreContextsShared", [(CGLContextObj, "ctx1"), (CGLContextObj, "ctx2")], internal=True),
+    Function(CGLContextObj, "CGLGetNextContext", [(CGLContextObj, "ctx")], internal=True),
+    Function(OpaquePointer(Void), "CGLFrontDispatch", [(CGLContextObj, "ctx")], internal=True),
+    Function(OpaquePointer(Void), "CGLBackDispatch", [(CGLContextObj, "ctx")], internal=True),
+    Function(Void, "CGLSelectDispatch", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch")], internal=True),
+    Function(Void, "CGLSelectDispatchBounded", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "dispatch"), (GLint, "size")], internal=True),
+    Function(Void, "CGLSelectDispatchFunction", [(CGLContextObj, "ctx"), (OpaquePointer(Void), "functionPtr"), (GLint, "functionId")], internal=True),
+    Function(Void, "CGLRestoreDispatch", [(CGLContextObj, "ctx")], internal=True),
+    Function(Void, "CGLRestoreDispatchFunction", [(CGLContextObj, "ctx"), (GLint, "functionId")], internal=True),
+    Function(CGLError, "CGLSetPBufferVolatileState", [(CGLPBufferObj, "pbuffer"), (OpaquePointer(Void), "state")], internal=True),
 ])