Рисование OpenGL оверлея при помощи перехвата SwapBuffers

Я пытаюсь сделать библиотеку которая позволила бы мне рисовать свой оверлей поверх содержимого окна игры которая использует OpenGL при помощи перехвата вызова функции SwapBuffers. Для перехвата я использую Microsoft Detours.

BOOL WINAPI __SwapBuffers(HDC hDC)
{
    HGLRC oldContext = wglGetCurrentContext();

    if (!context) // Глобальная переменная
    {
        context = wglCreateContext(hDC);
    }

    wglMakeCurrent(hDC, context);

    // Drawing

    glRectf(0.1F, 0.5F, 0.2F, 0.6F);

    wglMakeCurrent(hDC, oldContext);

    return _SwapBuffers(hDC); // Вызов оригинальной SwapBuffers
}

Этот код работает, но изредка, при движении мышью, мой оверлей мигает. Почему?

На некоторых форумах говорилось что такая реализация может заметно снизить FPS. Есть ли какая-то более хорошая альтернатива? Как правильно инициализировать контекст для моих целей? (и нужно ли это вообще если прямоугольник и так рисуется)


Ответы (0 шт):