ما الذي قد يجعل OpenGL يتصرف بشكل مختلف تحت "بدء تصحيح الأخطاء" مقابل خيارات "البدء بدون تصحيح الأخطاء"؟

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

سؤال

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

تحرير: يبدو أن الرعشة يمكن حلها بعد تأخير قصير عندما أركض "ابدأ بدون تصحيح" إذا قمت بالنقر فوق زر الماوس. طلبي هو تطبيق وحدة تحكم (أتناول بعض المعلمات عند بدء البرنامج لأول مرة). قد يكون هناك اختلاف في تركيز النافذة بين هذين الخيارين؟ هل هناك طريقة واضحة لإجبار التركيز على نافذة OpenGL (في ملء الشاشة من خلال glutfullscreen () ؛) عندما انتهيت من أخذ المدخلات من نافذة وحدة التحكم؟

شكرًا.

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

المحلول

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

شيء أكثر تحديداً - قد تواجه بعض المشكلات في تدفق الأوامر. حاول الإدراج glFinish() بعد رسم كل إطار.
قد يكون من المفيد أيضًا أن تتأكد بطريقة ما من أنه عندما يحدث التجميد ، هناك بالفعل إطارات يتم تقديمها وليس التطبيق كله تم تجميده. إذا كان هناك من المحتمل أن يكون لديك بعض الأخطاء في المنطق لأنه يبدو أن OpenGL يقوم بعمله.

نصائح أخرى

ال timeGetTime API فقط لديه دقة لشيء مثل 10 مللي ثانية. إذا كانت الفواصل الزمنية التي تقيسها أقل من 50 مللي ثانية أو نحو ذلك ، فقد ترى ببساطة تأثيرات التباين المتوقع في مؤقت النظام. ليس لدي أي فكرة عن سبب تأثير تصحيح الأخطاء على هذا ، ولكن بعد ذلك فإن أعمال النظام هي صندوق أسود. يمكنك استخدام QueryPerformanceCounter للحصول على توقيت أعلى الدقة ، والتي قد تساعد.

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