2012-11-05 6 views
9

मैं एक नई परियोजना शुरू करने वाला हूं। कुछ निर्णय मेरे नियंत्रण से बाहर हैं: डब्ल्यूपीएफ और ओपनजीएल का उपयोग उनमें से कुछ हैं। या तो OpenTK या SharpGL:ओपनटीके, शार्पजीएल और डब्ल्यूपीएफ

हालांकि, मैं दो करने के लिए अपने ओपन विकल्पों को संकुचित होता है। शार्पजीएल में एक डब्ल्यूपीएफ नियंत्रण है, जबकि ओपनटीके में केवल विंडोज फॉर्म नियंत्रण है, जो इसे बनाता है कि मुझे इसे विंडोज फॉर्म होस्ट में एम्बेड करना होगा: -/ जबकि मुझे एयरस्पेस प्रतिबंधों पर कोई ध्यान नहीं है, तो मैं सभ्य प्रदर्शन करना चाहता हूं , क्योंकि मैं एक वास्तविक समय आवेदन कर रहा हूँ। एक खेल नहीं, लेकिन फिर भी, वास्तविक समय।

एक प्रदर्शन हिट का कितना मेरा कार्यक्रम एक Windows से अधिक OpenTK प्रयोग करने के लिए ले जाएगा होस्ट फॉर्म्स, एक "शुद्ध" WPF नियंत्रण के साथ SharpGL का उपयोग कर बनाम?

+0

मैंने WinForms + DX बनाम WPF + DX बनाम D3DImage इंटरऑप के माध्यम से परीक्षण किया है। डीएक्स + विनफॉर्म बहुत तेज़ है। WPF D3DImage का उपयोग करते समय एक प्रदर्शन हिट होता है क्योंकि इसे अपने प्रतिपादन इंजन में एकीकृत करने के लिए कुछ आवश्यक प्रतिलिपि की आवश्यकता होती है। मैं कल्पना करता हूं कि ओपनजीएल – Alan

+0

के लिए भी लागू होगा 'विंडोज फॉर्म होस्ट' का उपयोग एक खराब समाधान IMHO है। आप इसे सामान्य नियंत्रण के रूप में एम्बेड नहीं कर सकते हैं, क्योंकि यह ओवरड्रा का समर्थन नहीं करता है। –

उत्तर

5

यह प्रदर्शन की बात आती है, मैं वास्तव में केवल आप एक ही जवाब दे सकते हैं: एक बेंचमार्क स्वयं करें! लेकिन जैसा कि आप एक विस्तृत अनुमान के लिए पूछ रहे हैं:

SharpGl एक अविवेक कदम कम आवश्यकता होती है चाहिए, के रूप में यह बाहर छोड़ देता है विंडोज फॉर्म्स एक "मध्यवर्ती" blitting लक्ष्य के रूप में मेजबान नियंत्रण। हालांकि नमक के अनाज के साथ इसे ले लो, मैंने न तो स्रोत को देखा है और न ही इसे स्वयं परीक्षण किया है।

लेकिन व्यावहारिक रूप से बोलना: प्रदर्शन बहुत समान होना चाहिए। दिन के अंत में कम्प्यूटेशनल भारी संचालन शायद प्रतिपादन ही होगा, जो ओपनजीएल द्वारा किया जाता है। समाप्त परिणाम को छोड़कर केवल उस समय का एक अंश लेना चाहिए। तो मुझे उम्मीद है कि, हालांकि, आप तय करते हैं, इनमें से कोई भी विकल्प वास्तव में आपके प्रदर्शन को चोट नहीं पहुंचाएगा।

तर्क के लिए: आइए मान लें कि प्रतिपादन स्वयं (ओपनजीएल भाग) 16 एमएस लेता है, इसलिए हमारे पास लगभग 60 एफपीएस का सैद्धांतिक प्रभाव होगा। फ्रेमवर्क ए 1 एमएस का एक ओवरहेड जोड़ता है, फ्रेमवर्क बी 4 एमएस का ओवरहेड होता है। ओवरहेड में इस काफी अंतर के साथ भी, फ्रेमवर्क एक ~ 50 एफपीएस पर ~ 58 एफपीएस और फ्रेमवर्क बी पर प्रस्तुत करेगा। तो दोनों मामलों में, आवेदन प्रयोग योग्य रहना चाहिए।

लेकिन आप कितना इस पहलू के बारे में सोच रहे हैं जो मुझे पहेली है। अंत में आप ओपनजीएल के साथ काम कर रहे हैं और चीजों को खराब होने पर अंतर्निहित कार्यान्वयन को स्विच करने में परेशानी नहीं होनी चाहिए? इंटरफेस मेरे लिए बहुत अलग नहीं लगते हैं।

+0

मुझे संदेह है कि हिट छोटा है: हार्डवेयर त्वरण से डब्ल्यूपीएफ लाभ, Winforms नहीं करता है। –

+3

मुझे लगता है कि आप मेरी बात याद कर रहे हैं: मुख्य काम ओपनजीएल में किया जाता है, जिसे हार्डवेयर त्वरित किया जाना चाहिए।ओपनजीएल आउटपुट से "पुल" करने के लिए, "परिणामी" छवि को विभिन्न सतहों पर आसानी से लगाया जाता है। और इन ब्लिटिंग ऑपरेशंस को केवल प्रतिपादन के लिए आवश्यक समय का एक अंश लेना चाहिए। ओह, और डब्ल्यूपीएफ हार्डवेयर त्वरण यहां बहुत कुछ नहीं खरीदता है। मुझे नहीं लगता कि डब्ल्यूपीएफ से ओपनजीएल छवि तक पहुंचने की संभावना है, इसलिए एक "सॉफ्टवेयर" प्रतिलिपि बनाई जानी चाहिए। –

+0

मैंने अपना पॉइंट स्पष्ट करने के लिए कुछ नंबर जोड़े। –

4

मैं OpenTK साथ जाना, या अगर यह और अधिक आरामदायक है आप SharpGL का उपयोग करने के लिए है, तो Winforms मोड में इसके साथ जाने के लिए और यह एक WPF अनुप्रयोग के भीतर एम्बेड कहेंगे।

कारण ओपन चालक को पता है कि कैसे एक खिड़की संभाल, हर WinForms नियंत्रण के साथ प्रदान की साथ काम करने के लिए है। एक डब्ल्यूपीएफ आवेदन में केवल एक खिड़की हैंडल, मुख्य खिड़की में से एक है। आप इसका उपयोग करने का प्रयास कर सकते हैं, लेकिन मुझे लगता है कि यह बहुत सी समस्याएं पैदा करेगा।

आप चीजों को सीधे स्क्रीन को प्रदान की गई करने के लिए, और आप एक PixelBufferObject या एक RenderBufferObject का उपयोग कर, की तुलना में आप शायद WPF मोड में SharpGL साथ ठीक हो जाएगा (यह एक RenderBufferObject को प्रस्तुत हुई है, स्थानों की तुलना में के बारे में सोच नहीं करना चाहते हैं परिणामस्वरूप बफर एक छवि में, शायद एक WritableBitmap या तो का उपयोग कर), या आप एक ही बात कर सकते हैं।

संबंधित मुद्दे