问题标签 [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.
c++ - 无法打开包含文件:'dxgi1_2.h':没有这样的文件或目录
我在我的 VC++ 代码中包含了头文件“dxgi1_2.h”,我发现我收到了错误。
我知道这是因为,我需要从 MSFT 安装一些与 DX11 相关的东西。(Win8 SDK 是否足以容纳此头文件)任何人都可以告诉我如何解决此错误吗?
windows-7 - Windows 7 上的 DXGI 和 2+ 全屏显示
我正在开发一个需要两个全屏 Direct3D 显示器的程序。根据文档,我应该在窗口模式下创建交换链,然后切换到全屏模式。虽然这在 Windows 8 上运行良好(目前我只是使用 Alt-Enter 进行切换),但它在 Windows 7 上不起作用。在 Windows 7 上,我遇到了与最近出现的屏幕类似的问题切换到全屏工作正常,但之前在全屏下工作正常的另一个屏幕变黑(并保持相同的全屏分辨率),直到我将其从全屏中取出。
你可以在这个标签上找到我乱七八糟的粗略原型。
显然,过去还有其他专门与 Windows 7 相关的错误……但我似乎遇到了一个略有不同的问题。
另外,我尝试禁用链接问题中建议的 DWM 组合,但这并没有解决问题。
如果我可以提供有关该问题的更多信息,请告诉我...我想最坏的情况是我只是退回到 DX9,这显然适用于多显示器全屏设置...
windows - 如何在 DXGI 中获取监视器/输出的当前显示模式(分辨率、刷新率)?
我正在创建一个多显示器全屏 DXGI/D3D 应用程序。我正在枚举可用的输出和适配器,以准备创建它们的交换链。
使用 DXGI 的IDXGIFactory::CreateSwapChain方法创建交换链时,我需要提供交换链描述,其中包括DXGI_MODE_DESC类型的缓冲区描述,详细说明宽度、高度、刷新率等。如何找出输出是什么当前设置为(或者我如何找出当前输出的显示模式是什么)?当我使用此交换链进入全屏时,我不想更改用户的分辨率或刷新率。
direct3d - DXGI:试图从输出(监视器)中获取正确的显示模式
我目前遇到了一个讨厌的小问题。我开发了一个将 DXGI 模式描述归零的应用程序。结构并调用 FindClosestMatchingMode() 来像宣传的那样“倾向于桌面分辨率”。
如果笔记本电脑完全在自己的显示器上运行,这很好用——只要我插入另一台显示器,它就会发疯。在我扩展我的桌面的情况下,它仍然可以正确获得笔记本电脑显示器的分辨率,但附加的显示器(运行 1080p)会产生 800*480 的偏好 :) (当然,穷人的 16:10,但是......)
对克隆/组合的监视器执行相同的操作(导致 1 个输出设备),即使它们的分辨率相同,也会产生相同的 800*480 废话。
是什么赋予了?有没有人可能找到一种方法来通过 DXGI 正确获取显示器的当前模式,或者找到一个完全不同但功能性的方法来解决这个问题的指针?
在 D3D9 的日子里生活更轻松 =)
- 更新
事实证明,与内部显示器相比,在属于外部显示器的 IDXGIOutput 实例上进行的任何 FindClosestMatchingMode() 调用的行为都不同(并且在大多数情况下是完全错误的),即使它们的原始分辨率相同。最重要的是,其他系统没有这个问题,但我无法绕过支持这台特定的笔记本电脑,包括它的驱动程序。
是时候进行一个好的旧设置对话框了。
dxgi - Windows 7下的DXGI1_2.h在哪里?
我正在使用 Visual Studio 2008 在 Windows7 下编译一些代码。但是有一个错误:
我已经安装了DirectX,不知道应该安装哪个SDK让VS2008找到DXGI1_2.h。
我应该怎么做才能得到这个 DXGI1_2.h?
c++ - E_NOINTERFACE when calling CreateDXGIFactory1
I am relatively new to C++ in general, and very new to Windows development.
I am writing a program that uses the DXGI library - it compiles just fine, but when I run the executable, the HRESULT from the CreateDXGIFactory1 comes out as 0x80004002, or E_NOINTERFACE.
Am I missing some sort of library, or is there a deeper issue at play here?
The code I am using follows:
Output is "Error: 0x80004002".
c++ - 枚举计算机上的监视器
我找到了 7 种不同的方法来枚举连接到计算机的监视器。但是所有解决方案都会给出不同的结果(监视器的数量和每个监视器上的信息)。
这些解决方案是:
使用著名的
EnumDisplayDevices
使用Windows Management Instrumentation (WMI):
使用以下查询:SELECT * FROM WmiMonitorID
在root\\WMI
命名空间中。再次使用WMI :
使用新查询:SELECT * FROM Win32_DesktopMonitor
在root\\CIMV2
命名空间中。使用Setup API:
首先调用SetupDiGetClassDevs
检索设备信息集,然后迭代SetupDiEnumDeviceInfo
使用DirectX 图形基础结构 (DXGI)
与 firstIDXGIFactory::EnumAdapters
,然后IDXGIAdapter::EnumOutput
使用连接和配置显示器 (CCD) API:
QueryDisplayConfig
(QDC_ALL_PATHS, &numPathArrayElements, pathInfoArray, &numModeInfoArrayElements, modeInfoArray, nullptr);
我试图准确地理解所有这些方法与 MSDN 参考之间的区别,但徒劳无功。
观察
据我观察:
- WmiMonitorID和Setup API查询返回已连接(不一定是活动的)显示器的列表。
- Win32_DesktopMonitor WMI查询返回错误(至少是意外)结果(即使在非活动状态下仅枚举了 1 个监视器,并且桌面位于另一台监视器上)。
- EnumDisplayDevices返回活动设备列表(除非只有 1 台显示器处于活动状态且连接了其他显示器)
- EnumDisplayMonitors和DXGI查询返回活动监视器的列表。
- CCD似乎是最可靠的方法(提供目标和源之间的所有可能路径)。
问题
使用这些方法(已连接显示器列表、已安装显示器列表、活动显示器列表)时,我真正期望得到什么结果?如果我使用镜像显示器或扩展显示器怎么办?如果计算机有多个显卡而没有多个输出怎么办?
奖励:一些方法(DXGI、EnumDisplayDevices、CCD)使用一种带有Adapter - Monitor的层次结构。但没有给出适配器和监视器之间的相同链接。那么, DXGI适配器的定义是什么?对于CCD?对于EnumDisplayDevices?
ms-office - 修改现有 Direct2D 应用程序的屏幕
这个问题与:which API Microsoft Word (Office 2013) is using the paint the screen 相关,没有得到回答。
我有一个与 Office 相当相关的 Office 插件(本机 C++)。使用挂钩我正在修改 Office 应用程序的客户区。
直到 Office 2010、连接 WM_NCPAINT 和在 Office Window 上使用 GDI 方法,一切对我来说都很好。
但 Office 2013 使用 Direct2D、DXGI 和 DirectWrite。在 Windows 7 上,如果我在屏幕上画了一些东西 - 它会在下次光标闪烁时被删除。在 Windows 8 上 - 我什至无法访问屏幕。
目前,我的想法是挂钩ID2D1DeviceContext::BeginDraw
, ID2D1DeviceContext::EndDraw
- 在最后一个函数上,就在委托给真正的函数之前,我会添加我的东西。另一个想法是钩子IDXGISwapChain1::Present1
。这两种方法都有问题,我很难确定上面发生了什么。
我什至在想在我想要装饰的客户区顶部使用不同的流程(或基于 GDI 的窗口 - 如果可能的话),大部分真正的东区都是 100% 透明的。此解决方案的问题是键盘焦点和鼠标单击等问题。
任何提示或建议将不胜感激。任何工具(DirectX 的 Spy++)都会受到赞赏。DirectX(特别是 Direct2D)是否记录了可扩展或可插入的故事,我不知道并且可以使用?我缺少内核模式中的任何内容吗?
c++ - Directx 11 前缓冲器
我希望这是一个我找不到答案的简单问题的简单答案。
如何访问 Directx 11 / DXGI 中的前端缓冲区?我在 Directx 9 中发现您可以使用 GetFrontBufferData() 并且您可以在 Directx 11 中使用 GetBuffer() 来访问后台缓冲区,但这存在问题。后缓冲区没有前缓冲区所做的计算。
所以我想知道是否有我遗漏的东西。
我可以尝试使用 GetDisplaySurfaceData,除非我误解了某些内容,否则它不会工作,因为我并不总是处于全屏模式。
编辑:有人可以让我知道 GetBuffer 在 Directx 11 的 SwapChain 中是如何工作的。正如我所读到的,抗锯齿只发生在前缓冲区而不是后缓冲区。0 是第一个后备缓冲区吗?(Microsoft 声明您只能在某些情况下使用 0。)
是否有可能在 Directx 11 中获得前端缓冲区?
非常感谢,
c# - SharpDx 窗口调整大小
我正在尝试在我的窗口大小更改后立即对后备缓冲区进行更新。所以我的对象不会被拉伸。所以我尝试了这个
更改窗口大小后,我会立即收到此错误。
DXGI_ERROR_IVALID_CALL/InvalidCall
我错过了什么吗?