Я пытаюсь изучить 2D и 3D графику, используя DirectX 11_1, и следую нескольким онлайн-учебникам.Тем не менее, я использую последний шаблон VS2017, Direct3D UWP Game (C ++ / WinRT), и модифицировал пример кода, так как многие учебные пособия не относятся к UWP.Я успешно воссоздал примеры в документации MSDN для линий сетки, а также для незаполненных и заполненных прямоугольников.Когда я пытаюсь создать горную сцену в этом руководстве, программа вылетает со следующим сообщением «Исключение, выброшенное в 0x75F9AB32 (KernelBase.dll) в Direct3D UWP Game.exe: Ошибка инициализации WinRT - 0x80004005:« Неизвестное исключение »."
Целевой версией для моего проекта является 10.0.17763.0.
Я попытался в следующем коде отрисовать тот же прямоугольник, который я успешно создал, используя метод D2DContext FillRectangle.Программа по-прежнему аварийно завершает работу с тем же сообщением об ошибке.
m_d2dContext->BeginDraw();
// this code draws a yellow, filled rectangle with a 100px border
//m_d2dContext->FillRectangle(
// D2D1::RectF(
// m_clientRect.left + 100.0f,
// m_clientRect.top + 100.0f,
// m_clientRect.right - 100.0f,
// m_clientRect.bottom - 100.0f),
// m_YellowBrush.Get());
// attemp to draw same rectangle using path geometries
Microsoft::WRL::ComPtr<ID2D1PathGeometry> rectGeometry;
// create empty path geometries
DX::ThrowIfFailed(m_Direct2dFactory->CreatePathGeometry(rectGeometry.GetAddressOf()));
Microsoft::WRL::ComPtr<ID2D1GeometrySink> sink = nullptr;
DX::ThrowIfFailed(rectGeometry->Open(sink.GetAddressOf()));
sink->SetFillMode(D2D1_FILL_MODE_WINDING);
sink->BeginFigure(D2D1::Point2F(m_clientRect.left + 100.0f, m_clientRect.top + 100.0f), D2D1_FIGURE_BEGIN_FILLED);
D2D1_POINT_2F points[] = {
D2D1::Point2F(m_clientRect.left + 100.0f, m_clientRect.top + 100.0f),
D2D1::Point2F(m_clientRect.right - 100.0f, m_clientRect.top + 100.0f),
D2D1::Point2F(m_clientRect.right - 100.0f, m_clientRect.bottom - 100.0f),
D2D1::Point2F(m_clientRect.left + 100.0f, m_clientRect.bottom - 100.0f),
};
sink->AddLines(points, ARRAYSIZE(points));
sink->EndFigure(D2D1_FIGURE_END_CLOSED);
DX::ThrowIfFailed(sink->Close());
m_d2dContext->DrawGeometry(rectGeometry.Get(), m_YellowBrush.Get(), 4); // draw rect
m_d2dContext->FillGeometry(rectGeometry.Get(), m_YellowBrush.Get()); // fill the rect
DX::ThrowIfFailed(m_d2dContext->EndDraw());
Ошибка возникает, когда программа достигает строки EndDraw ().Я довольно новичок в программировании на C ++ (фон - C #), но никаких ошибок сборки или предупреждений не отображается.
Буду признателен за любую помощь в решении этой проблемы, так как я не смогу продвинуться дальше, пока не пойму, в чем тут дело! *
Большое спасибо.
DogFather2