OpenGL в Delphi



         

Рисунок 1. 1. Поумолчанию режим





Замечание
Кадр, содержимое которого мы непосредственно видим на экране, называется передним буфером кадра, вспомогательный раздел памяти, в котором подготавливается изображение, называется задним буфером кадра

Константу PFD_GENERIC_ACCELERATED имеет смысл устанавливать только в случае, если компьютер оснащен графическим акселератором.
Флаги, заканчивающиеся на "DONTCARE", сообщают системе, что соответствующий режим может иметь оба значения, например, при установке флага PFD_DouBLE_BUFFER_DONTCARE запрашиваемый формат пиксела допускает оба режима - как одинарной, так и двойной буферизации.
Со всеми остальными полями и константами я предоставляю вам возможность разобраться самостоятельно. Отмечу, что поле iLayerType, описанное в windows. pas как имеющее тип Byte, может, согласно справке, иметь три значения: PFD_MAIN_PLANE, PFD_OVERLAY__PLANE И PFD_UNDERLAY_PLANE, однако константа PFD_UNDERLAY_PLANE имеет значение -1, так что установить такое значение для величины типа Byte не удастся.
OpenGL позволяет узнать, какой же формат пиксела он собирается использовать. Для этого необходимо использовать функцию DescribePixelFormat, заполняющую величину типа TPixelFormatDescriptor установленным форматом пиксела.
Построим несложное приложение на основе использования этой функции, которое позволит детальнее разобраться с форматом пиксела и подобрать формат для конкретного рабочего места (проект из подкаталога Ex22).
примере битовым флагам задаем все возможные значения одновременно, числовым полям задаем заведомо нереальное значение 64, и смотрим на выбор формата пиксела, сделанный OpenGL. Результат, который вы получите для выбранного OpenGL формата пиксела, я предсказать не могу: он индивидуален для каждой конкретной конфигурации компьютера и текущих настроек. Скорее всего окажется, что режим двойной буферизации не будет установлен. (Напоминаю: многие флаги устанавливаются только в определенных комбинациях с другими.)Наше приложение позволяет менять параметры формата пиксела и устанавливать его заново, а чтобы видеть воспроизведение, небольшая площадка на экране при каждом тестировании окрашивается случайным цветом, используя функции OpenGL. Поэкспериментируйте с этим приложением, например, определите комбинацию флагов для установления режима двойной буферизации. Посмотрите значение числовых полей формата при различной палитре экрана: 16 бит, 24 бита, 32 бита, если у вас есть такой режим, но не в палитре с 256 цветами. О выводе OpenGL при палитре экрана в 256 цветов у нас будет отдельный разговор.
Это приложение, в частности, дает ответ на вопрос, как определить, оснащен ли компьютер графическим акселератором. Сделать это можно после вызова функции DescribePixelFormat следующим образом:

var
i, j: Integer;
i: = pfd. dwFlags and PFD_GENERIC_ACCELERATED; ]: = pfd.
dwFlags and PFD_GENERIC__FORMAT;
If (i = 0) and (з = 0)
then // полноценным ICD-драйвер с функциями ускорения
else If (i = 1) and (j = 1)
then // MCD-драйвер, аппаратно реализуется
// только часть функций ускорения
else // режим программной эмуляции, всю работу выполняет центральный
// процессор

В следующей главе мы узнаем еще один способ определения наличия акселератора.
С помощью рассмотренного проекта вы найдете ответ на вопрос, на который я вам ответить не смогу, а именно - как заполнить структуру TPixelFormatDescriptor для вашего компьютера.




Содержание  Назад  Вперед