我无法让NSOpenGLContext正常工作。 我有一个静态对象(3D引擎),可以处理所有opengl的东西,资源,vbos等。
对于cocoa版本,我创建了一个NSOpenGLContext,如下所示:
- (BOOL) CreateContext
{
[NSOpenGLContext clearCurrentContext];
NSOpenGLPixelFormatAttribute attributes [] =
{
NSOpenGLPFAWindow,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated, // If present, this attribute indicates that only hardware-accelerated renderers are considered.
NSOpenGLPFAPixelBuffer, // If present, this attribute indicates that rendering to a pixel buffer is enabled.
NSOpenGLPFAColorSize, 32,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
(NSOpenGLPixelFormatAttribute)nil
};
NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
NSOpenGLContext* pContext = [[NSOpenGLContext alloc] initWithFormat: pixelFormat shareContext:nil];
if (pContext)
{
[pContext makeCurrentContext];
m_pOGLContext = pContext;
// Vertical Sync
GLint vblSynch = 0; // disable vsync
[pContext setValues:&vblSynch forParameter:NSOpenGLCPSwapInterval];
glFrontFace(GL_CW);
// Set the clear Color
glClearColor(0, 0, 0, 0);
[pixelFormat release];
return true;
}
[pixelFormat release];
return false;
}
引擎初始化后,我创建了一个NSView。 在NSView创建之后,在prepareOpenGL函数中,我只是将NSOpenGLContext成员设置为引擎的当前NSOpenGLContext:
- (void) prepareOpenGL
{
m_pOGLContext = [NSOpenGLContext currentContext];
return;
}
然后,在NSView的函数lockFocus中,我为上下文设置了视图:
- (void)lockFocus
{
[super lockFocus];
if ([m_pOGLContext view] != self)
{
[m_pOGLContext setView:self];
}
[m_pOGLContext makeCurrentContext];
}
现在,在绘制时我无法获取要绘制的资源,我只是有很多缓冲工件。
我尝试使用共享选项为NSView创建第二个Context,但我的结果相同。
答案 0 :(得分:0)
不确定,我也是初学者,但我认为格式错误,应该是:
NSOpenGLPixelFormatAttribute attributes [] =
{
NSOpenGLPFAWindow,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated, // If present, this attribute indicates that only hardware-accelerated renderers are considered.
NSOpenGLPFAPixelBuffer, // If present, this attribute indicates that rendering to a pixel buffer is enabled.
NSOpenGLPFAColorSize,
NSOpenGLPFADepthSize,
NSOpenGLPFAStencilSize,
32,24,8,
(NSOpenGLPixelFormatAttribute)nil
};