डी 3 डी / डीएक्सजीआई पूर्णस्क्रीन संक्रमण को संभालता है


9

मेरे पास एक डी 3 डी 11 एप्लिकेशन है, और मैं उचित फुलस्क्रीन सुपरपोर्ट जोड़ना चाहता हूं। अब मैं DXGI को अपनी विंडो को मेरे लिए फुलस्क्रीन पर स्विच करने दे सकता हूं, और मैं इस धारणा के तहत हूं कि DXGI स्वैप चेन को आगे और पीछे करने के बजाय स्वैप चेन फ्लिप करने के लिए आवश्यक सभी चीजों का ध्यान रखेगा।

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

फुलस्क्रीन विंडो और बाकी स्क्रीन पर दिखाए जा रहे डेस्कटॉप को दिखाने से पहले इसे आगे और पीछे स्विच करने में कुछ समय लग सकता है।

जाहिरा तौर पर मैं इसके साथ अकेला नहीं हूं, बैटलफील्ड 3 और वाह बहुत सारे लोगों के लिए समान मुद्दे हैं।

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

क्या मैं अपनी विंडो / स्वेपचैन को उचित, बफर-फ़्लिपिंग फ़ुलस्क्रीन मोड में ऊंचा करने के लिए कुछ भी कर सकता हूं?


इस लेखन के समय, वर्ल्ड ऑफ वॉरकॉन के वर्तमान संस्करण में अब आपके द्वारा उल्लिखित डिस्प्ले मोड कॉन्फ़िगरेशन मुद्दे / मेमोरी लीक नहीं हैं। वे निश्चित रूप से समस्याग्रस्त थे, लेकिन problem.३.२ के रूप में तय किया गया है
गेजरर

जवाबों:


3

मेरे ज्ञान के लिए, केवल एक चीज जो काम करती है:

 DwmEnableComposition(DWM_EC_DISABLECOMPOSITION);

आपके आवेदन की शुरुआत में और:

DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);

छोड़ने से पहले। संक्रमण के लिए, हमेशा की तरह आगे बढ़ें। मैंने InvalidateRect(NULL, NULL, true)फुलस्क्रीन पर स्विच करने के बाद ही कोई फायदा नहीं हुआ। उम्मीद है की यह मदद करेगा।


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

ध्यान दें कि विंडोज 8.1 और बाद में इस सेटिंग को अनदेखा करता है। आप DWM को अक्षम नहीं कर सकते।
वाल्कबर्न

1

आप वास्तव में इस मुद्दे का सामना करने वाले एकमात्र व्यक्ति नहीं हैं । जांच करने के लिए पहली बात: सुनिश्चित करें कि आप अपने द्वारा उपयोग किए जा रहे वीडियो कार्ड के लिए नवीनतम / बीटा / टॉप-नोच ड्राइवरों का उपयोग कर रहे हैं।

अब, मैं कहूंगा कि केवल एक छोटा सा मौका है कि आप इसे स्वचालित DXGI कार्यान्वयन से बेहतर काम कर सकते हैं। इस तरह का मुद्दा एडेप्टर विक्रेता, ड्राइवर संस्करण और मॉनिटर कॉन्फ़िगरेशन पर अत्यधिक निर्भर है। तो एक मशीन पर इसे ठीक करने से आप इसे और अधिक तोड़ सकते हैं।

मैं DirectX 9 के अंधेरे युग में लौटने के खिलाफ सलाह देता हूं जहां आपको हाथ से सब कुछ करना था। एक बेहतर विचार स्वचालित स्विचिंग को ठीक करने का प्रयास करना होगा। कुछ ट्रेल्स का पालन करने के लिए:

  • ध्यान से पढ़ें (विरल) प्रलेखन

  • यदि आप इसे पहले से नहीं कर रहे हैं, तो उस WM_SIZEघटना पर प्रतिक्रिया देने का प्रयास करें जो आपको यहां से / पूर्ण-स्क्रीन पर स्विच करने पर मिलती है, जैसा कि यहां वर्णित है । यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि आप कॉल करने से पहले बैक बफर के सभी संदर्भों को ठीक से जारी कर रहे हैं ResizeBuffers, जैसा कि वहां वर्णित है । ऐसा करने में विफल होने के कारण इस तरह के अजीब अर्ध-मुद्दे हो सकते हैं।

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

  • स्वैप प्रभाव और अपने स्वैप श्रृंखला विवरण की बफर गणना के साथ आसपास की कोशिश करें । आपको संभवतः उपयोग करना चाहिए DXGI_SWAP_EFFECT_SEQUENTIALऔर a BufferCount= = 2. हो सकता है कि आपके ड्राइवर को अधिक "विदेशी" विकल्पों के लिए खराब समर्थन मिले।


बफ़र्स का आकार बदलना ठीक रहता है। मैं भी सभी स्वैप प्रभाव की कोशिश की है, वे एक फर्क करने के लिए प्रतीत नहीं होता है, और मैं हमेशा 2 बफ़र्स का उपयोग किया है। मैं फुलस्क्रीन चीज़ की कोशिश करूँगा, (भले ही मुझे नहीं पता है कि "एन्यूमरेटेड डिस्प्ले मोड में से एक का उपयोग करके" का क्या अर्थ है - जब मैं WM_SIZE का जवाब देता हूं तो सभी मैं ResizeBuffers होता हूं, एक डिस्प्ले मोड को एक तर्क के रूप में पारित करने के लिए कहीं नहीं है। ), लेकिन मैंने अनायास विंडोज 8 स्थापित किया और क्या लगता है, मैं अभी समस्या को दोहरा नहीं सकता ..

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