विंडोज़ पर ग्राफिक्स रैम सीधे प्राप्त करने का कोई तरीका नहीं है, विंडोज़ आपको ऐसा करने से रोकती है क्योंकि यह प्रदर्शित होने पर नियंत्रण बनाए रखती है।
हालांकि, आप डायरेक्टएक्स डिवाइस बना सकते हैं। बैक बफर सतह प्राप्त करें और फिर इसे लॉक करें। लॉक करने के बाद आप इसे जो कुछ भी चाहते हैं उसे भर सकते हैं और फिर अनलॉक कर सकते हैं और कॉल कर सकते हैं। यह धीमा है, हालांकि, आपको मुख्य मेमोरी में बस में वीडियो मेमोरी की प्रतिलिपि बनाना है। कुछ कार्ड्स "swizzled" प्रारूपों का भी उपयोग करते हैं, जिन्हें प्रतिलिपि बनाने के लिए इसे अनजान करना पड़ता है। इसमें ऐसा करने के लिए और समय लगता है और कुछ कार्ड आपको इसे करने से भी रोक देंगे।
आम तौर पर आप सीधे वीडियो कार्ड तक पहुंचने से बचने और विंडोज/डायरेक्टएक्स को आपके लिए ड्राइंग करने देना चाहते हैं। D3D1x Im के तहत 'सुनिश्चित करें कि आप इसे IDXGIOutput के माध्यम से कर सकते हैं। यह वास्तव में कोशिश करने और इससे बचने के लिए कुछ है ...
आप मानक win32 (यह उदाहरण सी मानता है) के माध्यम से एक रैखिक सरणी में लिख सकते हैं लेकिन इसमें काफी शामिल है।
सबसे पहले आपको रैखिक सरणी की आवश्यकता है।
unsigned int* pBits = malloc(width * height);
फिर आपको बिटमैप बनाने और डीसी में इसे चुनने की आवश्यकता है।
HBITMAP hBitmap = ::CreateBitmap(width, height, 1, 32, NULL);
SelectObject(hDC, (HGDIOBJ)hBitmap);
फिर आप कृपया पीबीआईएस सरणी भर सकते हैं। जब आप समाप्त कर लेंगे तो आप बिटमैप की बिट्स सेट कर सकते हैं।
::SetBitmapBits(hBitmap, width * height * 4, (void*)pBits)
जब आप अपने बिटमैप का उपयोग कर इसे (DeleteObject प्रयोग करके) और मुक्त अपने रैखिक सरणी नष्ट करने के लिए मत भूलना समाप्त हो गया है!
संपादित करें: वीडियो रैम को विश्वसनीय रूप से प्राप्त करने का केवल एक ही तरीका है और यह डीएक्स डायग इंटरफेस के माध्यम से जाना है। डीएक्स एसडीके में IDxDiagProvider और IDxDiagContainer पर एक नज़र डालें।
क्या आप ग्राफिक्स एडाप्टर पर ** ** ग्राफिक्स रैम एक्सेस करना चाहते हैं ** या ** ** रैम ** प्राप्त करें? – atzz
बस ग्राफिक्स रैम की मात्रा चाहते हैं। – amritad