ما هي امتدادات OpenGL، وما هي فوائد/مقايضات استخدامها؟

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

سؤال

فيما يتعلق بهذا السؤال على باستخدام ملحقات برنامج OpenGL, ما هو الغرض من وظائف التمديد هذه؟لماذا أريد استخدامها؟علاوة على ذلك، هل هناك أي مقايضات أو مشاكل مرتبطة باستخدامها؟

هل كانت مفيدة؟

المحلول

يسمح معيار OpenGL للبائعين الفرديين بتوفير وظائف إضافية من خلال الامتدادات عند إنشاء تقنية جديدة.قد تقدم الامتدادات وظائف جديدة وثوابت جديدة، وقد تخفف أو تزيل القيود المفروضة على وظائف OpenGL الحالية.

كل بائع لديه اختصار أبجدي يستخدم في تسمية وظائفه وثوابته الجديدة.على سبيل المثال، يتم استخدام اختصار NVIDIA (NV) في تعريف وظيفتها الخاصة glCombinerParameterfvNV() والثابت GL_NORMAL_MAP_NV.

قد يحدث أن يوافق أكثر من بائع على تنفيذ نفس الوظيفة الموسعة.وفي هذه الحالة، يتم استخدام الاختصار EXT.قد يحدث أيضًا أن "يبارك" مجلس مراجعة الهندسة المعمارية الامتداد.ومن ثم يصبح معروفًا باسم الامتداد القياسي، ويتم استخدام الاختصار ARB.كان امتداد ARB الأول هو GL_ARB_multitexture، الذي تم تقديمه في الإصدار 1.2.1.باتباع المسار الرسمي لترويج الامتداد، لم يعد تعدد النصوص امتدادًا لـ ARB يتم تنفيذه اختياريًا، ولكنه أصبح جزءًا من واجهة برمجة تطبيقات OpenGL الأساسية منذ الإصدار 1.3.

قبل استخدام ملحق، يجب على البرنامج أولاً تحديد مدى توفره، ثم الحصول على مؤشرات لأي وظائف جديدة يحددها الملحق.آلية القيام بذلك خاصة بالنظام الأساسي ويوجد مكتبات مثل GLEW و GLEE لتبسيط العملية.

نصائح أخرى

ملحقات برنامج OpenGL هي ميزات جديدة تضاف إلى مواصفات برنامج OpenGL, ، تتم إضافتها بواسطة هيئة معايير OpenGL وبواسطة بائعي بطاقات الرسومات المختلفين.يتم عرضها للمبرمج على شكل استدعاءات وظائف جديدة أو متغيرات.يأتي كل إصدار جديد من مواصفات OpenGL مزودًا بوظائف أحدث ويتضمن (عادةً) جميع الوظائف والامتدادات السابقة.

المشكلة الحقيقية في امتدادات OpenGL موجودة فقط على نظام التشغيل Windows.لم تدعم Microsoft أي ملحقات تم إصدارها بعد ذلك برنامج OpenGL v1.1.يتغلب بائعو بطاقات الرسومات على هذه المشكلة عن طريق شحن نسختهم الخاصة من هذه الوظيفة من خلال ملفات الرأس والمكتبات.ومع ذلك، قد يكون استخدام هذا مؤلمًا بعض الشيء كما يظهر السؤال الذي قمت بربطه.لكن هذه المشكلة اختفت في الغالب مع شعبية توهج, ، والذي يعتني بتجميع كل هذا في حزمة سهلة الاستخدام.

إذا كنت تستخدم ملحق OpenGL حديثًا جدًا، فاعلم أنه قد لا يكون مدعومًا على أجهزة الرسومات القديمة.بخلاف هذا، ليس هناك أي عيب آخر لاستخدام هذه الملحقات.معظم الامتدادات التي أصبحت قياسية هي رائعة جدًا مفيد وليس هناك منطق كبير لعدم استخدامها.

تعد الامتدادات، بشكل عام، وسيلة لموردي بطاقات الرسومات لإضافة وظائف جديدة إلى OpenGL دون الحاجة إلى الانتظار حتى المراجعة التالية لمواصفات OpenGL.هناك أنواع مختلفة من الامتدادات:

  1. ملحق البائع - يوفر بائع واحد فقط نوعًا معينًا من الوظائف.
    • مثال: NV_vertex_program
  2. ملحق متعدد البائعين - اجتمع العديد من البائعين معًا واتفقوا على الوظيفة.
    • مثال: EXT_vertex_program
  3. امتداد ARB - بارك مجلس مراجعة هندسة OpenGL الامتداد.لديك توقع معقول بأن هذا النوع من الامتداد سيكون موجودًا لفترة من الوقت.
    • مثال: ARB_vertex_program

ليس من الضروري أن تمر الإضافات بكل هذه الخطوات.في بعض الأحيان، يتم تنفيذ الامتداد بواسطة بائع واحد فقط، قبل أن تتجه تصميمات الأجهزة بطريقة مختلفة ويتم التخلي عن الامتداد.وفي أحيان أخرى، قد يصل الامتداد إلى حالة ARB قبل أن يقرر الجميع أن هناك طريقة أفضل.(ال ARB_vertex_program على سبيل المثال، تم وضع هذا النهج جانبًا لصالح نهج لغة التظليل عالي المستوى ARB_vertex_shader عندما حان الوقت لدمج التظليل في مواصفات OpenGL الأساسية.) حتى امتدادات ARB لا تدوم إلى الأبد؛لن أكتب شيئا اليوم يتطلب ARB_matrix_palette, ، على سبيل المثال.

بعد كل ما سبق، من الجيد جدًا أن تظل على اطلاع دائم على الامتدادات، ولا سيما أحدث الامتدادات ARB وEXT.في الماضي كان صحيحًا أن بعض "المسارات السريعة" عبر الأجهزة لم يكن من الممكن الوصول إليها إلا عبر الامتدادات.وبالمثل، إذا كنت تريد معرفة الوظائف التي يمكن أن تقوم بها قطعة من الأجهزة، فلا يوجد مكان أفضل للبحث فيه من الإضافة الخاصة بالمورد.

إذا كنت قد بدأت للتو في استخدام OpenGL، فإنني أوصي بالتحقيق في ما يلي:

  • ARB_vertex_buffer_object (الرؤوس)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / مواصفات GLSL (التظليل)

أكثر تطورا:

  • ARB/EXT_framebuffer_object (العرض خارج الشاشة)

هذه هي كل الوظائف التي تم دمجها في جوهرها، ولكن قد يكون من الجيد رؤيتها بمعزل عن غيرها حتى تتمكن من الحصول على فكرة أفضل عن حدودها.(تمزج مواصفات OpenGL الأساسية بين القديم والجديد بسلاسة، لذلك يمكن أن يكون هذا مهمًا جدًا إذا كنت تريد البقاء على المسار السريع، وتجنب الإرث الذي يتم تنفيذه أحيانًا في مسارات البرامج.)

مهما فعلت، تأكد من إجراء عمليات التحقق المناسبة من الإضافات التي تقرر استخدامها، والخيارات الاحتياطية عند الضرورة.على الرغم من أن بطاقتك قد تحتوي على امتداد معين، فليس هناك ضمان بأن الامتداد سيكون موجودًا على بطاقة بائع آخر، أو حتى على نظام تشغيل آخر بنفس البطاقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top