تغيير حجم GLKView
-
27-10-2019 - |
سؤال
عندما 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
تم تغيير حجمها.
شكرا على لا شيء، الجميع!