Хотя мы будем разрабатывать большинство наших графических средств на базе возможностей OpenGL, мы тем не менее «приоткроем завесу» и посмотрим, как работают классические графические алгоритмы. Важно понять, как реализовывать такие программные средства, даже если вы используете в большинстве своих приложений уже готовые версии OpenGL. При особых обстоятельствах вам может потребоваться для какой-либо задачи альтернативный алгоритм, или вы можете встретить новую задачу, которую OpenGL не умеет решать. Кроме того, вам может понадобиться разработать графическое приложение, вовсе не использующее OpenGL.
2.1.2. Оконное программирование Как уже упоминалось, многие современные графические системы являются оконными (windows based) и показывают на экране несколько перекрывающихся окон одновременно. Пользователь с помощью мыши может перемещать окна по экрану, а также изменять их размер. При работе с OpenGL мы будем рисовать в одном из таких окон, как мы уже видели на рис. 2.1, в.
Программирование управляемости событиями Другим свойством, которым обладает большая часть оконных программ, является их управляемость событиями (event driven). Это означает, что программы реагируют на различные события, такие как щелчок мышью, нажатие на клавишу клавиатуры или изменение размеров окна на экране. Система автоматически устанавливает очередь событий (event queue), которая получает сообщения о том, что произошло некоторое событие, и обслуживает их по принципу «первым пришел - первым обслужен». Программист организует свою программу как набор функций обратного вызова (callback functions), которые выполняются, когда происходят события. Функция обратного вызова создается для каждого типа событий, которые могут произойти. Когда система удаляет событие из очереди, оно просто выполняет функцию обратного вызова, связанную с данным типом событий. Тем программистам, которые привыкли делать программы по принципу «сделай то, затем сделай это…», потребуется некоторое переосмысление. Новая структура программ может быть передана словами «не делай ничего, пока не произойдет какое-нибудь событие, а затем сделай определенную вещь».