Рисовать в полноэкранном режиме GL - PullRequest
3 голосов
/ 03 сентября 2010

Хорошо, это немного сложно.Я обнаруживаю, когда приложение переходит в полноэкранный режим (захват изображения), а затем мне нужно время от времени рисовать некоторые элементы в контексте захваченного дисплея для целей уведомления (например, уведомления Growl, но также должно работать в полноэкранном режиме).

Есть ли способ изменить контекст GL / CG других приложений (например, Fraps в Windows вводит счетчик FPS в приложения OGL)?К сожалению, метод наложения экранирующего окна не работает при захвате изображения.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 22 марта 2011

Вы можете рисовать поверх экрана с помощью обычного 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);
0 голосов
/ 03 сентября 2010

Пример приложения GLFullscreen показывает старый способ и способ 10.6+ создания полноэкранных окон (и контекстов).Новый способ - это просто окно размером с экран над большинством других вещей, в то время как старый способ - это специальный полноэкранный режим, который не позволяет ничему больше рисовать над ним, с CGL.Так что, если приложение использует новый, упрощенный механизм, это может иметь значение.Я предполагаю, что вы не можете по-старому, но, возможно, сможете по-новому.

...