أربعة أعطال مختلفة في GameLoop تُسمّى كلها خطأ DirectX
رسائل Failed to initialize DirectX وDXGI_ERROR_DEVICE_HUNG وDXGI_ERROR_DEVICE_REMOVED تصف أعطالاً غير مترابطة. قراءة الرسالة تحدد الحل، والتخمين يضيّع سهرة كاملة.
DirectX هي الطبقة التي يرسم GameLoop من خلالها، ولهذا فإن أي خلل تقريباً بين المحاكي وكرت الشاشة يظهر ومعه كلمة DirectX في الرسالة. لكن هذا لا يجعل الأعطال مترابطة. أربعة أعطال منفصلة تتشارك الاسم نفسه، ونص الرسالة هو الشيء الوحيد الذي يفصل بينها.
| الرسالة | ما تعنيه فعلاً |
|---|---|
| Failed to initialize DirectX 11/12 | جهاز العرض لم يُنشأ أصلاً — تعريف، أو كرت شاشة لا يستطيع تنفيذ المطلوب |
GetDeviceRemovedReason failed، DXGI_ERROR_DEVICE_HUNG | كرت الشاشة توقف عن الاستجابة في منتصف الإطار وأعاد Windows ضبط التعريف |
| Your PC does not support DirectX 11 | تقرير قدرات، صادق أو كاذب، قادم من التعريف |
DXGI_ERROR_DEVICE_REMOVED | كرت الشاشة اختفى كلياً — انهيار تعريف، أو ترددات غير مستقرة، أو الطاقة |
أعطال التهيئة
هذا يظهر قبل ظهور اللعبة، وتعريف الرسوميات هو الجواب المعتاد. خذ التعريف من موقع الشركة المصنِّعة لكرت الشاشة نفسها بدل Windows Update، ثبّت، ثم أعد التشغيل.
وإن لم يتغير شيء، أنزل وضع العرض في GameLoop من DirectX 12 إلى DirectX 11 في إعدادات المحرك. فدعم DX12 على العتاد الأقدم من 2018 موجود كثيراً على الورق وغير مستقر عملياً، والرسوميات المدمجة هي الضحية الأكثر شيوعاً. وOpenGL هو البديل التالي تحته.
شغّل dxdiag قبل أن تفترض عطلاً في العتاد. فتبويب System يذكر نسخة DirectX المستخدمة. وإن قال 12 بينما يصرّ GameLoop على أن جهازك لا يدعم 11، فالعتاد سليم والتعريف لا يكشف مستوى الميزات كما ينبغي — احذفه من Device Manager وثبّت النسخة الحالية من الشركة المصنِّعة تثبيتاً نظيفاً.
Device hung وdevice removed
يستحق هذان الفصل عن التهيئة لأنهما يقعان أثناء اللعب، ولأن أياً منهما ليس عطلاً في GameLoop حقاً.
DEVICE_HUNG هو آلية Timeout Detection and Recovery في Windows وهي تؤدي عملها: كرت الشاشة عجز عن إرجاع إطار في الوقت المحدد، فأُعيد ضبط التعريف من تحت التطبيق. والحرارة الزائدة، وكسر السرعة غير المستقر، وتحديث تعريف طُبِّق نصف تطبيق، هي الأسباب الثلاثة التي تنتجه بانتظام. أعد أي إزاحة في تردد النواة أو الذاكرة إلى قيمها الأصلية، وراقب الحرارة تحت الحمل، وإن كان التعريف قد حُدِّث فوق تعريف قديم فأزله إزالة نظيفة ببرنامج Display Driver Uninstaller — من موقع مطوّره نفسه — في الوضع الآمن قبل إعادة التثبيت.
أما DEVICE_REMOVED فهو ابن العم الأشد: كرت الشاشة صار غير متاح كلياً. الفحصان الأولان نفسهما، يُضاف إليهما تغذية الطاقة. ويسجّل Windows Event Viewer، تحت Windows Logs ثم System، تفاصيل على مستوى التعريف مقابل مصادر باسم nvlddmkm على NVIDIA وamdkmdap على AMD. وتصفية هذه المصادر حول توقيت الانهيار تخبرك أكثر مما تخبرك أي قائمة حلول عامة.
حين لا توجد رسالة إطلاقاً
خروج GameLoop بصمت بعد شاشة التحميل هو غالباً عطل DirectX نفسه مع كتم نافذة الرسالة. وسجل Application في Event Viewer، إن قرأته عند توقيت الانهيار، يحتوي عادةً على رمز الخطأ الحقيقي. وقبل ذلك، فحصان زهيدان: عطّل تحسينات ملء الشاشة من تبويب Compatibility في الاختصار، وأصلح حزم Visual C++ Redistributable من إعدادات Windows ثم Apps ثم Installed apps — فترجمة الشيدرات من أوائل ما يفشل حين تتلف مكتبة تشغيل.
ما لا يُصلحه
إعادة تثبيت DirectX 12. لا يوجد شيء يُعاد تثبيته. فهو مكوّن في Windows، لا حزمة قابلة لإعادة التوزيع.
تعديل TdrDelay في السجل. إطالة مهلة كرت الشاشة تمنع Windows من الإبلاغ عن التوقف. لكن الكرت توقف فعلاً. وهذا يخفي مشكلة حرارية أو مشكلة تعريف بدل حلّها، وعلى كرت غير مستقر فعلاً يحوّل إعادة ضبط قابلة للتعافي إلى سطح مكتب مجمَّد.
إعادة تثبيت GameLoop لخطأ device removed. المحاكي هو العملية التي صادف أنها كانت تعمل حين سقط كرت الشاشة من الناقل. وإعادة تثبيته لا تعالج شيئاً.
التراجع عن تحديث Windows بشكل انعكاسي. هذه خطوة مشروعة حين يبدأ الخطأ خلال يوم أو يومين من تحديث KB بعينه ويكون التعريف محدّثاً أصلاً. أما كردّ أول على أي رسالة DirectX فهي إجراء كبير ومربك ونسبة نجاحه منخفضة.