Основная проблема DirectX11, код вылетает, как только я начинаю что-то рисовать на экране.Также помогите с настройкой Netbeans - PullRequest
1 голос
/ 16 августа 2010

Итак, я начал программировать в DirectX11 сегодня, у меня был большой опыт в программировании, но не в DirectX, поэтому я пошел и посмотрел некоторые уроки. Все шло отлично, я мог инициализировать окно, установить цвет фона, но затем, как только я попытался определить шейдер и нарисовать объект, он просто зависал при загрузке. Этот код очень прост, и я поместил его в rar, чтобы вы могли сказать мне, что не так. Я пишу код в Visual C ++ Express Edition, потому что вчера я часами пытался настроить эталонные пути OpenGL в Netbeans безрезультатно, поэтому я пока не пытаюсь заставить работать DirectX там. Вот код, который у меня есть на данный момент: http://www.mediafire.com/?i8w1trkx7c03qts

Я также попытался загрузить и просто запустить предоставленный exe-файл на www.dx11.org.uk/3dcube.htm, чтобы проверить, является ли это мой прямой X или что-то подобное, и это выдает ошибку «Не удалось создать устройство D3D11 ", что в их коде является ошибкой при выполнении команды" D3D11CreateDeviceAndSwapChain ". Так честно, что я делаю не так / что происходит? (И любая помощь по настройке ссылок на библиотеки DirectX в NetBeans была бы очень полезной).

Ответы [ 3 ]

4 голосов
/ 17 августа 2010

у меня работает :) 1001 *

Мне пришлось удалить префикс 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", ...

Edit: Также при создании устройства или устройства / swapchain всегда используйте D3D11_CREATE_DEVICE_DEBUG в режиме отладки. Это выведет в окне вывода VS полезные предупреждения и ошибки (все выглядит нормально на моей стороне).

    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
}
1 голос
/ 21 августа 2012

У меня была точно такая же проблема при использовании того же учебника.Вместо этого я просто попробовал версию того же самого руководства DirectX 9, которая работала сразу же без каких-либо проблем (за исключением того, что L-символы должны быть удалены из начала строк, что-то связанное с поддержкой Unicode).Похоже, что основной причиной этой проблемы является отсутствие поддержки DX11 на некоторых системах людей.

1 голос
/ 27 августа 2010

Код DX11 от www.directxtutorial.com пытается скомпилировать шейдеры как модель шейдеров 5. Хотя аппаратное обеспечение класса DX 10 / 10.1 было обновлено для использования некоторых функций DX11, шейдерная модель 5 не является одной из них.

Изменение: D3DX11CompileFromFile (L "shaders.hlsl", 0, 0, "VShader", "vs_5_0", 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

...