Таблица 2.1. Суффиксы команд и типы данных аргументов

Суффикс

Тип данных

Обычный тип С или C++

Название типа в OpenGL

b

8-битное целое (символ со знаком)

signed char Glbyte
s

16-битное целое (короткое целое)

short Glshort
I

32-битное целое (длинное целое)

int или long

GLint, GLsizei
f

32-битное вещественное (с плавающей точкой)

float GLfloat, GLcIampf
d

64-битное вещественное (двойной точности)

double GLdouble, GLcIampd
ub

8-битное число без знака (символ без знака)

unsigned char DLubyte, GLboolean
us

16-битное число без знака (короткое целое без знака)

unsigned short GLushort
ui

32-битное число без знака (целое без знака или длинное целое без знака)

unsigned int или unsigned long

GLuint, GLenum, GLbitfield

Пусть, к примеру, функция с суффиксом i «ожидает» 32-битное целое, а ваша система может передать int как 16-битное целое. Тогда если бы вы захотели инкапсулировать команды OpenGL для рисования точки в базовую функцию вроде drawDotO, то было бы соблазнительно использовать такой код:

void drawDotdnt х. int у)

<- danger: passes ints

<- опасность: передает целые (int)

{
// draw dot at integer point(x.y)

// рисуем точку с целыми координатами (х.у)

glBegin(GL_POINTS): glVertex2i(x.y):
gl EndO :
}

Этот код передает ints в функцию glVertex2i(). Это сработает в системах, использующих 32-битный тип ints, однако в тех системах, где ints - 16-битный, могут возникнуть проблемы. Надежнее писать

Начальная стадия: рисование фигур

функцию drawingDotO1 так, как приведено в листинге 2.3, а также использовать в своих программах тип GLints. Когда вы перекомпилируете свои программы в новой системе, типы GLint, GLfloat и т. д. будут связываться с соответствующими типами С++ (в заголовочном файле GL.h OpenGL - см. приложение А) для этой системы, и эти типы будут использоваться постоянно во всей программе.

Листинг 2.3. Подробности инкапсуляции OpenGL в базовой функции drawDotO void drawDotCGLint х. GLint у): {

// draw dot at integer point (x. y)

// рисуем точку с целыми координатами (х. у)

glBegin(GL_POINTS); g1Vertext2i(x, у):


⇐ Предыдущая| |Следующая ⇒