Articles of DirectX

为什么没有Linux的DirectX API?

考虑到现代video卡的Windows系统上的DirectX API的驱动程序端实现,我想知道为什么这个实现在非Windows系统,特别是Linux上不可用。 由于这个function显然不存在,我只能假定我有一个很好的理由,但是在我原始的理解中,我只是将DirectX调用看作硬件设备上的函数入口点。 而对于logging来说,我并不是指兼容性层(最值得注意的是WINE,一个我每天都为之惊叹的项目),而是一个直接硬件调用的库。 是否有可能创build一个开放源代码版本的DirectX? 这是可能的,但是很难实现吗?

如何禁用全屏独占模式?

我有一台Windows 7的电脑。我已经安装了3D模拟器。 这个模拟器提供了窗口。 我想在模拟器窗口的顶部放置透明的窗口(用我的额外的绘图)。 问题是模拟器的窗口在鼠标点击时切换到“全屏独占模式”。 这使硬件工作更快。 但是,这隐藏了其余的窗口(甚至最高层),包括我的透明窗口。 是禁用全屏模式的一种方法?

在Windows上,OpenGL与DirectX有什么不同?

我没有任何graphics编程的经验。 在阅读graphics编程时,我有这个疑问。 据我所知,因为Windows没有像直接硬件访问那样提供DOS,所以创build了DirectX。 这意味着DirectX是实现直接(ish)硬件访问的唯一可靠方法。 我错了吗? 如果我没有错,那么OpenGL必须使用DirectX本身或在DirectX之上实现。 那么这是不是说在Windows上OpenGL真的是DirectX? 请注意,我的疑问仅限于标题所说的内容,而我并不感兴趣,为什么比其他人更好?

最低DirectX 9.0c版本以及如何检查它

我们基于Windows C ++ Ogre的游戏即将完成。 在我们公开发布之前,我们必须解决这个问题: Ogre在许多testing计算机上崩溃,如果它们没有更新到最新的Dx9.0c版本。 所有这些电脑已经安装了9.0c,但一定是一个较旧的操作系统预装的子版本,因此崩溃..? 第一个问题是:如何确保用户拥有正确的9.0c版本,以便游戏不会在用户脸上崩溃,而是显示一条消息,如“从那里获取最新的9.0c版本… 。“? 第二个问题是:在游戏安装过程中是否有标准的自动化方法来将用户的计算机升级到最新的9.0c版本? 这将是最好的解决scheme。 很多人提前感谢, 法案

如何使用硬件video缩放器?

现代显卡具有硬件video缩放器,例如作为AMD Avivo,NVIDIA PureVideo或Intel ClearVideo的一部分。 例如,AMD的Avivo白皮书说: “图像输出缩放器最多可支持6个垂直滤波器抽头和10个水平滤波器抽头,这些缩放器是高度精确的多相位缩放器,具有高度可编程性,适用于按任意比例放大,或缩小至4 :1“。 问题: 如何从Windows程序使用video缩放器硬件? 假设已经存在解码的video帧,例如在IDirect3DSurface9 ,目标是使用硬件缩放器在屏幕上显示该video帧。 我想使用Windows API(如Media Foundation或DirectShow),而不是使用特定于供应商的API(如果可能)。 我主要感兴趣的是1.5-3倍左右的相当大的因素。 第二个问题是,如何控制video缩放器硬件参数? (例如,上述的多相滤波器中的滤波器系数) 编辑:赏金开始。 请提供在video卡中使用video缩放器硬件的任何方式的示例(这可能是供应商特定的,或者使用任何版本的DirectX / DirectShow / Media Foundation API)。 编辑:更新:使用video缩放器硬件的程序的一些示例:WinDVD,PowerDVD,madVR。 我想知道如何完成他们的工作,即使用GPU的内置video硬件缩放器, 而不是使用D3D着色器和纹理采样器实现的缩放器。

DIDEVICEINSTANCE guidInstance和guid在同一设备上进行更改

我正在使用DirectInput8来监视电脑的各种组件。 为了监控我们使用DirectInput8的游戏杆。 用DI8DEVCLASS_GAMECTRL作为types枚举所有操纵杆,DIEDFL_ATTACHEDONLY作为标志来检索数据。 最近引起了我的注意,我们有多个游戏杆出现。 首先,我查看了在重新启动之间存储组件的xml文件。 有两个游戏杆,Logitech Extreme 3d pro,每个都有一个独特的产品guid。 我支持文件并将其删除,在重新启动机器后下次启动应用程序时,强制重新扫描机器。 我能够得到同样的问题发生,并注销指导,他们是不同的每个。 该系统只有一个单一的操纵杆插入,但它通过一个USB集线器插入。 枢纽是否影响我所看到的指导? 我也可能只有5次尝试中才有可能发生这种情况。 例: 操纵杆产品GUID:3C6A972000000000504944564944操纵杆实例GUID:3C6A972097C11E3800144455354 操纵杆产品GUID:DA83AFB000000000504944564944操纵杆实例GUID:DA83AFB0D7B211E2800144455354

SlimDX:Joystick.Poll()成功断开游戏手柄

我对SlimDX有一个好奇的问题:我们已经在Windows 7上看到了这个问题,并且还没有testing其他版本:我正在使用一捆便宜的USB游戏手柄(没有序列号),有时候一个物理游戏手柄结束向多个Joystick对象提供input。 该场景是: 将游戏手柄1插入到集线器插槽1. Pad在DirectInput.GetDevices显示为GUID f17b2d30。 为平板创buildJoystick对象。 将游戏手柄2插入到插槽2中。Pad作为GUID 5187d2d0出现在DirectInput.GetDevices中。 为平板创buildJoystick对象。 按下游戏手柄2上的button。不改变状态。 按下游戏手柄1上的button。在两个对象上的Poll()之后,button出现在GetCurrentState() 。 拔下游戏手柄2.其对象上的Poll()方法继续无误地返回,但不再出现在DirectInput.GetDevices 。 按下游戏手柄1上的button。在两个对象上的Poll()之后,button出现在GetCurrentState() 。 我已经在debugging器中检查了对象。 每个Joystick通过Information.InstanceGUID引用正确的GUID,但在Properties.InterfacePath每个都有相同的USBpath。 游戏手柄硬件似乎正常工作 – 如果我使用控制面板游戏手柄testing仪执行相同的操作,游戏手柄保持不同。 DirectInput GUID似乎是基于USB PID和VID分配的,然后是相同的游戏手柄插入的顺序,而不是它们插入的USB端口的物理path。 如果我混合使用不同型号的游戏手柄,问题就会消失。 这感觉就像一个SlimDX甚至是一个DirectInput的错误 – 有没有解决这个问题的方法?

如何在Windows上捕获桌面,以便捕获directX和正常渲染的屏幕部分?

简单的例子 – 一方面,我们看到通过标准软件呈现的相机呈现在另一方面的“input”(标记为“输出”)通过一些DirectX的东西呈现(至less在我看来): 那么windows api或者DirectX api提供了什么function来捕获这样的混合场景呢?

API来获取graphics或video内存

我想获得你可以在显示设置或使用API​​的设备pipe理器中看到的adpater RAM或graphicsRAM。 我在C ++应用程序。 我已经尝试在网上seraching,并根据我的RnD我得出结论,我们可以从1 DirectX的SDK结构称为DXGI_ADAPTER_DESC的graphics内存信息。 但是,如果我不想使用DirectX API。 2. Win32_videocontroller:但是,如果video控制器的可用性是离线的,这个类并不总是给你adapterRAM信息。 我已经在Vista上检查过了。 有没有其他的方式来获得graphicsRAM?

DirectX全屏窗口通过使用Windows API函数的窗口句柄进行窗口化

短篇故事 游戏开始全屏,但是是一个全屏directX窗口。 游戏支持窗口,但我必须手动。 我在Delphi中创build了一个程序,可以对任何窗口进行拉伸/resize以适应屏幕(使用系统范围的热键),无边框和标题,因此看起来像全屏,但不会触发直接的硬件访问。 这很重要,因为我使用的是不支持直接硬件访问所使用的技巧的DisplayLink适配器,但是想要在没有难看边框的情况下全屏播放它。 我可以调整除全屏DirectX窗口以外的任何窗口,我必须手动将全屏模式更改为窗口,这是我想要自动化。 长话短说 (向下滚动,如果你想知道这个问题) 我有一台DisplayLink适配器,电视屏幕距离电脑5米。 我想用它来运行游戏,所以我可以从沙发上玩游戏。 但是,DisplayLink驱动程序不能全屏播放大多数游戏,因为大多数游戏都会绕过桌面窗口pipe理器(DWM)直接在全屏时访问graphics硬件。 这是DisplayLink常见的/已知的问题。 在窗口模式下,适配器执行得非常好,所以我想在Delphi中编写一个小程序,将窗口化的directx屏幕最大化,而不是通过最大化全屏来实现,而是将窗口延伸到全屏。 我做的程序工作得非常好,但是只有当directx屏幕已经被打开时(游戏开始全屏,所以我必须点击一次窗口的图标才能使它成为窗口)。 游戏已经有了一个选项,可以在启动时加窗,但固定分辨率的可能性较小。 我想在全屏启动时自动执行此过程。 我想将directx屏幕更改为窗口,然后将其调整为全屏,而不是最大化。 程序如何工作 该程序定义了一个全系统键盘热键。 当按下热键时,程序将所有活动的前景窗口(窗口API getForeGroundWindow() )拉伸到全屏,使其成为无边界窗口,使其看起来像全屏。 这使您也可以在任何您喜欢的屏幕上运行游戏,而不仅仅是在系统的主屏幕上。 再次按热键时,窗口返回到之前的状态(切换)。 在应用“补丁”之前,它也检查窗口的types,所以它不能在不可resize的窗口上使用。 题 我知道窗口的把手必须被拉伸/调整到全屏。 当它是一个全屏DirectX窗口,我不能做任何事情,除非它是窗口。 如何通过向这个窗口句柄( sendMessage() )发送消息来将其状态更改为窗口状态。 这可能吗? 一些代码 (给你一些想法幕后发生的事情) function TWinSpread.setWindowStyleBounds( h : hWnd; lStyle : LongInt = 0; pR : PRect = nil ) : LongInt; var bRestore : […]