Вы можете рисовать поверх экрана с помощью обычного OpenGL и Quartz Display Services.Есть некоторые недостатки, которые я не знаю, как обойти.
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);