Я решил, что лучший способ сделать это - использовать буфер кадров. Обработка OnEraseBackground () помогла с мерцанием, но MFC по-прежнему просто не хочет хорошо играть с OpenGL, поэтому мне пришлось пойти с решением GDI.
Каждый видовой экран сначала рисуется в свой собственный буфер кадров, а затем перетаскивается в соответствующее окно.
void FrameBuffer::Blit(HDC hDC, int width, int height)
{
glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, blitBuffer);
SetDIBitsToDevice(hDC, 0, 0, width, height, 0, 0, 0, height, blitBuffer, &blitInfo, DIB_RGB_COLORS);
}
Похоже, что это решение не оказывает заметного влияния на производительность.