Создание ID2D1DeviceContext в Direct2DC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Создание ID2D1DeviceContext в Direct2D

Сообщение Anonymous »

Я пытаюсь настроить рисование с помощью Direct2D v1.3, но постоянно сталкиваюсь с ошибкой исключения, и это не работает. Возможно, я что-то делаю неправильно?
Моя среда разработки — Windows 11 и C++.
При выполнении функции CreateBitmapFromDxgiSurface возникает ошибка исключения.Ниже приведена упрощенная версия моего кода:
ID2D1Factory1* d2_factory = nullptr;
ID2D1Device* d2_device = nullptr;
ID3D11Device* d3_device = nullptr;
IDXGIFactory2* dxg_factory = nullptr;
IDXGIDevice1* dxg_device = nullptr;
IDXGISurface* dxg_surface = nullptr;
IDXGISwapChain1* swap_chain = nullptr;
ID2D1Bitmap1* bitmap = nullptr;

HRESULT hr;

hr = ::D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_HARDWARE,
0,
D3D11_CREATE_DEVICE_BGRA_SUPPORT,
nullptr,
0,
D3D11_SDK_VERSION,
&d3_device,
nullptr,
nullptr
);

hr = d3_device->QueryInterface(__uuidof(IDXGIDevice1), (void**)(&dxg_device));

dxg_device->SetMaximumFrameLatency(1);

hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2_factory);

hr = d2_factory->CreateDevice(dxg_device, &d2_device);

hr = ::CreateDXGIFactory2(DXGI_CREATE_FACTORY_DEBUG, __uuidof(IDXGIFactory2), (void**)(&dxg_factory));

ID2D1DeviceContext4* dc = nullptr;
hr = d2_device->CreateDeviceContext(D2D1_DEVICE_CONTEXT_OPTIONS_NONE, reinterpret_cast(&dc));

DXGI_SWAP_CHAIN_DESC1 desc = {};
desc.Width = 0;
desc.Height = 0;
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.Stereo = false;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
desc.BufferCount = 2;
desc.Scaling = DXGI_SCALING_NONE;
desc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
desc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;
desc.Flags = 0;

hr = dxg_factory->CreateSwapChainForHwnd(dxg_device, _hwnd, &desc, nullptr, nullptr, &swap_chain);

hr = swap_chain->GetBuffer(0, __uuidof(IDXGISurface), (void**)(&dxg_surface));

D2D1_BITMAP_PROPERTIES1 prop = D2D1::BitmapProperties1(
D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED)
);

// ### Exception Error
hr = dc->CreateBitmapFromDxgiSurface(dxg_surface, &prop, &bitmap);

dc->SetTarget(bitmap);


Подробнее здесь: https://stackoverflow.com/questions/787 ... n-direct2d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Огромная разница в частоте кадров в Direct2D при двух разных настройках
    Гость » » в форуме C++
    0 Ответы
    39 Просмотры
    Последнее сообщение Гость
  • Как создать наложение, невидимое на скриншоте, с помощью DirectComposition и Direct2D в C++?
    Anonymous » » в форуме C++
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Direct2D вызывает предупреждения LiveObjects с D3D
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Получите 0x887a0022 для CreateHwndRenderTarget с помощью Direct2D в UWP.
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Android – Создание – Создание произвольной фигуры
    Гость » » в форуме Android
    0 Ответы
    59 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»