كيف يمكنني المزج بين بلدي وبلدي UIView EAGLEView؟
سؤال
ولدي مشهد برنامج OpenGL التقديم على طبقة EAGLView وبعض العناصر الأخرى (الدوائر ومثل هذه) تقديم على UIView (وهو أخ لEAGLView المتمركزة فوقه). هل من الممكن لمزج الألوان بين طبقتين؟ أود أن تفعل بعض الفرق مزج للحصول على تأثير انعكاس على الألوان من EAGLView.
ولقد لعب حولها مع CGBlendMode ولكن يبدو فقط أن تؤثر على ما أنا رسم في أن العرض الحالي. وأعتقد أن هذه لديها ما تفعله مع CGContext ولكن أنا قليلا ضبابي على التفاصيل، يمكنني إجبار UIView وEAGLView لديهم نفس CGContext بحيث مزج يعمل بينهما؟
تحظى بتقدير جميعوتعليمات، التصحيحات والإيضاحات. شكرا لك مقدما، -S
المحلول
والجواب باختصار هو لا يمكنك. يتبع الجواب طويل.
حسب EAGLView
يجب أن تقصد فئة فرعية من UIView
التي يتم تضمينها في قالب ES برنامج OpenGL في كسكودي. ما الذي يجعل هذه الفئة خاص هو أن أسلوب فئة layerClass
يتم تجاوز وتعود الطبقة CAEAGLLayer
بدلا من فئة CALayer
، كما هو الافتراضي.
وUIView
والعمل CALayer
في أزواج. وتدعم كافة الكائنات UIView
من قبل CALayer
، وCALayer
هو موضوع مسؤولا عن تخطيط وتقديم لشاشة. وUIView
هو مندوب إلى CALayer
، ويكون مسؤولا عن رسم عليه في الرسومات عند الحاجة.
وCALayer
سيتيح انها مندوب (وUIView
) رسم في CGContextRef
. ومن سياق واحد في UIView
، لذلك لا يمكنك استخدام CGBlendMode
لمزج عدة آراء لأنها سوف تعمل فقط ضمن سياق واحد UIView واحد.
وينبغي أن يتم مزج CALayer
استخدام خصائص التصفية. وتعرف هذه آيفون OS لكن المرشحات المتاحة و<م> غير معروف م> فقا للوثائق. وذلك لأن الصورة الأساسية غير متوفرة على نظام التشغيل اي فون في هذا الوقت.
نصائح أخرى
وأنا لا أعتقد أن عليك أن تكون قادرا على مزج الألوان في هذا الاتجاه. وأفضل ما يمكن القيام به هو لديك واحدة التعتيم تماما على الآخر، أو الطبقة العليا شبه شفافة (في هذه الحالة، سترى الجزء الأسفل) - ولكنك لن تكون قادرة على القيام نوع XOR الرسم