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

Posted

技术标签:

【中文标题】在 Mac OS X 上使用 CGL 设置 OpenGL 上下文【英文标题】:Setting up an OpenGL context with CGL on Mac OS X 【发布时间】:2012-07-08 13:27:00 【问题描述】:

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

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

【问题讨论】:

什么不起作用?你有任何错误吗?控制台输出呢? 没有错误,它只是运行并退出而不做任何事情,它应该提供一个带有白色方块的全屏上下文。我在 glFlush() 之后尝试了睡眠,它只是在那里等待并退出。 你有这个应用的窗口吗?我不明白你在描述什么。你是在画一个 NSOpenGLView 还是别的什么? 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于在 Mac OS X 上使用 CGL 设置 OpenGL 上下文的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mac OS X 上设置 libusb?

ini 在Mac OS X上设置dnsmasq

sh 使用brew 0.9.5在Mac OS X 10.10.1上安装和设置bind(named)

sh 使用brew 0.9.5在Mac OS X 10.10.1上安装和设置bind(named)

以编程方式在 Mac OS X 上创建 PPTP ***

设置 MySQL 和 Oracle 数据库 Mac OS X