كيف يعرف iPhone سياق OpenGL ES الذي يجب استخدامه بين 1.1 و 2.0؟

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

سؤال

لقد كنت أتجول في الشبكة مؤخرًا ولاحظت بعض البرامج التعليمية للفيديو ، تظهر قالبًا قديمًا (قبل SDK 3.2) مع سياق OpenGL ES واحد. الآن هناك اثنان منهم ، والتي قمت بالتجول فيها هما الإصداران من OpenGL ES المتاح على أجهزة Imobile الأحدث.

هل يمكنني فقط استخدام واحد أقدم أم أحتاج إلى القيام بكل شيء مرتين؟ كيف يمكنني إخبار iPhone باستخدام السياق الأقدم ، أم أنه هل سيفعل ذلك تلقائيًا؟

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

المحلول

بشكل افتراضي ، يحاول القالب إنشاء سياق ES2 ، وإذا فشل ذلك ، فإنه يحاول إنشاء سياق ES1. إذا كنت ترغب في العمل مع ES 1.1 وحده (الذي يتم دعمه على جميع الأجهزة) ، فيمكنك فقط حذف جميع الإشارات إلى ES2 من مشروع القالب.

نصائح أخرى

للتوسع على ما قاله Frogblast ، يحدد رمز القالب فئتين: ES1Renderer و ES2Renderer. ال EAGLView يحاول الفصل أولاً إنشاء ES2Renderer مثيل ، ولكن إذا فشل ذلك ، فإنه يخلق ES1Renderer. يأتي الفشل إذا كان ES2Renderer غير قادر على إعداد سياق OpenGL ES 2.0 باستخدام الكود التالي:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
    [self release];
    return nil;
}

إذا كان الجهاز يدعم OpenGL ES 2.0 ، فيجب أن ينجح ذلك. إذا لم يكن كذلك ، فإن التطبيق يعود إلى ES1Renderer OpenGL ES 1.1 العارض.

السبب في أن التطبيق له فئتان مختلفتان لتقديمه هو أن OpenGL ES 1.1 و 2.0 لديهما خطوط أنابيب مختلفة وغير متوافقة. يتيح لك OpenGL ES 2.0 إنشاء تظليلات قابلة للبرمجة لبعض التأثيرات المذهلة ، ولكن قد يكون من الصعب استخدامها في مهام بسيطة من OpenGL ES 1.1.

يضيف العديد من الأشخاص عوائق إلى تطبيقاتهم إذا استخدموا OpenGL ES 2.0 ، لأن فقط iPhone 3G S والأجهزة اللاحقة لديها دعم لهذا API أبدًا. ومع ذلك ، إذا كنت تقوم بتطوير تطبيق iPad فقط ، فيمكنك افتراض أنه سيكون لديه دعم 2.0. يمكنك أيضًا تقييد تطبيقك على تشغيل الأجهزة باستخدام هذه الإمكانية عن طريق إضافة opengles-2 مفتاح UIRequiredDeviceCapabilities في info.plist.

يمكنك استخدام OpenGL ES 1.1 على ما يرام على الأجهزة الأحدث ، لذلك إذا كنت ترغب في تعطيل مسار العرض 2.0 ، يمكنك الحصول على EAGLVIEW في القالب تجاهل ES2Renderer الفصل والعمل فقط مع ES1Renderer. يمكنك أيضًا أخذ رمز OpenGL ES من ES1Renderer وفقط وضعه داخل EAGLVIEW.

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