好吧,這有點棘手。我正在檢測應用何時進入全屏模式(捕獲顯示器),然後我需要偶爾繪製一些東西到捕獲的顯示上下文中以用於通知目的(比如Growl通知,但也必須以全屏模式工作)。繪製成全屏GL背景
是否有任何方法來修改其他應用程序的GL/CG上下文(例如Windows上的Fraps確實將FPS計數器注入到OGL應用程序中)?不幸的是,屏幕窗口疊加方法在捕獲顯示時不起作用。有任何想法嗎?
好吧,這有點棘手。我正在檢測應用何時進入全屏模式(捕獲顯示器),然後我需要偶爾繪製一些東西到捕獲的顯示上下文中以用於通知目的(比如Growl通知,但也必須以全屏模式工作)。繪製成全屏GL背景
是否有任何方法來修改其他應用程序的GL/CG上下文(例如Windows上的Fraps確實將FPS計數器注入到OGL應用程序中)?不幸的是,屏幕窗口疊加方法在捕獲顯示時不起作用。有任何想法嗎?
實際上,您可以用簡單的OpenGL和Quartz顯示服務繪製屏幕。有一些缺點讓我不知道如何解決。
的CGLSetFullScreen
已被棄用,CGLSetFullScreenOnDisplay
不會捕捉顯示器工作。
繪圖閃爍因爲其他的GL上下文與這一個
干擾。
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);
GLFullscreen示例應用程序顯示了創建全屏窗口(和上下文)的舊方法和10.6+方法。新的方式只是一個屏幕大小的窗口,大多數其他的東西,而舊的方式是一種特殊的全屏模式,不會讓其他任何東西在CGL上面繪製。所以如果應用程序使用新的簡化機制,它可能會有所作爲。我猜你不能用舊的方式,但可以用新的方式。
是的,但這不是問題。問題是我如何修改其他應用程序捕獲的屏幕內容。 – 2010-09-03 20:07:56
我知道,我想說這可能取決於OTHER應用程序創建全屏幕上下文的方式。 – mk12 2010-09-03 20:46:14
我嘗試了不推薦使用的'CGLSetFullScreen',它似乎能夠工作(CGLSetFullScreenOnDisplay沒有),即使屏幕已經被捕獲了,所以我可能會在頂部渲染一些東西。但我真的不想使用棄用的函數:(我會嘗試讓它與AGL調用一起工作(http://developer.apple.com/mac/library/documentation/GraphicsImaging/Reference/AGL_OpenGL/) Reference/reference.html) – 2010-09-03 22:26:17