blob: 7482fb618ccfa00ec862401ef56996d8fbeca9c0 [file] [log] [blame]
##########################################################################
#
# Copyright 2008-2009 VMware, Inc.
# All Rights Reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
##########################################################################/
"""CGL API description.
http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGL_OpenGL/Reference/reference.html
"""
from .stdapi import *
from .glapi import *
from .glapi import glapi
IOSurfaceRef = Opaque("IOSurfaceRef")
CGLContextObj = Opaque("CGLContextObj")
CGLPixelFormatObj = Opaque("CGLPixelFormatObj")
CGLRendererInfoObj = Opaque("CGLRendererInfoObj")
CGLPBufferObj = Opaque("CGLPBufferObj")
CGLShareGroup = Opaque("CGLShareGroup")
CGLShareGroupObj = Opaque("CGLShareGroupObj")
CGSConnectionID = Opaque("CGSConnectionID")
CGSWindowID = Alias("CGSWindowID", Int)
CGSSurfaceID = Alias("CGSSurfaceID", Int)
CGLOpenGLProfile = Enum("CGLOpenGLProfile", [
'kCGLOGLPVersion_Legacy',
'kCGLOGLPVersion_3_2_Core',
#'kCGLOGLPVersion_GL3_Core', # Same as kCGLOGLPVersion_3_2_Core
'kCGLOGLPVersion_GL4_Core',
])
CGLPixelFormatAttributes = [
("kCGLPFAAllRenderers", None),
("kCGLPFATripleBuffer", None),
("kCGLPFADoubleBuffer", None),
("kCGLPFAStereo", None),
("kCGLPFAColorSize", Int),
("kCGLPFAAlphaSize", Int),
("kCGLPFADepthSize", Int),
("kCGLPFAStencilSize", Int),
("kCGLPFAMinimumPolicy", None),
("kCGLPFAMaximumPolicy", None),
("kCGLPFASampleBuffers", Int),
("kCGLPFASamples", Int),
("kCGLPFAColorFloat", None),
("kCGLPFAMultisample", None),
("kCGLPFASupersample", None),
("kCGLPFASampleAlpha", None),
("kCGLPFARendererID", Int),
("kCGLPFANoRecovery", None),
("kCGLPFAAccelerated", None),
("kCGLPFAClosestPolicy", None),
("kCGLPFABackingStore", None),
("kCGLPFABackingVolatile", None),
("kCGLPFADisplayMask", Int),
("kCGLPFAAllowOfflineRenderers", None),
("kCGLPFAAcceleratedCompute", None),
("kCGLPFAOpenGLProfile", CGLOpenGLProfile),
("kCGLPFASupportsAutomaticGraphicsSwitching", None),
("kCGLPFAVirtualScreenCount", Int),
("kCGLPFAAuxBuffers", Int),
("kCGLPFAAccumSize", Int),
("kCGLPFAAuxDepthStencil", None),
("kCGLPFAOffScreen", None),
("kCGLPFAWindow", None),
("kCGLPFACompliant", None),
("kCGLPFAPBuffer", None),
("kCGLPFARemotePBuffer", None),
("kCGLPFASingleRenderer", None),
("kCGLPFARobust", None),
("kCGLPFAMPSafe", None),
("kCGLPFAMultiScreen", None),
("kCGLPFAFullScreen", None),
(1262, None), # XXX: Undocumented, but looks like a boolean
]
CGLPixelFormatAttribute = Enum("CGLPixelFormatAttribute",
[attrib for attrib, _ in CGLPixelFormatAttributes if isinstance(attrib, str)]
)
CGLPixelFormatAttribs = AttribArray(
Const(CGLPixelFormatAttribute),
CGLPixelFormatAttributes
)
CGLRendererProperty = Enum("CGLRendererProperty", [
"kCGLRPOffScreen",
"kCGLRPFullScreen",
"kCGLRPRendererID",
"kCGLRPAccelerated",
"kCGLRPRobust",
"kCGLRPBackingStore",
"kCGLRPMPSafe",
"kCGLRPWindow",
"kCGLRPMultiScreen",
"kCGLRPCompliant",
"kCGLRPDisplayMask",
"kCGLRPBufferModes",
"kCGLRPColorModes",
"kCGLRPAccumModes",
"kCGLRPDepthModes",
"kCGLRPStencilModes",
"kCGLRPMaxAuxBuffers",
"kCGLRPMaxSampleBuffers",
"kCGLRPMaxSamples",
"kCGLRPSampleModes",
"kCGLRPSampleAlpha",
"kCGLRPVideoMemory",
"kCGLRPTextureMemory",
"kCGLRPGPUVertProcCapable",
"kCGLRPGPUFragProcCapable",
"kCGLRPRendererCount",
"kCGLRPOnline",
"kCGLRPAcceleratedCompute",
"kCGLRPVideoMemoryMegabytes",
"kCGLRPTextureMemoryMegabytes",
"kCGLRPMajorGLVersion",
])
CGLContextEnable = Enum("CGLContextEnable", [
"kCGLCESwapRectangle",
"kCGLCESwapLimit",
"kCGLCERasterization",
"kCGLCEStateValidation",
"kCGLCESurfaceBackingSize",
"kCGLCEDisplayListOptimization",
"kCGLCEMPEngine",
"kCGLCECrashOnRemovedFunctions",
])
CGLContextParameter = Enum("CGLContextParameter", [
"kCGLCPSwapRectangle",
"kCGLCPSwapInterval",
"kCGLCPDispatchTableSize",
"kCGLCPClientStorage",
"kCGLCPSurfaceTexture",
"kCGLCPSurfaceOrder",
"kCGLCPSurfaceOpacity",
"kCGLCPSurfaceBackingSize",
"kCGLCPSurfaceSurfaceVolatile",
"kCGLCPReclaimResources",
"kCGLCPCurrentRendererID",
"kCGLCPGPUVertexProcessing",
"kCGLCPGPUFragmentProcessing",
"kCGLCPHasDrawable",
"kCGLCPMPSwapsInFlight",
# CGLProfiler.h
"kCGLCPComment",
"kCGLCPDumpState",
"kCGLCPEnableForceFlush",
])
CGLGlobalOption = Enum("CGLGlobalOption", [
"kCGLGOFormatCacheSize",
"kCGLGOClearFormatCache",
"kCGLGORetainRenderers",
"kCGLGOResetLibrary",
"kCGLGOUseErrorHandler",
"kCGLGOUseBuildCache",
# CGLProfiler.h
"kCGLGOComment",
"kCGLGOEnableFunctionTrace",
"kCGLGOEnableFunctionStatistics",
"kCGLGOResetFunctionTrace",
"kCGLGOPageBreak",
"kCGLGOResetFunctionStatistics",
"kCGLGOEnableDebugAttach",
"kCGLGOHideObjects",
"kCGLGOEnableBreakpoint",
"kCGLGOForceSlowRenderingPath",
"kCGLGODisableImmediateRenderPath",
"kCGLGODisableCVARenderPath",
"kCGLGODisableVARRenderPath",
"kCGLGOForceWireframeRendering",
"kCGLGOSubmitOnImmediateRenderCommand",
"kCGLGOSubmitOnCVARenderCommand",
"kCGLGOSubmitOnVAORenderCommand",
"kCGLGOSubmitOnClearCommand",
"kCGLGOForceSoftwareTransformLighting",
"kCGLGOForceSoftwareTexgen",
"kCGLGOForceSoftwareTRUFORM_ATI",
"kCGLGOForceSoftwareVertexShaders",
"kCGLGODisableFragmentShaders_ATI",
"kCGLGODisableTexturing",
"kCGLGOOutlineTexture",
"kCGLGOOutlineTextureColor",
"kCGLGOForceSlowBitmapPath",
"kCGLGODisableBitmap",
"kCGLGOForceSlowReadPixelsPath",
"kCGLGODisableReadPixels",
"kCGLGOOutlineReadPixelsBuffer",
"kCGLGOOutlineReadPixelsBufferColor",
"kCGLGOForceSlowDrawPixelsPath",
"kCGLGODisableDrawPixels",
"kCGLGOOutlineDrawPixelsBuffer",
"kCGLGOOutlineDrawPixelsBufferColor",
"kCGLGOForceSlowCopyPixelsPath",
"kCGLGODisableCopyPixels",
"kCGLGOOutlineCopyPixelsBuffer",
"kCGLGOOutlineCopyPixelsBufferColor",
"kCGLGOMakeAllGLObjectsRequireUpdate",
"kCGLGOMakeAllGLStateRequireUpdate",
])
CGLError = Enum("CGLError", [
"kCGLNoError",
"kCGLBadAttribute",
"kCGLBadProperty",
"kCGLBadPixelFormat",
"kCGLBadRendererInfo",
"kCGLBadContext",
"kCGLBadDrawable",
"kCGLBadDisplay",
"kCGLBadState",
"kCGLBadValue",
"kCGLBadMatch",
"kCGLBadEnumeration",
"kCGLBadOffScreen",
"kCGLBadFullScreen",
"kCGLBadWindow",
"kCGLBadAddress",
"kCGLBadCodeModule",
"kCGLBadAlloc",
"kCGLBadConnection",
])
CGLContextObj = Opaque("CGLContextObj")
cglapi = Module("CGL")
cglapi.addFunctions([
# CGLCurrent.h, libGL.dylib
Function(CGLError, "CGLSetCurrentContext", [(CGLContextObj, "ctx")]),
Function(CGLContextObj, "CGLGetCurrentContext", []),
# OpenGL.h, OpenGL framework
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")], sideeffects=False),
Function(Void, "CGLReleasePixelFormat", [(CGLPixelFormatObj, "pix")]),
Function(CGLPixelFormatObj, "CGLRetainPixelFormat", [(CGLPixelFormatObj, "pix")]),
Function(GLuint, "CGLGetPixelFormatRetainCount", [(CGLPixelFormatObj, "pix")]),
Function(CGLError, "CGLQueryRendererInfo", [(GLuint, "display_mask"), Out(Pointer(CGLRendererInfoObj), "rend"), Out(Pointer(GLint), "nrend")]),
Function(CGLError, "CGLDestroyRendererInfo", [(CGLRendererInfoObj, "rend")]),
Function(CGLError, "CGLDescribeRenderer", [(CGLRendererInfoObj, "rend"), (GLint, "rend_num"), (CGLRendererProperty, "prop"), Out(Pointer(GLint), "value")], sideeffects=False),
Function(CGLError, "CGLCreateContext", [(CGLPixelFormatObj, "pix"), (CGLContextObj, "share"), Out(Pointer(CGLContextObj), "ctx")]),
Function(CGLError, "CGLDestroyContext", [(CGLContextObj, "ctx")]),
Function(CGLError, "CGLCopyContext", [(CGLContextObj, "src"), (CGLContextObj, "dst"), (GLbitfield, "mask")]),
Function(CGLContextObj, "CGLRetainContext", [(CGLContextObj, "ctx")]),
Function(Void, "CGLReleaseContext", [(CGLContextObj, "ctx")]),
Function(GLuint, "CGLGetContextRetainCount", [(CGLContextObj, "ctx")]),
Function(CGLPixelFormatObj, "CGLGetPixelFormat", [(CGLContextObj, "ctx")]),
Function(CGLError, "CGLCreatePBuffer", [(GLsizei, "width"), (GLsizei, "height"), (GLenum, "target"), (GLenum, "internalFormat"), (GLint, "max_level"), Out(Pointer(CGLPBufferObj), "pbuffer")]),
Function(CGLError, "CGLDestroyPBuffer", [(CGLPBufferObj, "pbuffer")]),
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")]),
Function(CGLError, "CGLTexImagePBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "source")]),
Function(CGLPBufferObj, "CGLRetainPBuffer", [(CGLPBufferObj, "pbuffer")]),
Function(Void, "CGLReleasePBuffer", [(CGLPBufferObj, "pbuffer")]),
Function(GLuint, "CGLGetPBufferRetainCount", [(CGLPBufferObj, "pbuffer")]),
Function(CGLError, "CGLSetOffScreen", [(CGLContextObj, "ctx"), (GLsizei, "width"), (GLsizei, "height"), (GLint, "rowbytes"), (OpaquePointer(Void), "baseaddr")]),
Function(CGLError, "CGLGetOffScreen", [(CGLContextObj, "ctx"), Out(Pointer(GLsizei), "width"), Out(Pointer(GLsizei), "height"), Out(Pointer(GLint), "rowbytes"), Out(Pointer(OpaquePointer(Void)), "baseaddr")]),
Function(CGLError, "CGLSetFullScreen", [(CGLContextObj, "ctx")]),
Function(CGLError, "CGLSetFullScreenOnDisplay", [(CGLContextObj, "ctx"), (GLuint, "display_mask")]),
Function(CGLError, "CGLSetPBuffer", [(CGLContextObj, "ctx"), (CGLPBufferObj, "pbuffer"), (GLenum, "face"), (GLint, "level"), (GLint, "screen")]),
Function(CGLError, "CGLGetPBuffer", [(CGLContextObj, "ctx"), Out(Pointer(CGLPBufferObj), "pbuffer"), Out(Pointer(GLenum), "face"), Out(Pointer(GLint), "level"), Out(Pointer(GLint), "screen")]),
Function(CGLError, "CGLClearDrawable", [(CGLContextObj, "ctx")]),
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")], 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")], sideeffects=False),
Function(CGLError, "CGLSetVirtualScreen", [(CGLContextObj, "ctx"), (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")], sideeffects=False),
Function(CGLError, "CGLSetOption", [(CGLGlobalOption, "pname"), (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")], 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")]),
# CGLDevice.h, OpenGL framework
Function(CGLShareGroupObj, "CGLGetShareGroup", [(CGLContextObj, "ctx")]),
# Undocumented, OpenGL framework
Function(CGLError, "CGLSetSurface", [(CGLContextObj, "ctx"), (CGSConnectionID, "cid"), (CGSWindowID, "wid"), (CGSSurfaceID, "sid")]),
Function(CGLError, "CGLGetSurface", [(CGLContextObj, "ctx"), Out(Pointer(CGSConnectionID), "cid"), Out(Pointer(CGSWindowID), "wid"), Out(Pointer(CGSSurfaceID), "sid")]),
Function(CGLError, "CGLUpdateContext", [(CGLContextObj, "ctx")]),
# 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),
])