में लक्ष्य प्रस्तुत करने से पिक्सेल डेटा पढ़ें, मैंने डिवाइस को प्रस्तुत करने के रूप में texture2d
सेट किया है। ड्रॉ के बाद, मैं सीधे रेंडर लक्ष्य से पिक्सेल कैसे पढ़ और लिख सकता हूं, और फिर इसे प्रस्तुत कर सकता हूं।d3d11
d3d11
उत्तर
आपका मंतव्य एक और शेडर के लिए एक इनपुट के रूप में उपयोग करने के लिए है, तो: - बस आप D3D11_BIND_RENDER_TARGET और D3D11_BIND_SHADER_RESOURCE साथ texture2D बनाई गई हैं।
- बनावट को लक्ष्य प्रस्तुत करने और इसे प्रस्तुत करने के रूप में बनायें।
- इसे एक प्रस्तुत लक्ष्य के रूप में अनइंड करें और इसे एक शेडर संसाधन के रूप में बांधें और इसे अगले शेडर में उपयोग करें।
- बस ध्यान दें कि एक बनावट को एक ही समय में लक्ष्य और संसाधन के रूप में बाध्य नहीं किया जा सकता है।
यदि आपका इरादा सी ++ का उपयोग कर सीपीयू पर बनावट को पिक्सेल की सरणी के रूप में उपयोग करना है, तो आपको कुछ काम करना होगा। दुर्भाग्यवश, वर्तमान जीपीयू आर्किटेक्चर के कारण, सीधे texture2D के पिक्सेल तक पहुंचना संभव नहीं है क्योंकि पिक्सल वास्तव में एक विशेष प्रारूप (स्विज्ड प्रारूप) में जीपीयू मेमोरी क्षमता में रहते हैं।
- जीपीयू में एक बनावट बना सकते हैं।
- एक स्टेजिंग बनावट (D3D11_USAGE_STAGING) बनाएं जिसका उपयोग GPU के आउटपुट को प्राप्त करने के लिए किया जाएगा।
- GPU बनावट को प्रस्तुत करें।
- जारी करना एक ID3D11DeviceContext :: CopyResource() या ID3D11DeviceContext :: CopySubresource()
- कॉल ID3D11DeviceContext :: मानचित्र() मचान संसाधन पर पिक्सल के लिए उपयोग मिलता है।
- स्टेजिंग संसाधन पर ID IDD11DeviceContext :: Unmap() पर कॉल करें।
- कॉल ID3D11DeviceContext :: UpdateSubresource() GPU के संसाधन के संस्करण को अद्यतन करने के लिए।
जैसा कि आप देख सकते हैं कि यह निश्चित रूप से संचालन का एक छोटा सा सेट नहीं है और आज के जीपीयू आर्किटेक्चर को अनुकूलित करने के लिए अनुकूलित किया गया है। मैं निश्चित रूप से इसकी सिफारिश नहीं करता।
आप इस मार्ग नीचे जा रहा खत्म करते हैं, तो भी सभी पर्फ़ चिंताओं GPU स्मृति वापस पढ़ें के बारे में अवश्य पढ़ लें आता है के साथ: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205132(v=vs.85).aspx#Performance_Considerations
आप पिक्सल सीपीयू को वापस पढ़ें मतलब है, या इनपुट के रूप में करने के लिए एक और शेडर? – jcoder