مجموعة أدوات OpenGL المساعدة
مجموعة أدوات OpenGL المساعدة ( GLUT ) هي مكتبة قديمة من الأدوات المساعدة لبرامج OpenGL ، والتي تُنفّذ بشكل أساسي عمليات الإدخال والإخراج على مستوى النظام مع نظام التشغيل المضيف. تشمل وظائفها تعريف النوافذ والتحكم بها، ومراقبة مدخلات لوحة المفاتيح والماوس . كما توفر روتينات لرسم عدد من الأشكال الهندسية الأساسية (في كل من الوضع الصلب والوضع السلكي)، بما في ذلك المكعبات والكرات وإبريق شاي يوتا . وتدعم GLUT أيضًا بشكل محدود إنشاء قوائم منبثقة.
تمت كتابة GLUT بواسطة مارك جيه كيلغارد ، مؤلف كتاب برمجة OpenGL لنظام X Window وكتاب Cg Tutorial: الدليل النهائي للرسومات القابلة للبرمجة في الوقت الحقيقي ، أثناء عمله لدى شركة Silicon Graphics Inc.
يهدف GLUT إلى تحقيق هدفين رئيسيين: الأول هو تمكين إنشاء كود قابل للنقل بين أنظمة التشغيل المختلفة (GLUT متعدد المنصات )، والثاني هو تسهيل تعلم OpenGL. لا يتطلب البدء في برمجة OpenGL باستخدام GLUT عادةً سوى بضعة أسطر من التعليمات البرمجية، ولا يستلزم معرفة واجهات برمجة التطبيقات الخاصة بنظام التشغيل .
تبدأ جميع وظائف GLUT بالبادئة glut(على سبيل المثال، glutPostRedisplayتشير إلى أن النافذة الحالية بحاجة إلى إعادة رسمها).
التطبيقات
تدعم مكتبة GLUT الأصلية التي طورها مارك كيلغارد نظام X Window ( GLX )، وقد قام نيت روبنز بنقلها إلى نظام مايكروسوفت ويندوز ( WGL ) . بالإضافة إلى ذلك، يأتي نظام macOS مزودًا بإطار عمل GLUT يدعم NSGL/ CGL الخاص به .
لم تعد مكتبة GLUT الخاصة بكيلغارد تُحدَّث، ولم يسمح ترخيصها بإعادة توزيع نسخ مُعدَّلة منها. وقد حفّز هذا الحاجة إلى برامج حرة أو مفتوحة المصدر لإعادة تنفيذ واجهة برمجة التطبيقات (API) من الصفر. وكانت FreeGLUT أول مكتبة من هذا النوع ، والتي تهدف إلى أن تكون نسخةً قريبةً إلى حدٍّ ما، مع إضافة عدد قليل من الوظائف الجديدة لمعالجة قيود GLUT. أما OpenGLUT، وهي نسخة مشتقة من FreeGLUT، فقد أضافت عددًا من الميزات الجديدة إلى واجهة برمجة التطبيقات الأصلية، ولكن توقف العمل عليها في مايو 2005.
يمتلك مارك كيلغارد مستودعًا على GitHub لمكتبة GLUT. [ 1 ] يحتوي ملف الرأس glut.h على الترخيص التالي: [ 2 ]
/* حقوق الطبع والنشر © مارك ج. كيلغارد، 1994، 1995، 1996، 1998، 2000، 2006، 2010. */ /* هذا البرنامج قابل للتوزيع مجانًا دون رسوم ترخيص وهو مُقدَّم بدون أي ضمان صريح أو ضمني. البرنامج ليس ملكًا عامًا.
القيود
أدت بعض قرارات التصميم الأصلية لـ GLUT إلى صعوبة تنفيذ المهام المطلوبة من قبل المبرمجين. وقد دفع هذا العديد منهم إلى إنشاء تصحيحات وإضافات غير رسمية لـ GLUT.تتضمن بعض البرامج المجانية أو عمليات إعادة التنفيذ مفتوحة المصدر أيضًا إصلاحات.
تتضمن بعض القيود الأكثر وضوحًا لمكتبة GLUT الأصلية ما يلي:
- تتطلب المكتبة من المبرمجين استدعاء
glutMainLoop()دالة لا تُرجع قيمة. هذا يُصعّب على المبرمجين دمج GLUT في برنامج أو مكتبة ترغب في التحكم بحلقة أحداثها الخاصة. يتمثل أحد الحلول الشائعة لهذه المشكلة في إضافة دالة جديدة، تُسمىglutCheckLoop()(في macOS) أوglutMainLoopEvent()(في FreeGLUT/OpenGLUT)، والتي تُشغّل دورة واحدة فقط من حلقة أحداث GLUT. حل بديل شائع آخر هو تشغيل حلقة أحداث GLUT في خيط منفصل ، مع العلم أن هذا قد يختلف باختلاف نظام التشغيل، وقد يُسبب مشاكل في التزامن أو غيرها من المشاكل؛ على سبيل المثال، يتطلب تطبيق GLUT في macOSglutMainLoop()تشغيل هذه الدالة في الخيط الرئيسي. - حقيقة أن
glutMainLoop()الدالة لا تعود أبدًا تعني أيضًا أن برنامج GLUT لا يمكنه الخروج من حلقة الأحداث. يقوم FreeGLUT بإصلاح هذا الأمر من خلال تقديم دالة جديدةglutLeaveMainLoop(). - تقوم المكتبة بإنهاء العملية عند إغلاق النافذة؛ وقد لا يكون هذا مرغوبًا فيه لبعض التطبيقات. لذا، تتضمن العديد من التطبيقات دالة رد نداء إضافية، مثل
glutWMCloseFunc()...
بما أنه لم يعد يتم صيانته (تم استبداله بشكل أساسي ببرنامج FreeGLUT مفتوح المصدر )، فإن مشكلات التصميم المذكورة أعلاه لا تزال غير محلولة في برنامج GLUT الأصلي.
انظر أيضاً
- EGL هي واجهة بين OpenGL ES أو OpenVG ونظام النوافذ .
- يهدف FreeGLUT إلى أن يكون بديلاً كاملاً لـ GLUT، ولا يوجد سوى اختلافات قليلة.
- أسبوع الموضة العالمي
- طبقة الوسائط المباشرة البسيطة (SDL)
- مكتبة واجهة المستخدم OpenGL (GLUI)
- مكتبة OpenGL المساعدة (GLU)
مراجع
روابط خارجية
- GLUT - مجموعة أدوات OpenGL المساعدة، مؤرشفة بتاريخ 18 يناير 2018 على موقع Wayback Machine
- واجهة برمجة تطبيقات OpenGL Utility Toolkit (GLUT) الإصدار 3 مؤرشفة بتاريخ 30-04-2016 على موقع Wayback Machine (الوثائق الرسمية)
- تنزيلات مجموعة أدوات OpenGL المساعدة (GLUT) (المصدر والمكتبات المجمعة مسبقًا)
- OpenGL
