OpenGL: Как очистить только часть экрана?

Можно ли очистить весь экран при использовании функции glClear()? Мне нужно очистить только часть экрана, чтобы сохранить некоторое время рендеринга, иначе мне придется перерисовать половину экрана в каждом кадре, даже если ничего не происходит на другой половине.

Конечно, это должно быть сделано как можно быстрее (или быстрее), так как теперь glClear().

Ответ 1

Возможно, вам стоит взглянуть на glScissor. Из документации:

В то время как тест ножницы разрешен, только пиксели, которые лежат в ножнице, могут быть изменены с помощью команд рисования.

Ответ 2

Чтобы очистить только конкретную прямоугольную область, включите ScissorTest и вызовите Clear. После включения на экран будут задействованы только пиксели в области scissor, поэтому отключите ScissorTest, когда вам нужно снова изменить внешнюю область.

Пример OpenTK:

GL.Enable (EnableCap.ScissorTest);
GL.Scissor (ViewportX, ViewportY, ViewportWidth, ViewportHeight);
GL.Clear (ClearBufferMask.ColorBufferBit);
GL.Disable (EnableCap.ScissorTest);