OpenGL в Delphi

       

Типы OpenGL


Библиотека OpenGL является переносимой по отношению к платформам, операционным системам и средам программирования.
Для обеспечения этой независимости в ней, в частности, определены собственные типы. Их префикс - "GL", например, GLint.
В каждой среде программирования в заголовочных файлах эти типы переопределяются согласно собственным типам среды. Разберем, как это делается в Delphi.
Заголовочный файл Delphi opengl. pas начинается с определения знакомого нам типа HGLRC:

type
HGLRC = THandle;

Далее следует описание всех остальных типов OpenGL, например, наиболее "ходовой" тип GLfloat соответствует типу Single:

GLfloat = Single;

Поначалу многие испытывают затруднение, когда приходится использовать "неродные" для Delphi типы. По мере накопления опыта эта неловкость быстро проходит, и я рекомендую использовать с самого начала знакомства именно типы библиотеки OpenGL, даже если вы наизусть знаете их родные Для Delphi аналоги. Наверняка вам рано или поздно придется разбираться в чужих программах или переносить свои программы в другую среду программирования или даже в другую операционную систему В атмосфере бес прерывной смены технологий, в которой мы находимся все последние годы нельзя быть уверенным в том, что какая-либо операционная система (и/или среда программирования) на долгие годы станет надежным средством воплощения наших идей Вряд ли кто-то может поручиться, что его любимая операционная система проживет еще хотя бы десяток лет и не выйдет внезапно из моды, сменившись другой, о которой вы и не слышали пару месяцев назад.
Однако вернемся к типам OpenGL He все из них удается точно перевести Например, GLclampf - вещественное число в пределах от нуля до единицы - в Delphi определен просто как single Поэтому обычно в программах устанавливают "ручную" проверку на вхождение величины такого типа в требуемый диапазон
Будьте внимательны с целыми числами помимо типа GLint имеется тип GLUin - целое без знака, соответствующее типу Cardinal
В ряду типов OpenGL особо надо сказать о типе

GLboolean = BYTEBOOL,

Соответственно, определены две константы

GL_FALSE = 0, GL_TRDE = 1,

Константы эти имеют непосредственное отношение к типу GLboolean, однако их значения, как вы понимаете, не соответствуют типу BYTEBOOL Из-за ошибки в описании типа (или определении констант) не удастся использовать стандартный для OpenGL код, поэтому вместо констант GL_FALSE и GL_TRUE будем использовать False и True, соответственно
Конечно, можно самому скорректировать описание типа, например, так

GLboolean = 0 1,

После этой корректировки не придется отходить от стандарта кода графической библиотеки, но модифицировать стандартные модули Delphi нежелательно, иначе ваши проекты будут успешно компилироваться только на вашем рабочем месте
Помимо основных типов, стандартных для OpenGL и вводимых в любой среде программирования, в заголовочном файле введены также типы специфические только для Delphi, например, для наиболее часто употребляемых в OpenGL массивов введены специальные типы

TGLArrayf4 = array [0 ..3] of GLFloat,
TGLArrayf3 = array [0..2] of GLFloat,
TGLArrayf4 = array [0..3] of GLint,

Это сделано, по-видимому, для удобства кодирования и повышения читабельности кода, поскольку нигде больше в этом модуле указанные типы не встречаются
Разработчикам также пришлось ввести специальные типы для указателей, например

PGLfloat = ^GLFloat,

Такого типа нет в стандартном наборе типов OpenGL библиотека изначально создавалась на языке С, синтаксис которого хорошо приспособлен к использованию указателей, поэтому во введении особого типа для них просто не было необходимости
Вообще, должен сказать, что OpenGL наиболее приспособлен для программирования на С, поэтому некоторые моменты будут вызывать некоторые неудобства при использовании Delphi (уже упоминавшаяся система справок лишь одно звено в этой цепи) Тем не менее, это не помешает нам успешно освоить программировании на Delphi c использованием этой библиотеки
Система Delphi имеет, конечно, слабые места Чересчур большой размер откомпилированных модулей - не самое значительное из них Для графических приложений крайне важна скорость работы, и здесь пальма первенства тоже не за Delphi Если приложение интенсивно использует массивы и указатели, операции с памятью и проводит много вычислительных операций, то падение скорости при использовании Delphi вместо C/C++ оказывается значительным По некоторым тестам, лучшие компиляторы C++ создают код, работающий в два раза быстрее
Однако это не должно отпугнуть вас от дальнейшего изучения использования OpenGL в проектах Delphi, поскольку здесь как раз тот случай, когда скорость работы самого приложения не так уж и важна Основную долю работы берет на себя сервер OpenGL, a приложению достается роль транслятора команд серверу, поэтому нет особых потерь производительности, если вместо языка C++ мы используем Pascal и Delphi
Конечно, для сокращения потерь производительности желательно использовать приемы объектно-ориентированного программирования, хотя я бы не сказал, что эти приемы во всех случаях приведут к заметному на глаз ускорению работы приложения
Delphi имеет свои неоспоримые достоинства - прежде всего это несравнимая ни с каким другим средством скорость разработки и компиляции Именно поэтому, а также из-за "скрытого обаяния" Delphi (вы понимаете, о чем я говорю) мы и выбрали эту замечательную систему в качестве основы Для изучения OpenGL



Содержание раздела