【问题标题】:Drawing is not showing when GDI compatible DC used from IDXGISurface1当从 IDXGISurface1 使用 GDI 兼容 DC 时,绘图未显示
【发布时间】:2019-08-05 00:36:23
【问题描述】:

我创建了一个与 GDI 兼容的纹理,但我从中获得的 DC 用于绘制从一个点到另一个点的线,这些线未显示在视图窗口上。也不抛出异常。我错过了什么吗?有没有人使用 GDI 兼容的 DC 完成相同并成功绘制 2D 形状或其他东西?请帮忙。

// get texture surface1 and overlay DC from GDI compatible texture 2D
D3D11_TEXTURE2D_DESC desc;
ZeroMemory(&desc, sizeof(desc));
desc.Width = width;
desc.Height = height;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
desc.CPUAccessFlags = 0;
desc.MipLevels = 1;
desc.SampleDesc.Count = 1;
desc.MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE;

ID3D11Texture2DPtr texture2D;
IF_FAILED_THROW_HR(renderer->Device()->CreateTexture2D(&desc, nullptr, &texture2D));

// Create the shader resource view.
ID3D11ShaderResourceViewPtr shaderResourceView;
IF_FAILED_THROW_HR(device->CreateShaderResourceView(texture2D, nullptr, &shaderResourceView));

ID3D11ResourcePtr resource;
view->GetResource(&resource);
m_texture2D = resource;

m_dxgiSurface1 = m_texture2D;
TRY_CONDITION(m_dxgiSurface1);
HDC hdc{};
IF_FAILED_THROW_HR(m_dxgiSurface1->GetDC(FALSE, &hdc));

DXGI_SURFACE_DESC descOverlay = {0};
m_dxgiSurface1->GetDesc(&descOverlay);


// Draw on the DC using GDI
// fill the texture with the color key
::SetBkColor(overlayDC, m_keyColor);
const auto overlayRect = CRect{ 0, 0, gsl::narrow_cast<int>(descOverlay.Width), gsl::narrow_cast<int>(descOverlay.Height) };
::ExtTextOut(overlayDC, 0, 0, ETO_OPAQUE, overlayRect, nullptr, 0, nullptr);

m_dxgiSurface1->ReleaseDC(nullptr);

更新: 我已经编辑了上面的源代码,其中我从 GDI 兼容纹理创建了着色器资源视图,然后将纹理从资源返回到 surface1。然后surface1 提供了一个用于GDI 绘图的DC。现在可以平滑渲染,但看不到 GDI 绘图。

【问题讨论】:

  • 当您为 d3d11createdevice 函数传入参数并检查函数调用是否成功时,您是否启用了调试层……在您完成此操作后分析您的输出日志是否有错误。
  • 是的调试层已启用

标签: c++ gdi+ directx-11 direct3d11 dxgi


【解决方案1】:

此 GDI 绘图后创建的纹理用于与其他纹理混合。我在这些纹理上找到了这些绘图,但后来发现我的错误是这个 GDI 绘图纹理没有与着色器程序中的其他纹理混合,因此它没有被渲染为覆盖。所以看起来这幅画不见了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2011-11-10
    • 2015-12-29
    • 2013-04-04
    • 2011-01-19
    • 1970-01-01
    • 2021-10-23
    相关资源
    最近更新 更多