SFML & amp; OpenGL 3.3: двойная буферизация без GLUT

Я хочу написать кроссплатформенное 3D-приложение (может быть, игру, кто знает) с SFML и OpenGL 3.3 с основной целью изучения C ++.

SFML предоставляет классную модель событий, обрабатывает текстуры, тексты, вводные данные и т. Д. Я сделал простую демонстрацию с кубом (все еще в старом способе glBegin / glEnd, но я исправлю это, когда найду способ присоединить расширения OpenGL).

Первая проблема, которую я получил, — это двойная буферизация. Как вы должны знать, обычный (и логический) способ выполнения рендеринга использует два буфера: буфер отображения и буфер рендеринга. Цикл рендеринга выполняется в буфере рендеринга, и когда он заканчивается, результат копируется в буфер отображения (или, может быть, есть два одинаковых буфера, просто меняющих роли за цикл, не знаю). Это предотвращает мерцание и артефакты.

Беда в том, что в любом примере OpenGL, который я вижу, авторы используют GLUT и такие функции, как glutSwapBuffers, Если я правильно понимаю, двойная буферизация зависит от платформы (и это странно для меня, потому что я думаю, что это должно быть сделано в части OpenGL), а такие вещи, как GLUT, просто скрывают точки, специфичные для платформы. Но я уже использую SFML для контекста и инициализации OpenGL.

Есть ли кроссплатформенный способ борьбы с двойной буферизацией OpenGL в паре с SFML? Я не использую графику SFML в этом проекте, но цель — RenderWindow.

-1

Решение

SFML может обрабатывать двойную буферизацию, но если вы не используете библиотеку SFML Graphics, вы должен использовать sf::Window пример.

Двойная буферизация обрабатывается путем вызова sf::Window::setActive установить окно в качестве цели рендеринга OpenGL, нарисовать содержимое с помощью функций OpenGL, а затем вызвать sf::Window::display поменять задний буфер. Более подробную информацию можно найти в SFML API (связанная версия v2.3.2).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]