Поделиться через


Рисование с помощью двойных буферов

Двойные буферы сглаживают переход между одним изображением и другим на экране. Буферы переключения обычно выполняются в конце последовательности команд рисования. По умолчанию реализация OpenGL от Майкрософт в Windows рисуется в буфере за кадром; После завершения рисования вызывается функция SwapBuffers для копирования буфера за кадром в экранный буфер. В следующем примере кода выполняется подготовка к рисованию, вызывается функция рисования, а затем копируется готовое изображение на экран, если доступна двойная буферизация.

void myRedraw(void) 
{ 
    // set up for drawing commands  
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(45, 1.0, 0.1, 100.0); 
 
    // draw our objects  
    myDrawAllObjects(GL_FALSE); 
 
    // if we're double-buffering ...  
    if (bDoubleBuffering)  
 
        // ...draw the copied image to the screen  
        SwapBuffers(hdc); 
}

Следующий пример кода получает контекст устройства окна, отрисовывает сцену, копирует изображение на экран (для отображения отрисовки), а затем освобождает контекст устройства.

hdc = GetDC(hwnd); 
mySceneRenderingFunction(); 
SwapBuffers(hdc); 
ReleaseDC(hWnd, hdc);