1

我正在尝试在 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);

但这不起作用,我在这里遗漏了什么吗?

4

2 回答 2

1

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

使用 OpenGL 创建用户界面元素是不可能的,因为 OpenGL 不是用户界面库。当您说“不使用 GLUT 或任何类似的东西”时,您是在说您不想创建 OpenGL 上下文可以渲染到的可见表面。

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

于 2012-07-09T08:30:38.303 回答
0

看来您必须使用CGLSetFullScreenOnDisplay()“打开窗口”。

于 2017-03-02T09:51:09.920 回答