问题标签 [dxgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
441 浏览

c++ - IUnknown 指针引用

为什么 Visual Studio 编译器对

但不是

在哪里调用它看起来像

编译器错误是

3 IntelliSense:不能使用“IDXGIFactory *”类型的值初始化“IUnknown *&”类型的引用(非 const 限定)c:\Users\Carl\Documents\Visual Studio 2013\Projects\Project1\Project5\main .cpp 29 10 项目5

我在研究中发现的最接近的事情是编译器一次只会进行一次类型转换,但这不可能是正确的,因为这样const & 版本应该会中断进行类型和 const 转换;但是实际上无法编译的是 & 版本。

0 投票
1 回答
1408 浏览

directx-11 - 使用 DirectX 11 后重置窗口

我编写了一个应用程序,它可以在 OpenGL、DirectX 9 和 DirectX 11 之间切换以进行渲染,而无需重新启动或重新创建窗口。在 OpenGL 和 DirectX 9 以及 DirectX 11 模式之间切换效果很好,但是,在使用 DirectX 11 之后,其他渲染模式不再起作用。

释放所有 DirectX 11 接口后,窗口仍然显示最后渲染的帧,甚至在调整窗口大小时正确更新。可以创建 DirectX 9 设备并且 Present 调用成功,但是,我看到的只是 DirectX 11 绘制的最后一帧。

我已经使用 IDXGIDebug::ReportLiveObjects 来确保所有 DirectX 11 接口都已实际发布。我也尝试过 IDXGIFactory::MakeWindowAssociation,但没有解决问题。

为什么要重绘最后一帧,谁重绘它?如何摆脱它并恢复窗口的原始行为。

顺便说一句,创建一个新窗口是一种解决方法,但我想为 DirectX 9/11 和 OpenGL 使用相同的窗口。

0 投票
2 回答
4229 浏览

directx - Direct2D:如何将 ID2D1RenderTarget 的内容保存到图像文件中?

这个问题与此非常相似,但尚未得到答案。我的问题是,我有一个来自 d2dfactory->CreateDxgiSurfaceRenderTarget() 的 D2D DXGI RenderTarget,我想使用 WIC 将其内容保存到图像文件中。我只是在阅读这个这个,所以在我看来,我不能只在 WIC 渲染目标上创建一个 ID2D1Bitmap 并使用 ID2D1Bitmap::CopyFromRenderTarget() 从我要保存的输入渲染目标复制,因为他们正在使用不同的资源。所以这是我使用 ID2D1RenderTarget::CreateSharedBitmap() 得出的结果:

这段代码有什么问题吗?(我敢肯定有很多 :)) MSDN 上的某处说 WIC 渲染目标仅支持软件模式,而 DXGI 渲染目标仅支持硬件模式。这就是上述对 CreateSharedBitmap() 的调用失败的原因吗?那么我应该如何使用 D2D 将 DXGI 表面内容保存到图像文件中呢?

0 投票
1 回答
1821 浏览

directx - 我可以在 Windows 7 下的 Direct3D 中模拟 DXGI_FORMAT_NV12 吗?

我需要将 RGB 纹理转换为视频编解码器可以理解的 NV12 格式(Y 平面紧跟 UV 平面)。 DXGI_FORMAT_NV12使用 R8 为 Y 和 R8G8 为 UV 提供了一个简单的视图格式映射,所以我使用两个像素着色器和 NV12 纹理。不幸的是,这只适用于 Windows 8。我可以在 Windows 7 上以某种方式创建一个同时具有 R8 和 R8G8 着色器资源视图的纹理吗?还是有另一种方法可以渲染 YUV 数据?

0 投票
4 回答
4747 浏览

directx - ID3D11Texture2D 到 ID2D1Bitmap,可以吗?

我正在开发一款游戏的扩展,它只打开一个 HDC 供插件开发人员使用。

然而,我已经用尽了 GDI+/Direct2D 绘图的可能性,这些可能性对于我想要完成的事情来说足够快 - 图像效果(加法、混合、乘法混合等)。

我很清楚 Direct2D 提供了一个效果工具包,但它需要平台更新(对于 Windows 7),这根本不理想。

因此,我只剩下 Direct3D。MSDN/Google 搜索提供了很多做 D2D -> D3D 的方法,但 ZERO 展示了如何做 D3D -> D2D。我知道有一种方法可以转换 D3D -> D2D,即映射和复制像素数据,但这是非常低效的,因为(如果我是对的)它从 GPU VRAM -> CPU/RAM -> GPU VRAM 传输。我可能只会将其用作最后的选择....

或者,如果有人对如何从 D3D11 中的 RenderTarget 获取 HDC 以便我可以 BitBlt 有任何想法,它也可能有效。

如果有人能提供帮助,我将不胜感激。

0 投票
1 回答
479 浏览

c++ - 在 Windows 中呈现后台桌面的实时预览

我一直在查看 msdn 上的DXGI 桌面复制示例,它看起来非常好,但不清楚它是否适用于我想做的事情。

我想做的是使用Win32 Desktop api创建一个新桌面(CreateDesktop)然后切换到该桌面(SwitchDesktop),然后在那个新桌面中我想创建一个窗口并呈现原始桌面的实时预览。

尽管 DXGI api 的名称似乎与 Win32 意义上的“屏幕”而不是桌面更相关。在我投入大量时间尝试实现这一点之前,却发现它不起作用,我希望对这些 api 更了解的人能够加入并引导我朝着正确的方向前进。

以前尝试使用其他常见的屏幕捕获方法执行此操作已导致失败,因为图像始终是黑色的。我希望 DXGI 将允许我将非活动桌面渲染为 DirectX 纹理,然后我可以在我的应用程序中显示该纹理。

0 投票
2 回答
1941 浏览

directx - IDXGIFactory::EnumAdapters() 不返回任何适配器

我正在开发 DirectX11 应用程序。在初始化期间,我枚举了可用的图形适配器,如此所述。

现在,对于我们的一位客户,可用适配器的数量似乎为零: EnumAdapters(0, &pAdapter)已经返回DXGI_ERROR_NOT_FOUND

这怎么可能?不应该总是至少有一个图形适配器可用吗?计算机的显卡安装了最新的驱动程序并且显示器工作正常。

注意:我们的应用程序实际上使用了 SharpDX,但过程是相同的。失败的等价物正在GetAdapterCount()返回0

0 投票
1 回答
514 浏览

c++ - IDXGISwapChain::ResizeBuffers 从全屏切换到窗口时触发断点

每当我的 Direct3D 11 应用程序从全屏模式切换到窗口模式时,IDXGISwapChain::ResizeBuffers 都会触发一个断点。在 Visual Studio 的控制台中,打印出消息“严重错误 0xc0000374”,没有其他信息。显然这意味着发生了堆损坏。好吧。我无法获得更多关于为什么会发生这种情况的信息,因为该窗口令人讨厌地遮住了我的视线并阻止我控制 Visual Studio 窗口。

我正在遵循此 MSDN 页面上提出的建议。我的意思是我复制并粘贴了代码。

这是我的设置代码(忽略缺少错误检查):

有什么可能导致这个问题吗?渲染代码只是一个 ClearRenderTargetView 和一个 PeekMessage 循环之后的 Present,没什么重要的。

0 投票
2 回答
6913 浏览

c++ - 正确处理 Alt-Enter / Alt-Tab 全屏分辨率

DXGI 上的 MSDN 页面提供了有关如何处理不同于桌面分辨率的全屏分辨率的说明。它说在调用IDXGISwapChain::ResizeTargets()之前先调用IDXGISwapChain::SetFullscreenState()以防止闪烁等。

它没有说明如何处理 Alt-Enter,它IDXGISwapChain::SetFullscreenState()在程序有机会自己调用IDXGISwapChain::ResizeTargets(). 如果对消息调用后一种方法,则会发送WM_SIZEWM_SIZE一条消息,可能导致无限循环。当按下 alt-enter 或 alt-tab 时,如何确保在前者之前调用后者,并且模式切换通常会无痛地发生?

0 投票
0 回答
213 浏览

c++ - 在 CTRL-ALT-DEL 上更改显示模式

CtrlWindow 的++似乎有点Alt怪癖Del。当独占全屏模式下的 D3D11 窗口通过 ++ 失去焦点时,Ctrl桌面保留该窗口使用的显示模式。如果分辨率太小,使用桌面会变得有点迟钝。 AltDel

我想确保桌面在Ctrl++上恢复到以前的显示模式,但没有任何消息,我不完全确定如何使用 DXGI 来做这件事AltDel这可能吗?