पर वर्कअराउंड मेरे पास एक SharpDX प्रोजेक्ट है जो बहुत करीब है। यह बातचीत के लिए एक किनेक्ट का उपयोग करता है। इस वजह से मेरी परियोजना किनेक्ट क्षेत्र और KinectUserViewer ऑब्जेक्ट दोनों के लिए WPF का उपयोग करती है। SharpDX ने अब तक सब कुछ के लिए बहुत अच्छा काम किया है, हालांकि, जब यह प्रोग्राम के एक निश्चित हिस्से में जाता है जो प्रत्यक्ष 3 डी का उपयोग करता है, तो यह झिलमिलाहट शुरू होता है। यह स्पष्ट रूप से इस तथ्य से जुड़ा हुआ है कि D3Dimage (MainWindow.xaml में SharpDXElement द्वारा उपयोग किया गया) "WPF में कुशल D3D प्रतिपादन के लिए मौलिक रूप से टूटा और अनुपयुक्त" हो सकता है "[1]। क्या मेरे डब्ल्यूपीएफ तत्वों को रखने का कोई तरीका है और प्रत्यक्ष 3 डी के साथ झटका नहीं है?SharpDXElement विकल्प की आवश्यकता है। SharpDX WPF flickering
उत्तर
फ़्लिकरिंग संभवतः इंगित करता है कि डी 3 डीमेज इसे अपने फ्रंट बफर पर कॉपी करने की कोशिश करने से पहले जीपीयू फ्रेम को प्रस्तुत नहीं कर रहा है। यह आसानी से डब्ल्यूपीएफ में हो सकता है क्योंकि डब्ल्यूपीएफ एक फ्रेम प्रस्तुत करने के लिए एक स्वैप श्रृंखला में प्रस्तुत करने के मानक तंत्र का उपयोग नहीं करता है। - मुझे लगता है कि फाइल में Device.Flush()
नहीं दिख रहा है, लेकिन मुझे लगता है कि यह फोन करने के कोड में है
// rendering code
Device.Flush(); // or equivalent, depending on Direct3D version used
D3DImage.Lock();
D3DImage.AddDirtyRect(...);
D3DImage.Unlock();
कम से कम पैटर्न SharpDXElement.InvalidateRender
द्वारा पीछा किया है कि: इसके बजाय, सबसे कोड निम्नलिखित की तरह कुछ का उपयोग करता है।
समस्या यह है कि Device.Flush()
तुल्यकालिक नहीं है। यह हल्के जीपीयू लोड के लिए ठीक काम करता है - लॉक/अनलॉक कोड समाप्त होने से पहले जीपीयू खत्म हो जाता है - लेकिन भारी भार के लिए यह अक्सर प्रतिपादन समाप्त नहीं होता है, जिसके परिणामस्वरूप कम से कम कुछ फ्रेम के लिए एक खाली फ्रेम होता है। यह झिलमिलाहट के रूप में प्रकट होता है।
ओपन सोर्स के बारे में अच्छी बात यह है कि आप कोड को संशोधित कर सकते हैं। , कि कम कर देता है या अपने झिलमिलाहट समाप्त तो
D3DImage.Lock();
Thread.Sleep(2); // 2ms
D3DImage.AddDirtyRect(...);
D3DImage.Unlock();
यह आपकी समस्या है: इस समस्या को सत्यापित करने और एक आसान (hackish) समाधान प्रदान करने के लिए, GPU के थोड़ा और समय देने का प्रयास करें। डायरेक्ट 3 डी 10 या 11 के लिए कम से कम एक और समाधान, use query events as described in this question है।
विंडोज फॉर्म का उपयोग करने में समस्या यह है कि आप डब्ल्यूपीएफ एयरस्पेस मुद्दों (बच्चे की खिड़की से ऊपर खींचने के लिए डब्ल्यूपीएफ वस्तुओं की क्षमता की कमी) के साथ समाप्त होते हैं। Airspace issues can be fixed, लेकिन काम SharpDXElement को संपादित करने से काफी जटिल है।
मुझे एक ही समस्या थी, DeviceCreationFlags.SingleThreaded
ने मेरी मदद की।
समस्या लॉकिंग तंत्र नहीं है। आम तौर पर आप छवि प्रस्तुत करने के लिए आकर्षित करने के लिए Present
का उपयोग करते हैं। Present
सभी ड्राइंग तैयार होने तक प्रतीक्षा करेंगे। D3DImage के साथ आप Present()
विधि का उपयोग नहीं कर रहे हैं। प्रस्तुत करने के बजाय, आप एक गंदगी को जोड़कर लॉक करते हैं और D3DImage
अनलॉक करते हैं।
प्रतिपादन एसिंच्रोन किया जाता है ताकि जब आप अनलॉक कर रहे हों, ड्रॉ क्रियाएं तैयार नहीं हो सकती हैं। यह झिलमिलाहट प्रभाव पैदा कर रहा है। कभी-कभी आप आधा तैयार वस्तुओं को देखते हैं। एक खराब समाधान (मैंने परीक्षण किया है) अनलॉक करने से पहले एक छोटी देरी जोड़ रहा है। इससे थोड़ा सा मदद मिली, लेकिन यह एक साफ समाधान नहीं था। बिलकुल बकवास था!
समाधान:
मैं कुछ और के साथ जारी रखा; मैं एमएसएए (एंटीअलाइजिंग) के साथ समाप्त हो रहा था और पहली समस्या का सामना करना पड़ा; एमएसएए dx11/dx9 साझा बनावट पर नहीं किया जा सकता है, इसलिए मैंने एक नए बनावट (dx11) पर प्रस्तुत करने का निर्णय लिया और dx9 साझा बनावट में एक प्रतिलिपि बनाई। मैंने टेबल पर अपना सिर फिसल दिया, क्योंकि अब यह एंटी-एलाइज्ड था और फ्लिकिंग-फ्री !!
ऐसा लगता है कि थ्रैश कॉपी एक्शन इंतजार कर रहा है जब तक कि सभी ड्राइंग तैयार न हों (बेशक) अब यह ड्राइंग को पूरा करने में मदद करता है।
तो, बनावट की एक प्रति बनाकर:
DXDevice11.Device.ImmediateContext.ResolveSubresource(
_dx11RenderTexture, 0, _dx11BackpageTexture, 0, ColorFormat);
(_dx11BackpageTexture
साझा बनावट और _dx11RenderTexture
MSAA DX11 बनावट है) जब तक प्रतिपादन के लिए तैयार है और एक प्रतिलिपि बना देगा इंतजार करेंगे।
यह कैसे मैं अस्थिर से छुटकारा मिला है ....
ब्रिलियंट। कोशिश करने के लिए जा रहे हैं। वर्षों से डीएक्स 11/डीएक्स 9 झिलमिलाहट से पीड़ित हो गए हैं और इतने सारे हैक्स/कामकाज की कोशिश की है ... –
- 1. SharpDX
- 2. SharpDX बनाम SlimDX?
- 3. विश्वसनीय/लगातार आउटबाउंड सॉकेट की आवश्यकता है, विकल्प?
- 4. नामांकित इकाई ग्राफ जॉइन परिणाम (विशिष्ट विकल्प की आवश्यकता है)
- 5. ग्रंट की आवश्यकता है
- 6. इस WPF प्रोग्राम में ईवेंट-ट्रिगरिंग को समझने की आवश्यकता है। ।
- 7. RAILS_ROOT की आवश्यकता है?
- 8. क्यों "{} \" की आवश्यकता है?
- 9. 'rubygems' की आवश्यकता है
- 10. आवश्यकता, आयात, आयात की आवश्यकता है
- 11. साइटकोर - लॉगिन की आवश्यकता है
- 12. कॉमन्स सीएलआई को समूहों की आवश्यकता है
- 13. की आवश्यकता होती है browserify
- 14. "प्रक्रिया" की आवश्यकता नहीं है
- 15. ट्विस्ट की आवश्यकता क्यों है?
- 16. उदाहरण की आवश्यकता है: ggplot2
- 17. $ रूट की आवश्यकता क्यों है?
- 18. प्रिंटवाइटर की आवश्यकता क्यों है?
- 19. स्कैनफ की आवश्यकता क्यों है?
- 20. क्यों वेक्टर की आवश्यकता है?
- 21. क्या एक्शनबार्सहेलॉक की आवश्यकता है?
- 22. एआईडीएल ट्यूटोरियल की आवश्यकता है
- 23. CGPointMake स्पष्टीकरण की आवश्यकता है?
- 24. डबल फ्लश की आवश्यकता है?
- 25. call_command तर्क की आवश्यकता है
- 26. फोनगैप + की आवश्यकता है जेएस
- 27. time.sleep पूर्णांक की आवश्यकता है?
- 28. node.js विरासत की आवश्यकता है?
- 29. टाइपफ़ोफ़ की आवश्यकता क्यों है?
- 30. WPF में WebBrowser नियंत्रण के विकल्प?
आप कुछ संबंधित कोड दिखाने सकते हैं? यह इस तरह के प्रश्न का उत्तर देने पर आप कहां हैं, यह देखने में काफी मदद मिलेगी। – rfornal
इसमें कोड की 15000 से अधिक लाइनें हैं। प्रासंगिक कोड खोजना मुश्किल है। यह ड्रॉ और अपडेट लूप के लिए toolkit.game क्लास का उपयोग करता है। मैं मुख्य रूप से स्प्राइटबैच का उपयोग करता हूं लेकिन इसके कुछ भाग प्रश्न में भाग सहित xna और direct3D दोनों का उपयोग करते हैं। क्या विशेष रूप से कोई हिस्सा है जो आपको लगता है कि मदद करेगा? – Asor
कहें, मैंने आपके लिंक पर एक नज़र डाली और जब मैंने आपके उद्धरण के संदर्भ को देखा, तो उन्होंने विंडोज फॉर्म का उपयोग करके सीमित वर्कअराउंड का भी उल्लेख किया। अगर मैं वर्कअराउंड समझ गया, तो यह अनिवार्य रूप से डी 3 डीमेज प्रतिस्थापन क्षेत्र में एक विंडोज फॉर्म होस्ट करेगा - और मुझे लगता है कि * केवल * वह क्षेत्र XAML तत्वों का उपयोग करने में सक्षम नहीं होगा। क्या वह काम तुम्हारे लिये होगा? या क्या मुझे कामकाज की प्रकृति के बारे में कुछ याद आ रहा है? –