برای اینکه انتقال کدهای نوشته شده در OpenGL به راحتی از یک پلتفرم به پلتفرم دیگر قابل انتقال باشند OpenGL انواع داده مخصوص به خودش را تعریف کرده است. هر محیط برنامه نویسی یا کامپایلری بهر حال قواعد خاصی برای اندازه و نوع حافظه متغیر های مختلف سی "C" دارد. اما با استفاده از انواع داده های OpenGL یعنی OpenGL Data Types شما میتوانید کد خودتان را در برابر این نوع تغییرات عایق کاری کنید.

جدول 1-2 انواع داده OpenGL را لیست کرده است و همچنین انواع داده متناظر آنها در C تحت محیط ویندوز 32 بیتی را نشان داده است.



تمام انواع داده با یک GL شروع میشوند برای ایمکه مشخص باشد از انواع داده OpenGL میباشد و خیلی از آنها از انواع متناظرشان در زبان C منتج شده اند. مانند float , int , short , byte , … .بعضی در ابتدایشان یک حرف u دارند که بیانگر اینست که از نوع بدون علامت "unsigned" میباشد. مانند ubyte که نماینده unsigned byte است.

برای بعضی از مصارف روشن ترین و مشخص ترین نام تعیین شده است مانند نوع size که مشخص کننده مقدار طول یا عمق میباشد. بطور مثال GLsizei یکی از توابع OpenGL است که نشان دهنده این است که این تابع یک متغیر از نوع صحیح را به عنوان آرگومان میگیرد.

نقش Clamp یک تذکر جزیی است که نشان دهد مقدار باید در محدوده 0.0 – 1.0 باشد. متغیر های GLboolean بدین منظور استفاده میشوند تا مقادیر صحیح یا غلط را نشان دهند.

اشاره گرها و آرایه هاهیچگونه معادل خاصی در OpenGL ندارند. یک آرایه از ده عنصر GLshort بطور ساده به این صورت تعریف میشود :


GLshort shorts[10];   // this way[/align]


و آرایه ای از ده اشاره گر به متغیر های GLdouble بدین صورت تعریف میشود :

[align=left]GLdouble *doubles[10];   //this way[/align]


بعضی از انواع شی اشاره گر دیگر برای NURBS و چهاگوش ها استفاده میشوند که به توضیحات بیشتری احتیاج دارند و در مقالات بعدی پوشش داده خواهند شد.



قواعد نامگذاری توابع در OpenGL :

بسیاری از توابع OpenGL از یک قرارداد تبعیت میکنند تا به شما بفهمانند این تابع از کدام کتابخانه میباشد و در بعضی مواقع اینکه این توابع چه تعداد و چه نوعی از داده ها را به عنوان آرگومان میپذیرد. تمام توابع ریشه ای دارند که دستور متناظر OpenGL آنها را نشان میدهد. برای مثال تابع glColor3f  ریشه اش color است و پیشوند gl نشان دهنده کتابخانه gl میباشد. پسوند 3f نشان دهنده این است که این تابع سه عدد آرگومان از نوع ممیز شناور (floating – point) میگیرد. تمام توابع OpenGL قالب زیر را دارند :

<Library><Root><Optional><Optional>

این تابع نمونه با پسوند 3f سه عدد آرگومان ممیز شناور میگیرد. نوع دیگر این تابع glColor3i  سه عدد صحیح را به عنوان آرگومان میپذیرد. و
نوع glColor3d سه عدد از نوع double را به عنوان آرگومان میگیرد و همینطور الی آخر.

 



این شیوه اضافه کردن تعداد و نوع آرگومانها به انتهای توابع OpenGL به خاطر آوردن لیست آرگومانهای تابع را آسانتر میکند. بعضی از نسخه های تابع glColor چهار آرگومان میگیرد که آرگومان چهارم مربوط به تعیین مولفه آلفا (شفافیت) می باشد. بسیاری از کامپایلر های C/C++ که برای محیط windows ساخته شده اند اینگونه تصور میکنند که هر لیترال ممیز شناور از نوع double است مگر آنکه بطور صریح توسط مکانیسم پسوند به کامپایلر اعلام شود. هنگامی که از لیترال ها (همان حروف اختصاری) برای اعلان آرگومان ممیز شناور استفاده میکنید اگر شما مشخص نکنید که این آرگومانها از نوع float هستند و نه از نوع double کامپایلر در زمان کامپایل یک اخطار میفرستد چون کشف کرده که شما دارید یک متغیر از نوع double را به تابع ارسال میکنید در صورتی که تابع به گونه ای تعریف شده که فقط انواع float را بپذیرد. در نتیجه ممکن است دقت کار از میان برود. موقعی که این اخطار ها به حد زیادی برسد میتواند حتی عمل شناسایی خطاهای نحوی در طول برنامه را مشکل سازد. البته شما میتوانید این اخطار ها را با خاموش کردن قسمت ارسال اخطار کامپایلر خود از بین ببرید اما من شدیدا توصیه میکنم که سعی کنید کدتان را اصلاح کنید تا تمیز و قابل انتقال بماند. پس تک تک اخطارها را با درست کردن شان از بین ببرید. به علاوه ممکن است شما وسوسه بشوید که از توابعی استفاده کنید که آرگومانهایی از نوع ممیز شناور با دقت مضاعف را میپذیرند (double-precision floating-point) به جای float یا double .البته OpenGL بطور ذاتی از نوع float استفاده میکند و در نهایت انواع دیگر را به نوع ممیز شناور با دقت معمولی تبدیل میکند زیرا هر متغیر از نوع double دو برابر متغیری از نوع float حافظه مصرف میکند و در مقادیر بالا اینکار OpenGL باعث افزایش سرعت و کارایی برنامه میشود.