问题标签 [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 投票
2 回答
467 浏览

com - IDXGIObject::GetParent 和 Release

IDXGIObject具有获取指向其父级的指针的功能GetParent。不幸的是,文档没有说明我是否必须调用Release()返回的接口——调用或不调用它在调试/发布中都可以正常工作(即没有崩溃),但我想知道我是否应该释放或者更确切地说不是。知道这应该如何工作吗?

0 投票
1 回答
443 浏览

c# - 检查应用程序何时全屏显示。(DXGI/DirectX10)

这是我的问题...有一种方法可以检查应用程序何时在 DXGI (DX10/11) 中全屏显示。对于全屏显示,我的意思是系统已完成模式更改。因为我的应用程序需要它来防止死锁和调整时间。(我有一个多线程引擎,并且 Present 不在消息泵线程上,导致模式更改随机死锁))实际上我让它等待 1 秒,继续在消息泵线程上处理消息并且它可以工作,但我想要更多DETERMINISTIC 对我说“嘿,模式更改已完成,您现在处于全屏模式”。:D

任何的想法?

0 投票
1 回答
2666 浏览

directx - 使用 DirectX IDXGIOutput::GetDisplaySurfaceData 进行 DWM 屏幕捕获

我正在尝试通过使用 DXGI 和GetDisplaySurfaceData()使用 Direct3D 10/11 来捕获 DWM 的 DirectX 表面。

但是,当我IDXGIOutput::TakeOwnership()在调用 to 之前获得适配器输出的所有权时GetDisplaySurfaceData(),整个屏幕会暂时变黑,然后恢复(就像在显示模式切换期间一样)。

为什么会发生这种情况,我该如何防止这种情况发生?

0 投票
1 回答
576 浏览

visual-studio-2008 - 将 IID_IDXGIDevice 传递给 IUnknown::QueryDevice 时 DXGI 出现链接器错误

我试图在我的渲染框架中将 Swapchain 和 Window 创建与 D3D10 设备创建分开,这意味着我不能真正使用 D3D10CreateDeviceAndSwapChain。我在尝试构建我的测试应用程序时遇到了意外的链接器错误。

我包括 DXGI.h 并链接到 DXGI.lib 以及 D3D10 库,但仅此而已。

问题代码如下:

if(FAILED(hr = pDXGIFactory->QueryInterface(IID_IDXGIDevice, reinterpret_cast(&pDXGIDevice)))) 返回 hr;

我得到的链接器错误与 _IID_IDXGIDevice 是一个未解析的外部符号有关,但我找不到有关我应该链接到哪些附加库的信息。任何建议,将不胜感激。

我正在使用 Win7 x64、VS2008 和最新版本的 DirectX SDK。

0 投票
3 回答
6243 浏览

c++ - D3D11:如何将 GDI 文本绘制到 GXDI 表面?(没有 D2D)

在使用 GDI 和 D3D11 将文本绘制到纹理上时,我需要一些帮助。我尝试使用 D2D/DirectWrite,但它只支持 D3D10 而不是我需要的 D3D11。到目前为止我尝试的一切都失败了......现在我想使用 GDI 方法在纹理中写入。所以我用这个参数创建了一个纹理:

然后我从这个纹理创建了一个普通的 RenderTargetView,就像微软在这里所说的那样:http: //msdn.microsoft.com/en-us/library/ff476203%28v=vs.85%29.aspx

下一步:获取 DXGI 接口:

在渲染功能上,我这样做:

问题是,在 GDI 绘图之后纹理仍然是空的(也用 PIX 测试过)。一切正常,没有错误消息。

我希望任何人都可以解释它是如何工作的。

谢谢,斯特凡

编辑:也尝试过GetDC(FALSE,&hDc)(根据文档):相同的结果->没有。

0 投票
1 回答
1364 浏览

graphics - 如何使用 IDXGISwapChain 和 ID3D11Device/ID3D11DeviceContext 呈现到不同的窗口?

以前,当我构建工具时,我使用的是 D3D 版本 9,其中对 Present() 的调用可以获取目标窗口和矩形,因此您可以从单个设备绘制到许多不同的窗口中。这在使用 D3D 加速桌面应用程序和/或构建工具而不是游戏时非常有用!

我之前也用 D3D11 构建了一个游戏渲染器,这也很棒,因为状态管理和线程接口设计得很好,你甚至可以针对在野外仍然很常见的 D3D 9 级别的硬件(相对于 D3D 10 ,只能针对 10 岁及以上)。

但是,现在我想用 D3D11 构建一个工具。不幸的是,从 D3D11CreateDeviceAndSwapChain() 返回的 IDXGISwapChain 似乎“记住”了它的 HWND,并且只想呈现给那个窗口。这是非常不方便的,因为我可能有大量的窗口,每个窗口都需要相当简单的图形绘制到它们上,并且只响应 WM_PAINT(同样,这是一个工具,而不是游戏)。

我想要做的是节省后台缓冲 RAM。具体来说,我曾经能够创建一个后台缓冲区,即桌面大小,我知道它可以满足所有渲染需求,然后就是分配的单个副本。即使有 10 个重叠的窗口,它们都通过同一个后台缓冲区进行渲染,因此除了初始分配之外,不会浪费内存。我可以创建不是交换链的纹理,并将它们用作“渲染目标”,但是我找不到一种很好的方法来呈现给任意客户端窗口的任意矩形,而无需读取位图并将其复制到DIBSection,这将是非常低效的。此外,没有办法创建许多交换链,并让它们共享相同的后台缓冲区。

我能做的最好的事情是为每个窗口创建一个交换链,并将每个交换链的后台缓冲区调整为非常小,除非我渲染到交换链,此时我调整它的大小以匹配窗口。但是,这似乎效率低下,因为调整目标的大小不是“免费”操作 AFAICT。那么,有没有更好的方法呢?

0 投票
1 回答
307 浏览

direct3d - ID3D10Texture2D 滚动内容

我是 DirectX 技术的新手。

如何滚动 ID3D10Texture2D 的内容?使用bitblt。GDI 设备上下文中的 BitBlt 之类的东西,其中 src 和 dst hdc 相同。

我有来自 IDXGISurface 的 ID3D10Texture2D 滚动是我真正的目标,但在 dxgi api 中找不到任何东西。

0 投票
1 回答
4880 浏览

c++ - IDXGISwapChain::Present 导致驱动程序崩溃和设备移除

我正在设计一个使用 DirectX 11 API 的游戏引擎,特别是延迟上下文的使用。基本思想是让每个设备状态都给定其自己的延迟上下文,然后在渲染所有几何图形后,通过迭代每个延迟上下文并在直接上下文上执行其命令列表来显示它。我通过使用线框着色器在屏幕上简单地绘制两个三角形来测试这一点,仅此而已。所有 DirectX 调用都不会返回错误,即使在 PIX 调试报告中查看时也是如此,但是一旦IDXGISwapChain::Present(0,0调用 ),整个屏幕就会变黑然后返回。然后屏幕右下角会弹出一个错误框,说明显示驱动程序“已停止响应并成功恢复”。查看 PIX 日志,我发现有一行说明“D3D11: Removing Device" 在 PIX 日志中调用的 pre 和 post 块之间。post 块中显示的返回值是DXGI_ERROR_DEVICE_REMOVED。我不太确定该怎么做。PIX 日志如下:

如果还需要什么,请告诉我。我没有发布代码主要是因为它扩展了近 20 个单独的类,但我可以发布缓冲区内容、HLSL 和逻辑背后的解释。

更新:

我已经在一定程度上解决了上面的问题,部分原因很可能是由于没有设置任何着色器、没有索引缓冲区、没有顶点缓冲区和没有常量缓冲区。原来的问题还没有解决,但是在处理这个问题的过程中,我有了一个新的想法。我从来没有打电话ID3D11DeviceContext::Begin(0)。但是,在从设备状态类获取设备上下文并在该上下文上调用 Begin 时,我最终会遇到访问冲突,并且指向ID3D11DeviceContext对象的指针被设置为零。这只发生在对 的调用上Begin,删除调用会导致行为停止。浏览 DirectX SDK 中的示例代码,我在任何时候都找不到要开始的显式调用。这个电话有必要吗?这似乎有点离题,但如果命令列表因此而被破坏,这可能是原因Present正在移除设备。

相关代码:

0 投票
2 回答
8958 浏览

c++ - 未解析的外部符号 _IID_IDXGIFactory

我在 VC++ 2010 中创建控制台应用程序,并向其中添加以下代码:

构建这个项目,我有链接器错误:错误 LNK2001:未解析的外部符号 _IID_IDXGIFactory

现在我创建了支持 MFC 的控制台应用程序,并添加了相同的代码。构建成功。第一种情况有什么问题?为什么MFC项目建成功,非MFC项目建失败?

0 投票
1 回答
584 浏览

multithreading - 我应该如何处理 DXGI 中的多个交换链?

这里很混乱。是不能同时访问一个交换链,还是DXGI完全不是线程安全的?

如果我有 2 个交换链用于一张卡上的 2 个显示,那么交换它们的最佳方式是什么?我很难在多个交换链上找到任何资源。