Заранее извиняюсь, если этот вопрос будет тривиальным или бессмысленным ... это одно из первых приложений, которое я разрабатываю.(К сожалению) Я не разработчик.
У меня есть NSWindow, которое содержит пользовательский вид, который является подклассом NSOpenGLView
.
, поскольку NSWindow
и NSOpenGLView
создаются через Interface Builder, мне не нужно init
, ни NSOpenGLContext
, ни NSOpenGLPixelFormat
.
Я недавно перешел на OS X Lion и теперь хочу использовать новый OpenGL 3.2.
Из документации Apple я узнал, что для включения OpenGL 3.2 мне просто нужно написать что-то вроде:
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
{
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
перед инициализацией NSOpenGLContext
.
Это довольно легко(даже для меня), но как я могу реализовать это в своем приложении, поскольку я никогда не init
NSOpenGLContext
?
Поскольку NSOpenGLView
создается из Интерфейсного Разработчика, метод -initWithFormat:shareContext:
неget call.
Поэтому я попытался переопределить метод -initWithCoder:
следующим образом:
-(id)initWithCoder:(NSCoder *)aDecoder
{
NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
{
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
[super initWithCoder:aDecoder];
[self setOpenGLContext:openGLContext];
[openGLContext makeCurrentContext];
}
, и OpenGL 3.2 правильно загружен, как сообщает glGetString(GL_VERSION)
, но созданный контекстбольше не взаимодействует с приложением ... ничего не отображается в представлении ..
Я перепробовал все, что знаю ... но я не могу решить эту проблему.
Как мне сделать вместо этого?