تبليغاتX
OpenGL & Computer graphics - مقالات آموزش OpenGL قسمت هفتم

خطاها در OpenGL :

 

واضح است که در هر پروژه ای شما میخواهید که برنامه ای قوی و با تربیت بنویسید که بصورت مودبانه به کاربرانش پاسخ دهد و مقداری هم انعطاف پذیری داشته باشد. برنامه های گرافیکی هم که از OpenGL استفاده میکنند از این قاعده مستثنی نیستند. اگر شما میخواهید که برنامه هایتان بطور روان اجرا شوند شما باید خطاها و رویداد های غیر مترقبه را همیشه مد نظر قرار دهید.

OpenGL یک مکانیزم مفید و موثر مهیا کرده است که شما با کمک آن بتوانید یک بررسی صحت بر حسب موقعیت "Occasional sanity check" بر روی کدتان قرار دهید. این قابلیت میتواند بسیار مهم باشد.

 

هنگامی که اتفاقات بدی برای کدهای خوب روی میدهند :

 

OpenGL بطور ذاتی از مجموعه ای از شش پرچم حمایت میکند که هر پرچم یک نوع خاص از خطا را نشان میدهد. هر زمان که یکی از این خطاها اتفاق بیفتد پرچم متناظر با آن خطا برقرار میشود. برای اینکه بفهمیم آیاهیچ کدام از این پرچم ها برقرارند یا نه این تابع را صدا میزنیم :

 

glGetError:

Glenum glGetError(void);

 

تابع glGetError یکی از مقادیر جدول 3-2 را برمیگرداند. کتابخانه GLU سه خطای مخصوص به خودش را تعریف میکند اما این نقشه خطاها دقیقا دو پرچم خطا را ارائه میکنند. اگر بیشتر از یکی از پرچمهابرقرار باشد glGetError هنوز تنها یک پرچم خطا را بر میگرداند. این مقدار پس از فراخوانی glGetError پاک میشود و glGetError دوباره مقدار خطای پرچم بعدی را برمیگرداند و یا مقدار GL_NO_ERROR را برمیگرداند. پس شما نیاز دارید تا تابع glGetError رادر یک حلقه صدا بزنید تا همینطور به چک کردن پرچم های خطا ادامه دهد تا زمانی که مقدار GL_NO_ERROR را برگرداند.

 

شما همچنین میتوانید از تابع دیگری در کتابخانه GLU استفاده کنید که gluErrorString نام دارد تا رشته ای دریافت کنید که پرچم خطا را شرح میدهد.

 

const GLubyte* gluErrorString(GLenum errorCode);

 

این تابع پرچم خطایی را که توسط تابع glGetError برگشت داده شده را به عنوان تنها آرگومانش میگیرد و سپس یک رشته استاتیک را بر میگرداند که خطایی که اتفاق افتاده است را توصیف میکند. پرچم خطای GL_INVALID_ENUM این رشته را باز می گرداند.

 

 

 

 

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

 

منبع : کتاب OpenGL SuperBible 3rd Edition

+ نوشته شده توسط ( ساسان و محمد ) در یکشنبه چهارم تیر 1385 و ساعت |
Image and video hosting by TinyPic