OpenGL - предотвращение двойных буферов

Я использую Дао (C#). Могу ли я предотвратить OpenGL от использования буфера для рисования?

Я нахожусь в сценарии, который я использую simpleOpenGlControl и нужно помешать ему использовать другой буфер.

1 ответ

Интересно, что наличие / применение двойного буфера там или нет не для выбора OpenGL, а для системы управления окнами. Двойной буфер запрашивается путем указания бита "Я хочу двойной буфер" в формате пикселей / визуале окна (не в контексте OpenGL).

Однако система управления окнами вполне может выбрать двойной буфер, даже если вы его не просили. Вот почему так важно проверить, какой пиксельный формат / визуал вы на самом деле получили, и если он имеет двойной буфер, ваша программа должна действовать соответственно.

При этом сам OpenGL знает, как работать с окнами с двойной буферизацией (имейте в виду, что реальная функция замены буфера - это не функция OpenGL, а функция оконной системы).

Вы можете явно нарисовать передний буфер, выбрав его в качестве пункта назначения при glDrawBuffer(GL_FRONT), Однако современные оконные системы обычно составляются, что означает, что "передний" буфер вашей программы на самом деле является просто еще одним внеэкранным буфером для оконной системы, который представляется в целом на этапе представления.... что в конечном итоге означает, что все это ведет себя так, как будто вы нарисовали все это с двойной буферизацией.

Обычно нет никаких оснований рисовать сингл с буферизацией. "Визуальный" эффект заключается в том, что - в зависимости от того, в какой реализации вы находитесь - вы сможете увидеть, как продвигается процесс рисования. Но это не дано. Для реализации OpenGL совершенно правильно ставить в очередь все операции рисования и выполнять их между обновлениями экрана, что опять-таки выглядит как двойная буферизация.

Другие вопросы по тегам