Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 进入全屏GL上下文_Cocoa_Opengl_Core Graphics_Fullscreen - Fatal编程技术网

Cocoa 进入全屏GL上下文

Cocoa 进入全屏GL上下文,cocoa,opengl,core-graphics,fullscreen,Cocoa,Opengl,Core Graphics,Fullscreen,好吧,这有点棘手。我检测应用程序何时进入全屏模式(捕获显示),然后我需要偶尔在捕获的显示上下文中绘制一些内容以用于通知目的(例如咆哮通知,但也必须在全屏模式下工作) 是否有任何方法可以修改其他应用程序的GL/CG上下文(例如Windows上的FRAP会将FPS计数器注入OGL应用程序)?不幸的是,屏蔽窗口覆盖方法在捕获显示时不起作用。有什么想法吗?示例应用程序展示了创建全屏窗口(和上下文)的旧方法和10.6+方法。新的方式只是一个屏幕大小的窗口,而旧的方式是一个特殊的全屏模式,不让任何其他东西超

好吧,这有点棘手。我检测应用程序何时进入全屏模式(捕获显示),然后我需要偶尔在捕获的显示上下文中绘制一些内容以用于通知目的(例如咆哮通知,但也必须在全屏模式下工作)


是否有任何方法可以修改其他应用程序的GL/CG上下文(例如Windows上的FRAP会将FPS计数器注入OGL应用程序)?不幸的是,屏蔽窗口覆盖方法在捕获显示时不起作用。有什么想法吗?

示例应用程序展示了创建全屏窗口(和上下文)的旧方法和10.6+方法。新的方式只是一个屏幕大小的窗口,而旧的方式是一个特殊的全屏模式,不让任何其他东西超过它,与CGL。因此,如果应用程序使用新的、简化的机制,可能会有所不同。我猜你不能用旧的方式,但也许可以用新的方式。

事实上,你可以用普通OpenGL和石英显示服务在屏幕上画图。有些缺点我不知道如何克服

  • CGLSetFullScreen
    已被弃用,并且
    CGLSetFullScreenOnDisplay
    无法处理捕获的显示

  • 图形会闪烁,因为另一个GL上下文会干扰此GL上下文


是的,但这不是问题所在。问题是我如何修改另一个应用程序捕获的屏幕内容。我知道,我是说这可能取决于其他应用程序创建其全屏上下文的方式。我尝试了不推荐的
CGLSetFullScreen
,它似乎可以工作(CGLSetFullScreenOnDisplay无法工作)即使屏幕已经被捕获,我也可以在上面渲染一些东西。但我真的不想使用一个不推荐使用的函数:(。我会尝试让它与AGL调用()一起工作。你不是说NSGL吗?AGL是用于碳的。
CGOpenGLDisplayMask displayMask = CGDisplayIDToOpenGLDisplayMask(displayId);
CGLPixelFormatAttribute attribs[] = {
    kCGLPFAFullScreen,
    kCGLPFADisplayMask,
    displayMask,
    0
};

// Create gl context
GLint numPixelFormats;
CGLPixelFormatObj pixelFormatObj;
CGLChoosePixelFormat(attribs, &pixelFormatObj, &numPixelFormats);

CGLCreateContext(pixelFormatObj, NULL, &glContext);

CGLDestroyPixelFormat(pixelFormatObj);
CGLSetCurrentContext(glContext);
CGLSetFullScreen(glContext);

do {
    glLoadIdentity();

    glBegin(GL_TRIANGLES);

    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex3f(0.0f, 1.0f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex3f(-1.0f, -1.0f, 0.0f);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex3f(1.0f, -1.0f, 0.0f);

    glEnd();
    glFlush();

} while (!invalid);