-1

当我将 NSOpenGLProfileVersion3_2Core 添加到属性 pixelformat 变量时为零,但是当我删除它时,像素格式被分配。我不明白是什么问题:(

GLuint attributes[] = {
        NSOpenGLProfileVersionLegacy,
        NSOpenGLProfileVersion3_2Core,
        NSOpenGLPFAWindow,
        NSOpenGLPFAColorSize, 24,
        NSOpenGLPFAAlphaSize, 8,
        NSOpenGLPFAAccelerated,
        NSOpenGLPFADoubleBuffer,
        0
    };
    _pixelformat = [[NSOpenGLPixelFormat alloc]
                    initWithAttributes:
                    (NSOpenGLPixelFormatAttribute *) attributes];
    if (_pixelformat == nil){
        NSLog(@"No valid OpenGL pixel format");
        exit(0);
    }
    NSLog(@"Have a valid pixel format");

结果是“没有有效的 OpenGL 像素格式”。

4

3 回答 3

2

genpfault 有正确的想法,但这些属性都不是单独有效的。也就是说,它们不是布尔属性/标志。

您需要将常量与适当的属性名称匹配。

替换此代码:

GLuint attributes[] = {
  NSOpenGLProfileVersionLegacy,
  NSOpenGLProfileVersion3_2Core,
  [...]

有了这个:

NSOpenGLPixelFormatAttribute attributes[] = {
  NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute)NSOpenGLProfileVersion3_2Core,
  [...]

我还冒昧地更正了您对 typedef 的使用。NSOpenGLPixelFormatAttribute定义为uint32_t,而 OpenGL 要求是至少32 位宽GLuint的无符号整数类型。OpenGL 不禁止将来使用类似的东西来实现。GLuintuint64_t

尽可能使用正确的 API 定义的 typedef。

于 2013-11-13T01:20:52.803 回答
1

解决了。需要删除 NSOpenGLPFAWindow 属性。

于 2013-11-24T19:32:08.240 回答
0
    NSOpenGLProfileVersionLegacy,
    NSOpenGLProfileVersion3_2Core,

一个。你不能同时拥有一个既是核心又是非核心的上下文。

于 2013-11-12T16:29:07.400 回答