Синтаксис команд OpenGL
Обычно команды OpenGL реализуются в виде процедур или функций. Их имена начинаются с префикса gl, затем следует название команды, в котором каждое слово начинается с большой буквы. Это особенно важно для языков, учитывающих регистр букв в тексте программы, например для Java. После названия может присутствовать суффикс, определяющий количество и тип параметров. Так команда, определяющая вершину, может иметь несколько реализаций. Например:
glVertex2f – задает вершину на плоскости, имеет два параметра каждый из которых представляет собой 32-разрядное число с плавающей точкой;
glVertex3i – задает вершину в пространстве, имеет три параметра каждый из которых представляет собой 32-разрядное целое число.
В общем виде интерфейс команды можно определить следующим образом:
glCommandName[1 2 3 4][b s i f d ub us ui][v](список параметров), где
CommandName – имя команды;
[1 2 3 4] – допустимые значения числа аргументов команды;
[b s i f d ub us ui] – допустимые типы аргументов:
Символ |
Тип OpenGL |
Описание |
b |
GLbyte |
8 разрядов, целое |
s |
GLshort |
16 разрядов, целое |
i |
GLint,GLsizei |
32 разряда, целое |
f |
GLfloat |
32 разряда, плавающая точка |
d |
GLdouble,GLclampd |
64 разряда, плавающая точка |
ub |
GLubyte,GLboolean |
8 разрядов, беззнаковое целое |
us |
GLushort |
16 разрядов, беззнаковое целое |
ui |
GLuint,LGenum |
32 разряда, беззнаковое целое |
Появление в суффиксе символа v означает, что в качестве аргумента используется указатель на массив. Количество и тип элементов массива определяется другими символами суффикса.
При написании программ можно использовать соответствующие типы данных используемого языка программирования, но лучше этого не делать. Используя только типы данных, объявленные в OpenGL, вы обеспечиваете переносимость кода между различными реализациями библиотеки и избегаете ряда ошибок, вызванных неправильно установленным соответствием типов.
Конкретные реализации библиотек могут отклоняться от приведенной схемы использования суффиксов. Некоторые языки программирования поддерживают перегрузку процедур (overload), родовые функции (generic function) или иной механизм, позволяющий создавать несколько реализаций одной процедуры, различающихся типом и количеством параметров. В реализации библиотек для этих языков суффиксы могут быть опущены.
Если команды принадлежат библиотекам, расширяющим возможности OpenGL, то они имеют префиксы, отражающие название библиотеки. Например, команды, начинающиеся с префикса glu или glut, находятся, соответственно, в библиотеках GLU или GLUT. Мы будем использовать команды из этих библиотек для сокращения объема вспомогательного кода в примерах.
Константы в OpenGL начинаются с префикса GL и пишутся заглавными буквами. Но, в отличие от команд, слова в имени константы разделяются символами подчеркивания. Префикс также отделяется от имени. Примерами могут служить константы GL_LINE_STRIP и GL_COLOR_BUFFER_BIT.