سؤال

عندما GLKView تم تغيير حجمه، هناك بعض العمليات التي تجري خلف الكواليس في المخازن المؤقتة وسياق ذلك GLKView.خلال الوقت الذي يستغرقه تنفيذ هذه العمليات التي تتم خلف الكواليس، يتم رسمها إلى GLKView لا يؤدي إلى نتائج صحيحة.

في السيناريو الخاص بي، لدي GLKView التي لديها setNeedsDisplay تم تمكينه، لذلك في أي وقت أحتاج إلى تحديث محتوياته على الشاشة، أتصل فقط -setNeedsDisplay على ذلكGLKView.أنا استخدم GLKView لرسم الصور، لذا إذا كنت بحاجة إلى رسم صورة بحجم مختلف، فأنا بحاجة أيضًا إلى تغيير حجمها GLKView.

المشكلة:عندما أقوم بتغيير حجم GLKView و اتصل setNeedsDisplay في طريقة العرض هذه، النتيجة التي تظهر على الشاشة غير صحيحة.وذلك لأن GLKView لم يتم الانتهاء من عمليات ما وراء الكواليس التي تم استدعاؤها بواسطة تغيير الحجم الجديد قبل أن يحاول رسم الصورة الجديدة.

لقد وجدت حلاً لهذا عن طريق الاتصال: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 بدلا من مجرد setNeedsDisplay على ال GLKView.يؤدي هذا بشكل أساسي إلى إجبار الخيط الرئيسي على الانتظار حتى تكتمل جميع عمليات openGL التي تتم خلف الكواليس قبل الاتصال setNeedsDisplay.على الرغم من أن هذا يعمل بشكل جيد، إلا أنني أتساءل عما إذا كان هناك حل أفضل.على سبيل المثال، هل هناك استدعاء openGL لجعل الخيط ينتظر حتى تكتمل جميع عمليات openGL قبل المتابعة؟

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

المحلول

وكان الحل هو إعادة ضبط CIContext كائن بعد GLKView تم تغيير حجمها.
شكرا على لا شيء، الجميع!

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