OpenGL bağlı bulunduğu donanım, platform ve kullanılacak programlama dilinin kendine özgü farklılıkları olabileceğinden, grafik işlemleri için kendi içinde tanımladığı veri tipleri mevcuttur. Kullanıcı açısından, platformlar arasında taşınabilirliği korumaya çalışmış.
// "gl.h" OpenGL başlık dosyasıEğer tanımın yapıldığı "gl.h" dosyasına göz atmış iseniz, C++ dilinde alışık olduğumuz veri tiplerinin, yeniden tanımlandığı görülmektedir.
/*
*
* Datatypes
*
*/
#ifdef CENTERLINE_CLPP
#define signed
#endif
typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef void GLvoid;
typedef signed char GLbyte; /* 1-byte signed */
typedef short GLshort; /* 2-byte signed */
typedef int GLint; /* 4-byte signed */
typedef unsigned char GLubyte; /* 1-byte unsigned */
typedef unsigned short GLushort; /* 2-byte unsigned */
typedef unsigned int GLuint; /* 4-byte unsigned */
typedef int GLsizei; /* 4-byte signed */
typedef float GLfloat; /* single precision float */
typedef float GLclampf; /* single precision float in [0,1] */
typedef double GLdouble; /* double precision float */
typedef double GLclampd; /* double precision float in [0,1] */
Ön Ek | Veri Tipi | Karşılık Gelen C Tip | OpenGL Tip Tanımı |
---|---|---|---|
b | 8-bit integer | signed char | GLbyte |
s | 16-bit integer | short | GLshort |
i | 32-bit integer | int or long | GLint, GLsizei |
f | 32-bit floating-point | float | GLfloat, GLclampf |
d | 64-bit floating-point | double | GLdouble, GLclampd |
ub | 8-bit unsigned integer | unsigned char | GLubyte, GLboolean |
us | 16-bit unsigned integer | unsigned short | GLushort |
ui | 32-bit unsigned integer | unsigned int or unsigned long | GLuint, GLenum, GLbitfield |
OpenGL'in tüm tip tanımları, varsayılan 'C' veri tiplerinden ayırt edebilmek için 'GL' ön eki ile başlar ve daha sonra kullanılacak tip ismi ile biter. (GLint, GLfloat vs...) Bazı işaretsiz (unsigned) tipleri belirtmek için 'u' ön ekini araya sıkıştırılır. (GLubyte, GLuint, GLushort) Ayrıca bazı değişkenlerin kullanılma amacını belirginleştirmek için farklı tipler tanımlanmıştır. Mesela; uzunluk ve derinlik gibi ölçü birimleri için 'GLsizei' tipi, renk değeri taşıdığını belirtmek için 'clamp' takısı kullanılmaktadır.
// C Tip Tanımı
float fvector;
short svector[5];
double *dvector[10];
// OpenGL Tip Tanımı
GLfloat fvector;
// Dizi ve İşaretçi Tip Tanımı
GLshort shorts[5];
GLdouble *doubles[10];
Aynı 'C' dilinde yaptığımız değişken tipi tanımlaması gibi OpenGL tipleri ile değişken tanımlamak mümkün. Böylece değişkenlerin veri tipine bakarak, hangilerinin OpenGL yada programlama dili için tanımlandığını da ayırt edebilmekteyiz.
Referans:
http://eryms.com/c-opengl-01-giris/
http://www.glprogramming.com/red/chapter01.html
Hiç yorum yok:
Yorum Gönder