Dit stamt van Apple's CocoaGL af, al zie je het alleen maar een beetje in de source. De NSWindow is niet meer textured en maar 128*128. Er zijn een aantal dingen die beter kunnen, maar dit was sneller om te maken, en 't is maar een testje dat ik speciaal hiervoor kleiner heb gemaakt.
#import <Cocoa/Cocoa.h>@interface MyOpenGLView : NSOpenGLView
{
BOOL inited;
}
- (void)reshape:(NSRect)frame;
@end
#include <OpenGL/gl.h>#import "MyOpenGLView.h"
@implementation MyOpenGLView
- (id)initWithFrame:(NSRect)frame
{
GLuint attribs[] =
{
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 32,
0
}; // de rest maakt me nu niet uit
NSOpenGLPixelFormat *fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:(NSOpenGLPixelFormatAttribute*)attribs];
if(!fmt) NSLog(@"No pixel format");
return self = [super initWithFrame:frame pixelFormat:[fmt autorelease]];
}
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(windowDidResize:) name:NSWindowDidResizeNotification object:[self window]];
[[self window] setContentView:self];
[[self window] setContentAspectRatio:NSMakeSize(1, 1)];
[[self window] setMinSize:NSMakeSize(0, 0)];
}
- (void)reshape:(NSRect)frame
{
glViewport(0, 0, frame.size.width, frame.size.height);
glPointSize(frame.size.width); // boven 84 ziet ie er bij mij niet meer goed uit
}
- (void)drawRect:(NSRect)rect
{
if(!inited) { // om het bij de andere gl*() te houden.
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_POINT_SMOOTH);
glColor3f(1, 1, 1);
[self reshape:rect];
inited = YES;
}
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex2f(0, 0);
glEnd();
[[self openGLContext] flushBuffer];
}
- (void)windowDidResize:(NSNotification *)aNotification
{
[self reshape:[self bounds]];
}
@end
Compile en draai 'm. Trek 'm over je scherm als je problemen wilt.
@OpenGL Driver Monitor: dat ik daar zelf niet aan dacht! VRAM gaat veeeeeeeeeeeeeeeeeeel te ver (maar dan nog verder).