view 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 source

/**
 * 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);
}