2010-06-11 3 views
10

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

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

+0

Просто идея: Не могли бы вы установить видовой экран на половину экрана? –

+1

@chris_l: окно просмотра не влияет на Clear. – Bahbar

ответ

10

Вы можете посмотреть в glScissor. Из документации:

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

+4

и, в частности, из документации Clear: [...], scissor test, [...] влияют на работу glClear. +1. – Bahbar

0

Нарисуйте гигантский квадратик :) Примените это только к половине экрана.

http://www.opengl.org/resources/faq/technical/transformations.htm#tran0090

+1

is not рисовать quad слишком медленно для этого? – Newbie

+0

@Newbie Получил измерения, чтобы показать, что ножница очищается быстрее, чем квадроцикл? Я ожидаю, что ничья будет основным оптимизированным путем. Я бы ожидал, что ножница будет полезна в крайнем случае на гипотетической земле. Я не говорю, что ничья тоже быстрее, кстати. – doug65536

1

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

OpenTK пример:

GL.Enable (EnableCap.ScissorTest); 
GL.Scissor (ViewportX, ViewportY, ViewportWidth, ViewportHeight); 
GL.Clear (ClearBufferMask.ColorBufferBit); 
GL.Disable (EnableCap.ScissorTest); 
Смежные вопросы