OpenGL 3.2 с NSOpenGLView
Как бы я создал основной профиль в пользовательской реализации NSOpenGLView? Какой метод я должен переопределить и какой код я должен поместить туда?
Пока у меня есть этот код:
// Header File
#import <Cocoa/Cocoa.h>
@interface TCUOpenGLView : NSOpenGLView
@end
// Source File
#import "TCUOpenGLView.h"
#import <OpenGL/gl.h>
@implementation TCUOpenGLView
- (void)drawRect:(NSRect)dirtyRect {
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
@end
1 ответ
Решение
У Apple есть проект примера кода под названием GLEssentials, который показывает, как именно это сделать (обратите внимание, что это проект примера кода Mac OS X и iOS).
По сути, вам нужно будет создать подкласс NSOpenGLView (класс NSGLView в примере кода) и реализовать метод awakeFromNib, используя следующее:
- (void) awakeFromNib
{
NSOpenGLPixelFormatAttribute attrs[] =
{
NSOpenGLPFADoubleBuffer,
NSOpenGLPFADepthSize, 24,
// Must specify the 3.2 Core Profile to use OpenGL 3.2
NSOpenGLPFAOpenGLProfile,
NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat *pf = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];
if (!pf)
{
NSLog(@"No OpenGL pixel format");
}
NSOpenGLContext* context = [[[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil] autorelease];
[self setPixelFormat:pf];
[self setOpenGLContext:context];
}
Также помните, что если вы используете какие-либо вызовы API OpenGL, которые были удалены из API 3.2, ваше приложение завершится сбоем. Вот PDF-документ спецификации 3.2, так что вы можете увидеть изменения.