ما هو "في" و "الخروج" من OpenGL ES-؟ (ترقية من برنامج OpenGL)

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

سؤال

ويبدو أن جميع الوثائق يمكن أن أجد حول برنامج OpenGL-ES يقول شيئا لتأثير "برنامج OpenGL-ES هو تماما مثل برنامج OpenGL، ولكن من دون الكثير من الاشياء. على سبيل المثال، وليس هناك glBegin أو glEnd."

حسنا، هذا أمر عظيم. لذا، ماذا ليس هناك أي من؟ أم أن هناك قائمة من ما هو في ؟ أو ربما دليل ترقية؟

و(على وجه التحديد، وأنا أحاول أن نقل تطبيق GL القائمة لفون، على الرغم من أنني لا أريد أن يحد بالضرورة بلدي Q الى اي فون.)

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

المحلول

"برنامج OpenGL ES 1.1.12 الفرق مواصفات" (PDF) مرتبطة ب على صفحة معلومات عن برنامج OpenGL ES 1.X في Khronos.org يمر الخلافات بين برنامج OpenGL ES 1.X و OpenGL 1.5. برنامج OpenGL ES 1.1 هي النسخة المستخدمة على اي فون.

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

نصائح أخرى

وجزء من المشكلة في الإجابة على سؤالك هو أن هناك أشياء كثيرة في عداد المفقودين، وغالبا ما انها مجموعة من الأعلام قليلا نادرا ما تستخدم أو غير قابلة للتطبيق. أفضل وثيقة تصف الاختلافات هي في الواقع رؤوس التنفيذ.

لإطار أعمل على قررت أن تجعل من عبر منصة تماما بين سطح المكتب و iPhone. النهج وأغتنم في الاعتقاد بها هو كتابة التعليمات البرمجية في OpenGL، ونرى أين كان وقوع. ثم ننظر في

و/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/ System/Library/Frameworks/OpenGLES.framework/Headers/ES1/gl.h

ووذلك لمقارنة

و/Developer/SDKs/MacOSX10.5.sdk/ System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/gl.h

وهذه الرؤوس هي واضحة جدا وسهلة لمتابعة.

والفرق الرئيسي لقد اكتشفت حتى الآن هو عدم وجود GLdouble (أي شيء باستخدام GLdouble مثل glOrtho وglFrustum لديه نسخة GLfloat glOrthof وglFrustumf). أيضا لا يوجد gluPerspective أو gluPerspectivef لسبب ما.

وهنا هو انخفاض في استبدال:

void gluPerspective( GLfloat fovy, GLfloat aspect, GLfloat zNear, GLfloat zFar )
{
   GLfloat xmin, xmax, ymin, ymax;

   ymax = zNear * tan(fovy * M_PI / 360.0);
   ymin = -ymax;
   xmin = ymin * aspect;
   xmax = ymax * aspect;

   glFrustumf( xmin, xmax, ymin, ymax, zNear, zFar );
}

ومنذ كان لديك أي glBegin وglEnd، عليك أن تفعل كل شيء من خلال glDrawArray أو glDrawElements (المفضل). وهناك مثال سريعة وقذرة:

void draw( short x, short y, short w, short h )
{
    const GLshort t[8] = { 0, 0, 1, 0, 1, 1, 0, 1 };
    const GLshort v[8] = { x, y, x+w, y, x+w, y+h, x, y+h };

    glVertexPointer( 2, GL_SHORT, 0, v );
    glEnableClientState( GL_VERTEX_ARRAY );

    glTexCoordPointer( 2, GL_SHORT, 0, t );
    glEnableClientState( GL_TEXTURE_COORD_ARRAY );

    glDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
}

وراجع الفني ملاحظة TN2230 "أمثلية برنامج OpenGL ES ل iPhone OS" للحصول على بعض النصائح الأخرى التي يمكن أن تكون مفيدة في ترقية.

وترقية تمت حتى الآن إلى حد ما خالية من الألم بالنسبة لي، وما لم يفعله تطبيقك بعض متقدمة جدا OGL الاشياء أو يستخدم وظيفة غير معتمد تماما ستجد المشاكل الخاصة بك عن طريق الضغط على زر بناء وإصلاح بسيطة وسوف تكون واضحة عن طريق حفر قليلا في ملفات gl.h. في الواقع، ترقية إلى ES نوع من القوات منك أن تكتب جيد كود جعل الأمثل.

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