Рисование 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. Есть ли какая-то более хорошая альтернатива? Как правильно инициализировать контекст для моих целей? (и нужно ли это вообще если прямоугольник и так рисуется)