Articles of DirectX

DirectX桌面

我想为使用DirectX的Windows 7制作animation桌面背景。 我正在使用C#,SlimDX和一些Windows API函数的P / Invoke导入。 我并不擅长使用本机Windows编程,但是我在网上有一个捅,我相信我需要做的是: 1)find包含dekstop壁纸的窗口的句柄,将其挂接到DirectX设备并绘制到其中。 2)制作一个新的输出窗口,并将其插入到桌面壁纸的上方,但在桌面图标的下方。 我已经尝试了这两个,但似乎都没有工作。 如果我从GetDesktopWindow()返回的句柄开始浏览窗口的层次结构,我可以去Desktop – > WorkerW – > SHELLDLL_DefView – > SysListView32。 如果我将DirectX设备连接到此句柄,则可以绘制整个桌面,但也会覆盖这些图标。 如果我创build一个Windows窗体,使用SetParent()将它的父窗体设置为SHELLDLL_DefView,然后使用SetWindowPos来播放它的Z顺序,我似乎只能把它放到桌面壁纸的后面或桌面+图标的前面。 它看起来好像桌面壁纸是包含图标的文件夹视图的背景,因此我正在尝试做的事情无法正常工作。 唯一的解决scheme就是不使用桌面上的图标,或find一些替代scheme,例如覆盖桌面,然后覆盖一个包含某个文件夹内容视图的透明窗口。 有没有人知道我应该做什么,甚至不知道我想做什么是可能的? 看来你可以使用GDI(因为我相信wxSnow程序)可以绘制到桌面背景,而且我已经看到类似于我在Windows XP下使用DirectX壁纸模式所做的VLC媒体播放器的东西(有趣的是,我似乎无法让我的系统上启用此选项)。 谢谢!

为什么没有Linux的DirectX API?

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

如何在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 : […]

OpenGL或Direct3D的新的Windows游戏项目? 或者是其他东西?

我在Windows上开始一个爱好游戏项目,将大量使用3Dgraphics效果。 它很可能会用C ++编写。 我应该使用OpenGL还是Direct3D作为我的graphics后端? 为什么? 还是应该使用现成的graphics引擎,如OGRE 3D ? 哪一个? 一些“如何开始”的链接将是有用的。 (无论是技术还是两者兼有) 编辑 – 是的,我真的意味着Direct3D,而不是DirectX,感谢graham.reeds澄清 编辑 – Mihai Lazar指出,我也可以使用像OGRE 3D这样的graphics引擎。 编辑这个问题来反映这个select。

Windows 8 SDK中保留了哪些DirectX组件?

背景 :我已经在Visual Studio 2013中开发了,并且在Windows 7上运行.Net 4.5。我一直试图让DirectX在WPF上下文中运行,并被引用到SharpDX,以及使用它的示例程序: http ://sharpdxwpf.codeplex.com/SourceControl/latest#SharpDX.WPF.sln 当我试图build立它时,我得到错误,因为'd3dcompiler_43.dll'丢失。 我通过明确下载DirectX最终用户运行时( https://www.microsoft.com/en-us/download/details.aspx?id=8109 ) 我的问题 :根据MSDN,DirectX已被折叠到Windows 8 SDK( https://blogs.msdn.microsoft.com/chuckw/2012/03/22/where-is-the-directx-sdk/ )中,并根据它包含在Visual Studio 2012中的同一文档中。 由于我使用VS2013(专业),我认为它也包括在内。 那么为什么我必须明确地下载DirectX最终用户软件包来获取我的DLL? 还是Windows 8 SDK不包括传统的DLL? (如果是这样,传统程序应该如何在Windows 8和10中工作?)有人可以请我用实用的术语来解释DirectX路线图吗?

如何实现语音转换器?

我想写一个应用程序,改变麦克风input的声音,使它像机器人或一些有趣的人的声音。它必须支持发送改变的声音,所有的应用程序,如IM软件或游戏客户端。 我应该select哪种技术? Windows WaveForm Api? 的DirectX? audio驱动? 非常感谢你!

api-ms-win-core-libraryloader-l1-2-0.dll丢失,当d3dcompiler_47.dll被重新分发

根据Windows 8.1 DirectX SDK的指示,d3dcompiler_47.dll将从现在开始用任何Direct3D程序重新分配。 当我尝试在Windows 7机器上运行我的程序与此dll在相同的文件夹中,我得到一个“api-ms-win-core-libraryloader-l1-2-0.dll丢失”错误。 快速谷歌searchbuild议这是因为一个版本的混淆 – d3dcompiler_47.dll与本机不兼容? 我已经检查过,以确保它安装了DirectX 11,这是我正在使用的DirectX版本,并且无法弄清楚为什么会发生这种情况。

如何将frontBuffer数据复制到纹理DirectX 9

我似乎无法find从我的应用程序的前台缓冲区数据获取的曲面数据创build纹理的方法 这是我很确定的代码工作(Direct X 9,C ++) // capture screen IDirect3DSurface9* pSurface; g_pd3dDevice->CreateOffscreenPlainSurface(640, 480, D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &pSurface, NULL); g_pd3dDevice->GetFrontBufferData(0, pSurface); 现在我已经有了我的frontBufferData,我想用它创build一个IDirect3DTexture9对象。 这个函数/ D3DXCreateTextureFromFileInMemory /似乎是最合乎逻辑的,但似乎没有办法。 我很确定有一种方法可以做到这一点,艰难,我不确定如何。 任何帮助将非常欢迎! 谢谢!