यदि आप MonoGame API और अंतर्निहित ग्राफ़िक्स API दोनों का उपयोग करते हैं तो क्या समस्याएं हो सकती हैं?


10

यदि वे मोनोगेम के साथ एक गेम बना रहे थे और अंतर्निहित ग्राफिक्स एपीआई के साथ-साथ कॉल करना शुरू कर रहे थे, तो किस प्रकार की समस्याएं हो सकती हैं?

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

मैंने Google और GD.SE साइट के माध्यम से थोड़ा शोध करने की कोशिश की और मुझे बहुत कुछ नहीं मिला। हो सकता है कि मोनोमेग ने वास्तव में अपने अधिकांश ठिकानों को कवर किया हो, लेकिन क्या होगा अगर मैं मैन्युअल रूप से इसके किसी एक मुद्दे पर काम करना चाहता हूं या एक ऐसी सुविधा जो अभी तक लागू नहीं हुई है?

यदि हां, तो किस प्रकार की समस्याएं उत्पन्न हो सकती हैं और क्या इन मुद्दों को कम करने में मदद करने के लिए कोई उपाय हैं?

जवाबों:


12

ज्यादातर मामलों में ये समस्याएं "अपरिभाषित व्यवहार" की श्रेणी में आती हैं (सी ++ अर्थ में नहीं, बल्कि अधिक स्पष्ट समझ में)।

आप जो कर रहे हैं वह अनिवार्य रूप से मोनोमेग द्वारा प्रदान की गई अमूर्तता को दरकिनार करना है (उदाहरण के लिए, यह पाठ्यक्रम मूल रूप से ऐसे किसी भी उच्च-स्तरीय एपीआई पर लागू होता है)। ऐसा करने पर, आप क्लास के इनवायर्नेंट गारंटियों का उल्लंघन कर सकते हैं, जिसका अर्थ यह है कि मानगोम लेखक अपने कोड को लिखने में सक्षम थे जिसके तहत अब सच नहीं हो सकता है और कोड अप्रत्याशित रूप से व्यवहार कर सकता है। आपका अपना कोड अब अमूर्त की अपरिवर्तनीय गारंटी पर निर्भर नहीं रह सकता है, या तो, क्योंकि आपने उन्हें तोड़ दिया है।

इस अप्रत्याशित व्यवहार में संभावित रूप से सरल रेंडरिंग कलाकृतियों से लेकर क्रैश या मेमोरी भ्रष्टाचार जैसे व्यवहार का संपूर्ण सरगम ​​शामिल होगा।

  • उदाहरण के लिए, यदि आप मोनो-लैम के चारों ओर अंत में कुछ रेंडरिंग एपीआई स्टेट के साथ फिडेल करते हैं, तो यह उस राज्य परिवर्तन का पता लगाने में सक्षम नहीं हो सकता है (क्योंकि यह परिवर्तनों के लिए अंतर्निहित एपीआई को प्रदूषित नहीं करेगा, यह बस इसके लिए अधिक कुशल है। यह मान लें कि यह एपीआई को नियंत्रित करने वाला है और उन परिवर्तनों को ट्रैक करता है)। नतीजतन, यह अगले रेंडर पास पर निर्णय ले सकता है, कि इसे कुछ अद्यतन करने की आवश्यकता नहीं है जिसे वास्तव में अपडेट किया जाना चाहिए और आपका दृश्य सही ढंग से प्रस्तुत नहीं हो सकता है।

  • या आप अंतर्निहित एपीआई के साथ गड़बड़ कर सकते हैं और कुछ डिवाइस ऑब्जेक्ट (डी 3 डी मानकर) के संदर्भ गणना में बदलाव कर सकते हैं, जिसका अर्थ है कि यह समय से पहले मोनोगो के तहत जारी किया जा सकता है या गलती से जारी नहीं किया जा सकता है, जिसके परिणामस्वरूप संभावित दुर्घटना या संसाधन रिसाव हो सकता है।

  • या आप कुछ ऐसा कर सकते हैं जो काम करता है, लेकिन क्योंकि आप एक असमर्थित तरीके से और अनपेक्षित सुविधाओं या अप्रत्याशित पहुंच पैटर्न के साथ काम कर रहे हैं, तो आप अगले रिलीज़ पर अपने कोड को बुरी तरह से तोड़ सकते हैं।

  • या आप कुछ कर सकते हैं, यह कुछ संस्करणों के लिए ठीक काम करता है, लेकिन बाद में आप किसी अन्य बग में भाग लेते हैं और इसे नीचे ट्रैक करने में कठिनाई होती है, इसलिए आप मोनोओम लोगों से मदद मांगते हैं, शायद एक बग रिपोर्ट में भेजते हैं क्योंकि आपको यकीन है कि इसके उनके कोड में एक समस्या है। वे निश्चित रूप से बग को पुन: उत्पन्न नहीं कर सकते हैं, और अंततः यह पता चलता है कि आप इस अजीब प्रत्यक्ष-पहुंच हैकरी कर रहे हैं और उस बिंदु पर - चाहे आपका हैकरी बग का मूल कारण है या नहीं - वे शायद आप अपने फिक्स पर संसाधनों को खर्च करना बंद कर देंगे क्योंकि आप एक असमर्थित काम कर रहे हैं (या कम से कम, वे संभवतः आपको प्राथमिकता देंगे)।

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

आदर्श रूप से आप इस तरह की चीज़ से पूरी तरह बचेंगे, हालाँकि।


3

मैं जोश के जवाब से पूरी तरह सहमत हूं लेकिन मैं कुछ विचार जोड़ना चाहूंगा।

मोनोगेम का उद्देश्य एक्सएनए एपीआई को कई प्लेटफार्मों पर लाना है। यदि आप सीधे OpenTK का उपयोग कर रहे हैं, तो आप अपने आप को केवल उन प्लेटफार्मों तक ही सीमित कर रहे हैं, जो इसका समर्थन करते हैं। इसलिए, आप अमूर्त का उपयोग करने के मुख्य लाभों में से एक को ढीला कर सकते हैं।

यदि आप अपने आप को कुछ ऐसा करने की चाहत रखते हैं जो मोनोमेग का समर्थन नहीं करता है या दस्तावेज़ीकरण खोजने में परेशानी नहीं कर रहा है, तो सबसे पहले विशिष्ट प्रश्न पूछें कि आप क्या करने की कोशिश कर रहे हैं। आप पा सकते हैं कि यह पहले से ही करने का एक तरीका है या शायद यह एक नियोजित सुविधा है जिसे अभी तक लागू नहीं किया गया है।

इस पर चर्चा करने के बाद, यह हो सकता है कि आप, या कोई और, सभी के लाभ के लिए मोनोगैम में गायब सुविधाओं को लागू कर सकता है।


3

उन दो विचारों के संयोजन पर आने वाली समस्याओं को कम करने के तरीके के संबंध में:

मोनोगेम खुला स्रोत है, इसे सीधे संशोधित करें और आपको दोनों के उपयोग से समस्याओं के बारे में चिंता करने की आवश्यकता नहीं है।

यदि आपको लगता है कि आपको इसमें अतिरिक्त सामान की आवश्यकता है, तो हर तरह से: एक कांटा बनाएं। उस आधार कोड का उपयोग करें और उसमें अपना शीर्ष जोड़ें। पुनः संयोजक मोनोमेग और वहां आप जाते हैं। यह भी आपको मोनोमेग कांटा अपडेट करने देगा जब यह अपडेट हो जाएगा (निश्चित रूप से आपको प्रक्रिया में उत्पन्न होने वाले किसी भी संघर्ष को ठीक करना होगा)।


जिसने भी वोट दिया, कृपया अपना कारण बताएं, इसलिए मैं अगली बार सीख सकता हूं यदि आपको लगता है कि मैंने कुछ गलत लिखा है।
टिमोटी

1
यह प्रश्न का उत्तर कैसे देता है?

1
ठीक है, कोई भी उन दो (मोनोगेम + अंडरलाइनिंग एपीआई) के संयोजन से उत्पन्न होने वाली किसी भी समस्या को सीधे मोनोगेम स्रोत (यानी एक ही स्थान पर) को संशोधित करके कर सकता है। कृपया अपने अंतिम प्रश्न पर ध्यान दें: "यदि ऐसा है तो किस प्रकार की समस्याएं उत्पन्न हो सकती हैं और क्या इन मुद्दों को कम करने में मदद करने के लिए कोई उपाय हैं?"
टिमोटी

अच्छी बात है टिमोटी, मैंने एक छोटा सा संपादन किया है ताकि यह स्पष्ट हो सके कि आपका उत्तर क्या है।
MichaelHouse

मुझे यह बात पसंद है। मुझे लगता है कि वास्तव में एक फीचर को लागू करने के लिए मोनोगेम के भीतर एक उपयुक्त स्थान खोजने का प्रयास करने से अधिक समझदारी होगी, विशेष रूप से इसे अपने गेम लाइब्रेरी में लागू करना होगा। मोनोगेम को ठीक से नहीं समझने और फिर भी इसे गलत तरीके से लागू करने के स्पष्ट नुकसान हैं लेकिन यह पूरी तरह से एक और समस्या है।
स्पार्टनडोनट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.