Если вы используете glScissor()
, вы просто определяете прямоугольник отсечения (т. Е. Где рисовать).Это может быть все, что вам нужно.С glViewport()
вы, по сути, вызываете glScissor()
за кадром, а также меняете способ отображения координат в пространстве экрана.
Если вы хотите ограничить рисование одной из панелей (без использования локальных координат), используйтеglScissor()
.В противном случае используйте glViewport()
.
. Что касается панели, я бы, вероятно, использовал некоторый абстрактный базовый класс:
class Panel {
// ...
virtual void OnDraw(void) = 0;
void Draw(void) {
glViewport(x, y, w, h);
OnDraw();
glViewport(0, 0, parent_w, parent_h);
}
}