مشكلة DirectX11 الأساسية ، تعطل الكود بمجرد أن أبدأ في رسم أي شيء على الشاشة. يساعد أيضًا في تكوين NetBeans

StackOverflow https://stackoverflow.com/questions/3492987

سؤال

لذلك ، بدأت البرمجة في DirectX11 اليوم ، لقد كانت لدي الكثير من الخبرة في الترميز ، ولكن ليس على وجه التحديد DirectX ، لذلك ذهبت وألقي نظرة على بعض البرامج التعليمية. كان كل شيء يتضخم ، يمكنني تهيئة نافذة ، وضبط لون الخلفية ، ولكن بمجرد أن حاولت تحديد تظليل ورسم كائن ، فإنه يتعطل فقط على الحمل. هذا الرمز بسيط للغاية ، وقد وضعته في رام حتى تتمكن من إخباري بما هو الخطأ. أقوم بترميز الإصدار المرئي C ++ Express لأنني حاولت لساعات أمس الحصول على مسارات مرجعية OpenGL في NetBeans دون جدوى ، لذلك لا أحاول تشغيل DirectX هناك إما حتى الآن. إليك الرمز الذي لدي حاليًا: http://www.mediafire.com/؟i8w1trkx7c03qts

لقد حاولت أيضًا تنزيل وتشغيل EXE المقدمة في www.dx11.org.uk/3dcube.htm ، لاختبار ما إذا كان ذلك هو X المباشر أو شيء ما ، وهذا يعطيني خطأ "فشل في إنشاء جهاز D3D11" ، وهو أمر من الكود الخاص بهم هو فشل في إكمال أمر "D3D11CreateDeviceAndswapchain". بصراحة ، ماذا أفعل خطأ/ماذا يحدث؟ (وأي مساعدة حول كيفية تعيين مراجع مكتبة DirectX في NetBeans ستكون مساعدة رائعة).

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

المحلول

إنه يعمل بالنسبة لي :)

اضطررت إلى إزالة بادئة L لبعض الأوتار لتجميع التعليمات البرمجية:"shaders.hlsl", "WindowClass", "Our First Direct3D Program"

هل لديك ملف .hlsl في نفس المسار من قابلي للتنفيذ؟ كما لا يمكنك بدء البرنامج من VS. ستحتاج إلى إطلاق .exe من المستكشف. ولكن يمكنك ضبط طريق مطلق على تظليلك إذا كنت لا تريد هذا السلوك ، مثل هذا:

D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...
D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...

يحرر:أيضًا عند إنشاء جهاز أو جهاز/swapchain يستخدم دائمًا D3D11_CREATE_DEVICE_DEBUGفي وضع التصحيح. سيطبع هذا في VS Window Window تحذيرات وأخطاء مفيدة (كل شيء يبدو جيدًا على جانبي).

    D3D11CreateDeviceAndSwapChain(NULL,
                                  D3D_DRIVER_TYPE_REFERENCE,
                                  NULL,
#ifdef _DEBUG
                                  D3D11_CREATE_DEVICE_DEBUG,
#else
                                  0,
#endif
                                  NULL,
                                  NULL,
                                  D3D11_SDK_VERSION,
                                  &scd,
                                  &swapchain,
                                  &dev,
                                  NULL,
                                  &devcon);

EDIT2:

كما تحقق دائمًا من رموز الخطأ في كل مكان يمكن أن يفشل فيه التطبيق:

ID3D10Blob* pErrorBlob = NULL;

HRESULT hr = D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\\\DXTest\\shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, &pErrorBlob, 0);
LPVOID pError = NULL;
if( pErrorBlob )
{
    pError = pErrorBlob->GetBufferPointer();
    // then cast to a char* to see it in the locals window
}

نصائح أخرى

يحاول رمز DX11 من www.directxtutorial.com تجميع التظليلات كنموذج تظليل 5. على الرغم من أن أجهزة فئة DX 10/10.1 قد تم تحديثها للاستفادة من بعض ميزات DX11 ، إلا أن Shader Model 5 ليس أحدها.

Change: D3DX11COMPILEFILEFILE (L "Shaders.hlsl" ، 0 ، 0 ، "Vshader" ، "VS_5_0" ، 0 ، 0 ، & VS ، 0 ، 0) ؛ D3DX11COMPILEFROMFILE (L "Shaders.hlsl" ، 0 ، 0 ، "pshader" ، "ps_5_0" ، 0 ، 0 ، 0 ، & ps ، 0 ، 0) ؛

إلى

D3DX11COMPILEFROMFILE (L "Shaders.hlsl" ، 0 ، 0 ، "Vshader" ، "VS_4_0" ، 0 ، 0 ، 0 ، & vs ، 0 ، 0) ؛ D3DX11COMPILEFROMFILE (L "Shaders.hlsl" ، 0 ، 0 ، "pshader" ، "ps_4_0" ، 0 ، 0 ، 0 ، & ps ، 0 ، 0) ؛

http://en.wikipedia.org/wiki/directx#directx_11

لقد واجهت نفس المشكلة بالضبط باستخدام نفس البرنامج التعليمي. لقد جربت ببساطة إصدار DirectX 9 من نفس البرنامج التعليمي بدلاً من ذلك ، والذي كان يعمل على الفور دون أي مشاكل (بصرف النظر عن إزالته من L -chars التي تحتاج إلى إزالة من بداية الأوتار ، وهو أمر يتعلق بدعم Unicode). يبدو أن السبب الجذري لهذه المشكلة هو عدم وجود دعم لـ DX11 على أنظمة بعض الأشخاص.

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