سؤال

وانا من النوع أتساءل عن هذا، إذا قمت بإنشاء نسيج في الذاكرة في DirectX مع وظيفة CreateTexture:

HRESULT CreateTexture(
  UINT Width,
  UINT Height,
  UINT Levels,
  DWORD Usage,
  D3DFORMAT Format,
  D3DPOOL Pool,
  IDirect3DTexture9** ppTexture,
  HANDLE* pSharedHandle
);

... ويمر في شكل D3DFMT_UNKNOWN ما يفترض أن يحدث بالضبط؟ لو كنت في محاولة للحصول على سطح المستوى الأول أو الثاني فإن ذلك سيكون سببا خطأ؟ يمكن أن تفشل؟ سيقوم الجهاز الرسومات مجرد اختيار شكل عشوائي من اختيارها؟ يمكن أن يسبب هذا مشاكل بين نماذج بطاقة رسومات مختلفة / العلامات التجارية؟

هل كانت مفيدة؟

المحلول

وأنا فقط حاولت بها وأنها لا تفشل، معظمهم

وعندما يتم تعيين Usage إلى D3DUSAGE_RENDERTARGET أو D3DUSAGE_DYNAMIC، وجاء دائما على أنها D3DFMT_A8R8G8B8، بغض النظر عن ما فعلته لتنسيق مخزن مؤقت أو إعدادات أخرى. أنا لا أعرف إذا كان هذا له علاقة مع بطاقة الرسومات الخاصة بي أم لا. تخميني هو أن تحديد وسائل غير معروفة، "اختيار بالنسبة لي"، والذي شكل 32 بت هو أسهل لبطاقتي.

وعندما كان استخدام D3DUSAGE_DEPTHSTENCIL، إلا أنها أخفقت على الدوام.

وهكذا أفضل استنتاجي هو أن تحديد D3DFMT_UNKNOWN كتنسيق يعطي دايركت لاختيار ما ينبغي أن يكون. أو ربما دائما التخلف فقط لD3DFMT_A8R8G8B.

للأسف، لا يمكنني أن أؤكد أي شيء من هذا في أي وثائق في أي مكان. : |

نصائح أخرى

MSDN لا يقول . ولكن أنا متأكد من أنك ستحصل على "D3DERR_INVALIDCALL" نتيجة لذلك.

<اقتباس فقرة>   

إذا نجح الأسلوب، وعودة   القيمة D3D_OK. إذا فشل الأسلوب،   يمكن أن تكون قيمة الإرجاع واحدة من   التالية: D3DERR_INVALIDCALL،   D3DERR_OUTOFVIDEOMEMORY،   E_OUTOFMEMORY.

وأعتقد أن هذا يندرج تحت فئة "غير معروف". سوف تفشل بعض السائقين المخصصات، في حين أن البعض الآخر قد الافتراضي إلى شيء. أنا لم أر قط شيئا في WDK أن يقول أن هذا الشرط لا بد من التعامل معها. انا التخمين إذا قمت بتمكين وقت التصحيح DX سترى رسالة خطأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top