Mercurial > projects > dstep
diff dstep/appkit/NSOpenGL.d @ 16:19885b43130e
Huge update, the bridge actually works now
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sun, 03 Jan 2010 22:06:11 +0100 |
parents | |
children | b9de51448c6b |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dstep/appkit/NSOpenGL.d Sun Jan 03 22:06:11 2010 +0100 @@ -0,0 +1,321 @@ +/** + * Copyright: Copyright (c) 2009 Jacob Carlborg. + * Authors: Jacob Carlborg + * Version: Initial created: Sep 24, 2009 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module dstep.appkit.NSOpenGL; + +import dstep.appkit.NSScreen; +import dstep.appkit.NSView; +import dstep.foundation.NSCoder; +import dstep.foundation.NSData; +import dstep.foundation.NSObject; +import dstep.objc.bridge.Bridge; +import dstep.objc.objc; +import dstep.opengl.gl; +import dstep.opengl.CGLTypes; + +typedef uint NSOpenGLPixelFormatAttribute; +alias _CGLPixelFormatObject NSOpenGLPixelFormatAuxiliary; +alias _CGLContextObject NSOpenGLContextAuxiliary; + +enum +{ + NSOpenGLGOFormatCacheSize = 501, + NSOpenGLGOClearFormatCache = 502, + NSOpenGLGORetainRenderers = 503, + NSOpenGLGOResetLibrary = 504 +} + +enum : uint +{ + NSOpenGLPFAAllRenderers = 1, + NSOpenGLPFADoubleBuffer = 5, + NSOpenGLPFAStereo = 6, + NSOpenGLPFAAuxBuffers = 7, + NSOpenGLPFAColorSize = 8, + NSOpenGLPFAAlphaSize = 11, + NSOpenGLPFADepthSize = 12, + NSOpenGLPFAStencilSize = 13, + NSOpenGLPFAAccumSize = 14, + NSOpenGLPFAMinimumPolicy = 51, + NSOpenGLPFAMaximumPolicy = 52, + NSOpenGLPFAOffScreen = 53, + NSOpenGLPFAFullScreen = 54, + NSOpenGLPFASampleBuffers = 55, + NSOpenGLPFASamples = 56, + NSOpenGLPFAAuxDepthStencil = 57, + NSOpenGLPFAColorFloat = 58, + NSOpenGLPFAMultisample = 59, + NSOpenGLPFASupersample = 60, + NSOpenGLPFASampleAlpha = 61, + NSOpenGLPFARendererID = 70, + NSOpenGLPFASingleRenderer = 71, + NSOpenGLPFANoRecovery = 72, + NSOpenGLPFAAccelerated = 73, + NSOpenGLPFAClosestPolicy = 74, + NSOpenGLPFARobust = 75, + NSOpenGLPFABackingStore = 76, + NSOpenGLPFAMPSafe = 78, + NSOpenGLPFAWindow = 80, + NSOpenGLPFAMultiScreen = 81, + NSOpenGLPFACompliant = 83, + NSOpenGLPFAScreenMask = 84, + NSOpenGLPFAPixelBuffer = 90, + NSOpenGLPFAAllowOfflineRenderers = 96, + NSOpenGLPFAVirtualScreenCount = 128 +} + +enum +{ + NSOpenGLCPSwapRectangle = 200, + NSOpenGLCPSwapRectangleEnable = 201, + NSOpenGLCPRasterizationEnable = 221, + NSOpenGLCPSwapInterval = 222, + NSOpenGLCPSurfaceOrder = 235, + NSOpenGLCPSurfaceOpacity = 236, + NSOpenGLCPStateValidation = 301 +} + +class NSOpenGLPixelFormat : NSObject, INSCoding +{ + mixin (ObjcWrap); + + this (NSCoder aDecoder) + { + super(typeof(this).alloc.initWithCoder(aDecoder).objcObject); + } + + void encodeWithCoder (NSCoder aCoder) + { + return invokeObjcSelf!(void, "encodeWithCoder:", NSCoder)(aCoder); + } + + typeof(this) initWithCoder (NSCoder aDecoder) + { + return invokeObjcSelf!(typeof(this), "initWithCoder:", NSCoder)(aDecoder); + } + + NSOpenGLPixelFormat initWithAttributes (NSOpenGLPixelFormatAttribute* attribs) + { + id result = invokeObjcSelf!(id, "initWithAttributes:", NSOpenGLPixelFormatAttribute*)(attribs); + return result is this.objcObject ? this : (result !is null ? new NSOpenGLPixelFormat(result) : null); + } + + this (NSOpenGLPixelFormatAttribute* attribs) + { + super(NSOpenGLPixelFormat.alloc.initWithAttributes(attribs).objcObject); + } + + NSOpenGLPixelFormat initWithData (NSData attribs) + { + id result = invokeObjcSelf!(id, "initWithData:", NSData)(attribs); + return result is this.objcObject ? this : (result !is null ? new NSOpenGLPixelFormat(result) : null); + } + + this (NSData attribs) + { + super(NSOpenGLPixelFormat.alloc.initWithData(attribs).objcObject); + } + + NSData attributes () + { + return invokeObjcSelf!(NSData, "attributes"); + } + + void setAttributes (NSData attribs) + { + return invokeObjcSelf!(void, "setAttributes:", NSData)(attribs); + } + + void getValues (ref GLint vals, uint attrib, int screen) + { + return invokeObjcSelf!(void, "getValues:forAttribute:forVirtualScreen:", GLint*, uint, int)(&vals, attrib, screen); + } + + int numberOfVirtualScreens () + { + return invokeObjcSelf!(int, "numberOfVirtualScreens"); + } + + void* CGLPixelFormatObj () + { + return invokeObjcSelf!(void*, "CGLPixelFormatObj"); + } + +} + +class NSOpenGLContext : NSObject +{ + mixin (ObjcWrap); + + NSOpenGLContext initWithFormat (NSOpenGLPixelFormat format, NSOpenGLContext share) + { + id result = invokeObjcSelf!(id, "initWithFormat:shareContext:", NSOpenGLPixelFormat, NSOpenGLContext)(format, share); + return result is this.objcObject ? this : (result !is null ? new NSOpenGLContext(result) : null); + } + + this (NSOpenGLPixelFormat format, NSOpenGLContext share) + { + super(NSOpenGLContext.alloc.initWithFormat(format, share).objcObject); + } + + void setView (NSView view) + { + return invokeObjcSelf!(void, "setView:", NSView)(view); + } + + NSView view () + { + return invokeObjcSelf!(NSView, "view"); + } + + void setFullScreen () + { + return invokeObjcSelf!(void, "setFullScreen"); + } + + void setOffScreen (void* baseaddr, int width, int height, int rowbytes) + { + return invokeObjcSelf!(void, "setOffScreen:width:height:rowbytes:", void*, int, int, int)(baseaddr, width, height, rowbytes); + } + + void clearDrawable () + { + return invokeObjcSelf!(void, "clearDrawable"); + } + + void update () + { + return invokeObjcSelf!(void, "update"); + } + + void flushBuffer () + { + return invokeObjcSelf!(void, "flushBuffer"); + } + + void makeCurrentContext () + { + return invokeObjcSelf!(void, "makeCurrentContext"); + } + + static void clearCurrentContext () + { + return invokeObjcSelfClass!(void, "clearCurrentContext"); + } + + static NSOpenGLContext currentContext () + { + return invokeObjcSelfClass!(NSOpenGLContext, "currentContext"); + } + + void copyAttributesFromContext (NSOpenGLContext context, uint mask) + { + return invokeObjcSelf!(void, "copyAttributesFromContext:withMask:", NSOpenGLContext, uint)(context, mask); + } + + void setValues (GLint* vals, int param) + { + return invokeObjcSelf!(void, "setValues:forParameter:", GLint*, int)(vals, param); + } + + void getValues (GLint* vals, int param) + { + return invokeObjcSelf!(void, "getValues:forParameter:", GLint*, int)(vals, param); + } + + void setCurrentVirtualScreen (int screen) + { + return invokeObjcSelf!(void, "setCurrentVirtualScreen:", int)(screen); + } + + int currentVirtualScreen () + { + return invokeObjcSelf!(int, "currentVirtualScreen"); + } + + void createTexture (uint target, NSView view, uint format) + { + return invokeObjcSelf!(void, "createTexture:fromView:internalFormat:", uint, NSView, uint)(target, view, format); + } + + void* CGLContextObj () + { + return invokeObjcSelf!(void*, "CGLContextObj"); + } + + void setPixelBuffer (NSOpenGLPixelBuffer pixelBuffer, uint face, int level, int screen) + { + return invokeObjcSelf!(void, "setPixelBuffer:cubeMapFace:mipMapLevel:currentVirtualScreen:", NSOpenGLPixelBuffer, uint, int, int)(pixelBuffer, face, level, screen); + } + + NSOpenGLPixelBuffer pixelBuffer () + { + return invokeObjcSelf!(NSOpenGLPixelBuffer, "pixelBuffer"); + } + + uint pixelBufferCubeMapFace () + { + return invokeObjcSelf!(uint, "pixelBufferCubeMapFace"); + } + + int pixelBufferMipMapLevel () + { + return invokeObjcSelf!(int, "pixelBufferMipMapLevel"); + } + + void setTextureImageToPixelBuffer (NSOpenGLPixelBuffer pixelBuffer, uint source) + { + return invokeObjcSelf!(void, "setTextureImageToPixelBuffer:colorBuffer:", NSOpenGLPixelBuffer, uint)(pixelBuffer, source); + } +} + +class NSOpenGLPixelBuffer : NSObject +{ + mixin (ObjcWrap); + + NSOpenGLPixelBuffer initWithTextureTarget (uint target, uint format, int maxLevel, int pixelsWide, int pixelsHigh) + { + id result = invokeObjcSelf!(id, "initWithTextureTarget:textureInternalFormat:textureMaxMipMapLevel:pixelsWide:pixelsHigh:", uint, uint, int, int, int)(target, format, maxLevel, pixelsWide, pixelsHigh); + return result is this.objcObject ? this : (result !is null ? new NSOpenGLPixelBuffer(result) : null); + } + + this (uint target, uint format, int maxLevel, int pixelsWide, int pixelsHigh) + { + super(NSOpenGLPixelBuffer.alloc.initWithTextureTarget(target, format, maxLevel, pixelsWide, pixelsHigh).objcObject); + } + + int pixelsWide () + { + return invokeObjcSelf!(int, "pixelsWide"); + } + + int pixelsHigh () + { + return invokeObjcSelf!(int, "pixelsHigh"); + } + + uint textureTarget () + { + return invokeObjcSelf!(uint, "textureTarget"); + } + + uint textureInternalFormat () + { + return invokeObjcSelf!(uint, "textureInternalFormat"); + } + + int textureMaxMipMapLevel () + { + return invokeObjcSelf!(int, "textureMaxMipMapLevel"); + } +} + +extern (C) +{ + void NSOpenGLSetOption (int pname, int param); + void NSOpenGLGetOption (int pname, GLint* param); + void NSOpenGLGetVersion (GLint* major, GLint* minor); +} \ No newline at end of file