PyOpenGL + Pygame توج إلى 60 إطارا في الثانية في وضع ملء الشاشة
-
10-07-2019 - |
سؤال
أنا أعمل حاليا على محرك اللعبة مكتوب في 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 في لوحة التحكم نفيديا لاختبار، وهناك أكثر من المرجح شيء في نفيديا-إعدادات لينكس أيضا. كنت اعتقد السائقين غيرها من الشركات المصنعة لديها إعدادات مماثلة ولكن هذا مجرد تخمين.