在 Mac OS X 上使用 CGL 设置 OpenGL 上下文



我正在尝试在Mac OS X上设置OpenGL上下文,而无需使用GLUT或类似的东西。这就是我目前所拥有的。

CGLPixelFormatAttribute pixelFormatAttributes[] = {
    kCGLPFAOpenGLProfile, (CGLPixelFormatAttribute) kCGLOGLPVersion_3_2_Core,
    kCGLPFAColorSize, (CGLPixelFormatAttribute) 24,
    kCGLPFAAlphaSize, (CGLPixelFormatAttribute) 8,
    kCGLPFAAccelerated,
    kCGLPFAFullScreen,
    kCGLPFADoubleBuffer,
    kCGLPFASampleBuffers, (CGLPixelFormatAttribute) 1,
    kCGLPFASamples, (CGLPixelFormatAttribute) 4,
    (CGLPixelFormatAttribute) 0,
};
CGLPixelFormatObj pixelFormat;
GLint numberOfPixels;
CGLChoosePixelFormat(pixelFormatAttributes, &pixelFormat, &numberOfPixels);
CGLContextObj contextObject;
CGLCreateContext(pixelFormat, 0, &contextObject);
CGLDestroyPixelFormat(pixelFormat);
CGLSetCurrentContext(contextObject);

// OpenGL stuff here
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_POLYGON);
    glVertex3f(0.25f, 0.25f, 0.0f);
    glVertex3f(0.75f, 0.25f, 0.0f);
    glVertex3f(0.75f, 0.75f, 0.0f);
    glVertex3f(0.25f, 0.75f, 0.0f);
glEnd();
glFlush();
CGLSetCurrentContext(NULL);
CGLDestroyContext(contextObject);

但这行不通,我在这里错过了什么吗?

你正在做你所描述的 - 你创建了一个OpenGL上下文。您可能对OpenGL上下文的理解是错误的。它只是一个包含 OpenGL 实例的抽象实体。它不是用户直接可见的任何内容,例如包含 OpenGL 图面的窗口。

使用 OpenGL

无法创建用户界面元素,因为 OpenGL 不是用户界面库。当你说"不使用GLUT或类似的东西"时,你是在说你不想创建一个OpenGL上下文可以渲染的可见表面。

要实际创建一个窗口 - 无论是普通窗口还是全屏窗口 - 您需要使用像GLUT或GLFW这样的用户界面库。由于您似乎正在构建一个仅限OSX的应用程序,因此您可能希望使用AppKit/Cocoa,除非您对ObjC不满意。

看来你必须使用CGLSetFullScreenOnDisplay()来"打开窗口"。

最新更新