मुझे Direct3D9 :: CreateDevice() में विफलता के कारण कोई समस्या है। यह विफल रहता है जब निम्न कोड को विंडोज 7 के तहत लॉक स्क्रीन के साथ निष्पादित किया जाता है। आवश्यकताओं के कारण, स्क्रीन लॉक होने पर मुझे डिवाइस बनाने में सक्षम होना चाहिए।डी 3 डी डिवाइस विफलता
मुझे D3DERR_INVALIDCALL त्रुटि मिलती है जब CreateDevice को निम्न पैरामीटर के साथ बुलाया जाता है। मैंने एचडब्ल्यूएनडी के इस्तेमाल के साथ बड़े पैमाने पर प्रयोग किया है, और दो बार जांच की है कि यह मान्य है। मैंने प्रेजेंटेशन पैरामीटर में कोई फायदा नहीं होने के लिए विभिन्न बदलावों का भी प्रयास किया है। किसी को भी इसका सामना करना पड़ा या अमान्य कॉल रिटर्न के कारण क्या हो सकता है इसका बेहतर विचार है?
फिर, यह विफलता केवल लॉक स्क्रीन के साथ होती है, जब किसी अन्य परीक्षण स्थिति में चलाया जाता है, तो यह सफल होता है।
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp, sizeof(D3DPRESENT_PARAMETERS));
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.Windowed = TRUE;
HWND focusWndHnd = GetConsoleWindow();
if (focusWndHnd == NULL && pp.hDeviceWindow == NULL)
{
focusWndHnd = ::GetDesktopWindow();
}
IDirect3DDevice9* pd3dDevice;
IDirect3D9* pD3D = Direct3DCreate9(D3D_SDK_VERSION);
hr = pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_NULLREF, focusWndHnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE, &pp, &pd3dDevice);
यह मुझे स्पष्ट नहीं है कि डिवाइस निर्माण के लिए लॉक स्क्रीन क्यों विफल होनी चाहिए, विशेष रूप से जब स्क्रीन पर कोई वास्तविक निर्भरता न हो तो NULLREF मोड में चलाएं। डायरेक्टएक्स के मेरे उपयोग में स्क्रीन पर प्रतिपादन करने के लिए कुछ भी नहीं है, इसलिए अनलॉक करने के लिए स्क्रीन की प्रतीक्षा करना दुर्भाग्य से एक विकल्प नहीं है। –
विरासत डायरेक्ट 3 डी 9 इंटरफ़ेस 'सुरक्षित डेस्कटॉप' को खोए गए डिवाइस परिदृश्य के रूप में मानता है। डायरेक्ट 3 डी (डायरेक्ट 3 डी 9ईएक्स, डायरेक्ट 3 डी 10.x, या डायरेक्ट 3 डी 11.x) के डब्लूडीडीएम जागरूक संस्करण का उपयोग इस समस्या से बच जाएगा। –
@ChuckWalbourn D3d9Ex मेरे लिए काम किया। यदि आप पूर्ण टिप्पणी पर अपनी टिप्पणी को बढ़ावा देते हैं तो मैं आपको उखाड़ दूंगा :) –