PyOpenGL + Pygame توج إلى 60 إطارا في الثانية في وضع ملء الشاشة

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

سؤال

أنا أعمل حاليا على محرك اللعبة مكتوب في pygame و أنا أريد أن أضيف دعم برنامج OpenGL.

كتبت اختبار لمعرفة كيفية جعل pygame و OpenGL العمل معا عندما يكون قيد التشغيل في وضع استخدام الإطارات ، فإنه يعمل ما بين 150 و 200 إطارا في الثانية.عند تشغيل كامل الشاشة (كل ما فعلته هو إضافة ملء الشاشة العلم عندما أقوم بإعداد الإطار) ، تنخفض إلى 60 إطارا في الثانية.لقد تم إضافة الكثير من الوظائف الرسم لمعرفة ما إذا كان مجرد أداء ضخمة تسقط ولكن دائما ركض بسرعة 60 إطارا في الثانية.

هل هناك شيء إضافي لا أقول OpenGL من أنه قيد التشغيل ملء الشاشة أو يتم هذا الحصر من OpenGL?

(أنا التشغيل في ويندوز XP)

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

المحلول

كما frou أشار إلى أن هذا سيكون بسبب Pygame انتظار العمودي تقفي عند تحديث الشاشة عن طريق الاتصال display.flip().كما Pygame display الوثائق ملاحظات إذا كنت تعيين وضع العرض باستخدام HWSURFACE أو DOUBLEBUF الأعلام ، display.flip() سوف انتظر العمودي تقفي قبل مبادلة المخازن المؤقتة.

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

نصائح أخرى

هل هذه V-مزامنة القضية؟ شيئا عن التكوين أو بيئتك قد يحد من الحد الأقصى لمعدل الإطار إلى معدل تحديث جهاز العرض الخاص بك.

إذا كنت لا تغيير clock.tick الخاص بك () عند تغيير بين ملء الشاشة ووضع إطارات هذا يكاد يكون من المؤكد قضية VSYNC. إذا كنت على LCD ثم انها 100٪ معين.

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

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