लोगों का एक बहुत सोचने के लिए ग्राफिक्स पारंपरिक TDD/unittesting से अभेद्य होते हैं लगते हैं। यह सच नहीं है।
टीडीडी के आस-पास के मुद्दे ये हैं कि छवियां हमेशा बिल्कुल समान नहीं होंगी। एंटीअलाइजिंग सेटिंग्स जैसी चीजें (जिन्हें ड्राइवर सेटिंग्स द्वारा ओवरराइड किया जा सकता है)। अलग-अलग GPUs एक ही छवि को प्रस्तुत करने के बीच अंतर (बहुभुज अवांछित आदेश और ऐसे)। साथ ही जैसे आपका गेम विकास की चीजों के माध्यम से जाता है जैसे मैश और बनावट बदल सकते हैं या tweaked हो सकता है।
इसके अलावा लोगों को लगता है कि आप अक्सर यह करते हैं और अगर ठीक है तो उत्तीर्ण करने के लिए परीक्षण का मामला (जो उपरोक्त मुद्दों की वजह से टूट जाएगा) के रूप में जोड़ने को देखने के लिए पहले परिणाम नजर डालने के लिए की जरूरत है।
आप सभी ओपनजीएल कॉल लॉगिंग वाले लोगों को लपेट सकते हैं और यह सुनिश्चित कर सकते हैं कि चीजों को अपेक्षित कहा जाता है, लेकिन यह परीक्षण नहीं करता है कि ग्राफिक्स वास्तव में वैध हैं, यह केवल परीक्षण करता है कि आपका प्रोग्राम कॉल कर रहा है, जिसे आप भविष्यवाणी करते हैं कि इसे बनाना चाहिए । यह बहुत उपयोगी नहीं है और यह काफी काम करेगा। अगर आप अनावश्यक ड्रॉ कॉल को अनुकूलित करने जैसी चीजें करते हैं तो इसे बनाए रखना मुश्किल होगा।
मैं क्या कर अपने विंडोइंग प्रणाली से अपने प्रतिपादन उत्पादन decoupling है की सिफारिश करेंगे। इसका मतलब है कि 'बनावट के लिए प्रस्तुत करें' या फ्रेमबफर ऑब्जेक्ट्स का उपयोग करें। यह व्यूपोर्ट्स और यूआई/एचयूडी ओवरले जैसी चीजों को करने में भी मदद करता है।
एक 'विंडो' वस्तु बनाओ। कुछ ऐसा जो क्यूटी, एसडीएल, एसएफएमएल, जीएलयूटी, या जो कुछ भी इस्तेमाल कर एक वास्तविक डेस्कटॉप विंडो खोलता है। और किसी तरह के एक रेंडरर में पास करें। आप कई प्रस्तुतकर्ताओं को अनुमति देने और आयताकार निर्देशांक निर्दिष्ट करने जैसी चीजें कर सकते हैं (आप स्क्रीन के कोने में एक अलग दृश्य प्रस्तुत कर सकते हैं)। या हो सकता है कि एक मास्टर रेंडरर हो लेकिन एक संस्करण का उत्तराधिकारी हो जो इसे सब्रेन्डर्स करने की अनुमति देता है। विंडो ऑब्जेक्ट इनपुट को भी संभाल सकता है, यह नकली/नकली इनपुट ऑब्जेक्ट इंजेक्ट करने का एक अच्छा तरीका प्रदान करता है, आप परीक्षण कर सकते हैं कि खिलाड़ी अपेक्षा के अनुसार आगे बढ़ता है या नहीं।
यह मॉड्यूलर दृष्टिकोण टीडीडी से बाहर निकलने वाली चीज है, यह आपके रेंडरर को अपने स्वयं के प्रस्तुतकर्ताओं को भी दे सकता है (शायद आप एक स्काईबॉक्स अलग से करना चाहते हैं, या किसी गेम में सुरक्षा मॉनीटर पर एक तस्वीर, प्रतिबिंब, छायाचित्र और इतने पर)। आप देशी डेस्कटॉप पर एक अलग रिज़ॉल्यूशन पर आसानी से प्रस्तुत कर सकते हैं (जो टीडीडी में एक निश्चित रिज़ॉल्यूशन सेट करने के लिए उपयोगी है और सरल संचालन के लिए 32x32 की तरह कुछ हो सकता है, लेकिन एंड्रॉइड जैसे उपकरणों के लिए भी उपयोगी है जहां संकल्प तय किए गए हैं और जीपीयू की अलग-अलग क्षमताएं हैं। नेक्सस 10 अपने एक्सडीपीआई में अपना गेम प्रस्तुत करने के लिए पर्याप्त नहीं है? इसे स्केल करें। लिनक्स/एक्सओआर के साथ भी मदद करता है जो हमेशा आपको GPU के सभी संकल्पों को सेट करने की अनुमति नहीं देता है, हालांकि अब कुछ समस्याएं कम हैं)।
एक बार जब आपका एफबीओ हो, तो कुछ फ़ंक्शंस पिक्सेल रंग क्वेरी करने के लिए करें। फिर आप अपने सभी बुनियादी परिचालनों से पूछ सकते हैं। क्या आपके मेष सही ढंग से प्रस्तुत करते हैं? झसे आज़माओ। एक सफेद त्रिकोण के साथ एक जाल बनाओ और पूछें कि आप किस स्थिति में सफेद दिखने की उम्मीद करेंगे और उस त्रिकोण को चित्रित करते समय काला रहना चाहिए। 1x1 विंडो में 1x1 त्रिकोण को% 50 को तिरछे रूप से कवर करना चाहिए ताकि परीक्षण पिक्सेल किनारे और बीच के दोनों किनारों, खिड़की की सीमाओं और पॉइंट बिट्स के पास हो। अगला combine two triangles into a rectangle और इसे स्क्रीन भरना चाहिए, अब सभी पिक्सेल सफेद होना चाहिए। अब इसे कैमरे से दूर ले जाने का प्रयास करें और जांचें कि सीमाएं काले हैं लेकिन केंद्र सफेद है, 1.0x1.0 आयत 1.0x1.0 विंडो में 1.0x पर एक साथ है, आप सीमाओं के बारे में देखने के लिए कुछ सरल ज्यामिति लागू कर सकते हैं खत्म होना चाहिए Test with a different color। एक बहुआयामी घन और परीक्षण रोटेशन के साथ एक और जटिल जाल बनाओ। एक परीक्षण सामान्य नक्शा बनाओ।
आप एक क्षेत्र को प्रतिपादित करके रोशनी का परीक्षण करने में सक्षम हो सकते हैं और बाईं तरफ दाएं तरफ से चमकदार जांच कर सकते हैं और यदि आप दूसरी तरफ एक और प्रकाश जोड़ते हैं तो वे समान हैं (बस सभी पिक्सेल जोड़ें बाएं और दाईं ओर सभी पिक्सल और त्रुटि के मार्जिन के भीतर तुलना करें)। प्रकाश चमक बढ़ाएं और देखें कि पिक्सल की मात्रा बढ़ जाती है या नहीं। आप एक फ्लैट विमान पर एक विशिष्ट बिंदु पर अपेक्षित रंग को काम करके प्रकाश एल्गोरिदम का परीक्षण कर सकते हैं। आप देख सकते हैं कि स्पेक्ट्रल हाइलाइटिंग अपेक्षित क्षेत्र में सबसे तेज है। आपके सामान्य/बंप मैपिंग make a test texture के लिए।
बस कुछ भी वास्तव में विशिष्ट से बचें, उदाहरण के लिए बिल्कुल किनारे पर परीक्षण न करें। वे एंटीअलाइज्ड या थोड़ा दूर हो सकता है। यदि आप प्रकाश के लिए बाएं/दाएं चमक का परीक्षण करने की तरह कुछ कर रहे हैं, तो पिक्सेल गिनती अलग-अलग प्रणालियों या यहां तक कि दोनों तरफ (सममित दृश्य में) पर समान संख्या होने की अपेक्षा न करें, त्रुटि मार्जिन का उपयोग करें। वास्तविक डेटा का उपयोग न करें, सुनिश्चित करें कि आप बुनियादी 'परीक्षण' बनावट और मेष का उपयोग करें जो बदले नहीं जाएंगे।