GLGDI + या "GDI + से OpenTK पर स्विच करें"

मुझे लगता है कि कई को जीडीआई + की समस्या से निपटना पड़ा, लेकिन यह धीमा हो गया, क्योंकि यह लोहे द्वारा त्वरित नहीं है।

इसलिए मैंने एक बार एक स्तरीय संपादक लिखा था



और मुझे एहसास हुआ कि मेरे पास अब GDI + नहीं है, मुझे त्वरित रूप से, और कम से कम समय में कुछ करने की आवश्यकता है। थोड़ा गुगला करते हुए, मैंने OpenTK लाइब्रेरी को चुनने का फैसला किया।



OpenTK (ओपन टूलकिट) एक निम्न-स्तरीय लाइब्रेरी है, जो OpenGL, OpenGL ES, OpenCL और OpenAL के लिए एक आवरण है। यह लाइब्रेरी गेम, वैज्ञानिक अनुप्रयोगों के साथ-साथ 3 डी-ग्राफिक्स, ऑडियो और कंप्यूटिंग कार्यक्षमता की आवश्यकता वाले किसी भी अन्य अनुप्रयोगों के लिए डिज़ाइन की गई है। OpenTK एक क्रॉस-प्लेटफॉर्म लाइब्रेरी है और मोनो और .NET दोनों पर चलती है।


आपने OpenTK क्यों चुना? सबसे पहले, OpenTK GLControl वर्ग (जो कि UserControl का प्रत्यक्ष वंशज है) प्रदान करता है, जिससे इस पुस्तकालय में स्विच करना आसान हो जाता है। दूसरे, बंडल में TextPrinter वर्ग शामिल है, जो आपको स्क्रीन पर पाठ को आसानी से प्रदर्शित करने की अनुमति देता है। तीसरी बात, Google के दौरान, मुझे 2D रेंडरिंग, OpenGL इनिशियलाइज़ेशन और अन्य सुविधाओं के लिए कक्षाओं के एक सेट के साथ एक छोटा "Engine.zip" संग्रह मिला।



सबसे पहले मैंने यह वर्णन करने की योजना बनाई कि ओपनटैक पर स्विच करते समय मुझे क्या नुकसान हुआ, लेकिन यह याद रखना कि GDI + से कुछ तेजी से स्विच करने का मुद्दा काफी लोकप्रिय है, मैंने GDI + की नकल करने वाले एक छोटे से पुस्तकालय को लिखने और इसे सार्वजनिक डोमेन में डालने का फैसला किया। मैंने उसे GLGDI + कहा। याद रखें कि यह एक हल्का पुस्तकालय है और इसमें केवल सबसे आवश्यक न्यूनतम है और जीडीआई + एपीआई को पूरी तरह से कॉपी करने की कोशिश नहीं करता है। इसमें GLGraphics, GLImage और GLMultiImage की कक्षाएं शामिल हैं। GLGraphics में निम्नलिखित विधियाँ शामिल हैं:



कुछ बिंदु


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

  1. पहली बात जो मुझे पता चली: स्टार्टअप पर नियंत्रण फिर से नहीं हुआ, यह सरल था, आपको ऑनपेंट के अंत में स्वैबफर्स ​​पद्धति को कॉल करने के लिए याद रखने की आवश्यकता है, GLControl में पहले से ही DoubleBuffer कार्यक्षमता है, जिसे आपको बफर स्विच करने की आवश्यकता है
  2. अगला बिंदु जो मैंने ठोकर खाया, वह चित्रों के बजाय काले आयतों का है। इसे कॉलिंग इमेज द्वारा हल किया गया था। पुन: लंबित () रेंडर करने से पहले, अब लाइब्रेरी में सभी चित्र सम्मिश्रण के साथ तैयार किए गए हैं, इसलिए इसके साथ कोई समस्या नहीं होनी चाहिए
  3. जब मैंने OpenTK रेल पर दूसरा नियंत्रण स्थानांतरित किया, तो यह पता चला कि पहला नियंत्रण तब अपने कार्यों को पूरा करना बंद कर दिया गया था, तत्वों को चित्रित करने से पहले OnPaint में MakeCurrent पद्धति को कॉल करके निर्णय लिया गया था
  4. TextPrinter (DrawString का आधार) कभी-कभी क्रैश होता है जब टेक्स्ट प्रदर्शित होता है, तो कुछ भी नहीं करना है - वर्ग छोटी गाड़ी है और रेंडरिंग गुणवत्ता, फ़ॉन्ट और फ़ॉन्ट आकार के कुछ संयोजनों पर यह क्रैश हो जाता है, मुझे फ़ॉन्ट और आकार चुनना था
  5. आपको यह भी ट्रैक करने की आवश्यकता है कि नियंत्रण ने लोड किया है और केवल OpenTK / GLGraphics के साथ काम करने के बाद, और यह भी सत्यापित करें कि नियंत्रण डिज़ाइनर मोड में नहीं है
  6. नियंत्रण का आकार बदलते समय, GLGraphics को कॉल करना याद रखें। आकार (चौड़ाई, ऊँचाई)


निष्कर्ष


बीएसडी लाइसेंस के तहत लाइब्रेरी GoogleCode पर है । अगर किसी को इसकी आवश्यकता है, तो इसे स्वास्थ्य के लिए उपयोग करें। लाइब्रेरी के साथ काम करने के तरीके को समझने के लिए, इसके साथ आने वाले नमूने के स्रोत कोड को देखें, यह बहुत सरल है:



ऊपर वर्णित सभी "क्षणों" को ध्यान में रखा जाता है।

मैं इस लाइब्रेरी का उपयोग बड़े पैमाने पर उपयोगकर्ता के उद्देश्य से उत्पादों के लिए नहीं करूंगा - यह इसके लिए बहुत छोटा है, लेकिन यह उपयोगिताओं में उपयोग के लिए काफी उपयुक्त है।

फिलहाल, पुस्तकालय के विकास के लिए मेरी कोई योजना नहीं है - इसकी पर्याप्त कार्यक्षमता है। लेकिन बग फिक्स और पैच का स्वागत है :)



OpenTK मंच पर मैंने जो पढ़ा है, उसे देखते हुए, TextPrinter (पाठ प्रदर्शित करने के लिए उपयोग किया जाता है) को भविष्य में पुस्तकालय से बाहर रखा जाएगा, लेकिन संभवतः एक अलग परियोजना में। इसलिए उनका भाग्य अभी भी अस्पष्ट है। यह अब डिप्रेकेटेड स्थिति में है, इसलिए यह लाइब्रेरी को संकलित करते समय चेतावनी देता है।



अब मानचित्र संपादक बहुत तेजी से काम करता है और कुछ भी धीमा नहीं करता है, जो कि मैं आपके लिए चाहता हूं!



UPD: OpenTK वेबसाइट का लिंक प्रदान करना भूल गया

UPD2: नमूने के स्रोत कोड में पथों के साथ एक बग तय किया गया है (संग्रह और SVN में दोनों)



All Articles