Articles of DirectX

WPF主应用程序停止响应,如果一个子窗口正在移动

我们有一个用C#编写的应用程序,使用WPF。 它有一个基于计时器的激活事件,导致在DirectX上下文中绘制一些graphics。 一切似乎都好,直到我们打开子窗口,并在屏幕上移动它。 时机似乎与计时器被解雇一致,但在那一刻,整个屏幕(甚至其他应用程序)似乎冻结,用户无法点击任何地方。 如果按下ALT + TAB组合键,正常操作将从完全相同的地方恢复。 在冻结状态期间,CPU /内存利用率没有上升,这导致我怀疑在主线程上存在某种阻塞。 通常情况下,如果我的应用程序在某些操作的中间挂起,我会去按Visual Studio的暂停,并在debugging器中看到线程视图。 这给了我足够的想法,哪个呼叫是罪魁祸首。 但在这种情况下,如果我按ALT + TAB切换到IDE,我的应用程序恢复正常执行。 如果我把我的IDE放在第二个屏幕上,并尝试点击(不需要按ALT + TAB),它也会被冻结(正如我之前提到的,整个桌面似乎被冻结到鼠标点击。正常) 任何人都面临/意识到类似的问题,我怎么可以继续debugging呢?

我正在寻找可以在graphics编辑程序中进行的任何优化

嘿哟,这是我第一次在这里问一个问题,所以如果我把事情搞得一团糟,就原谅我 我正在开发类似于openCanvas的程序,早期的程序允许多人在互联网上实时绘制相同的canvas。 OC的确很麻烦,而且有很多限制,所以我想写这个。 我已经设置了canvas,使canvas在所有方向上“无限”地延伸,并由512×512像素块组成,这些像素在被绘制之前不会变得活跃,这应该很容易制作,而且我正在考虑使用Direct3D使硬件加速,从而达到512平方块。 我的问题来了,当我想要使用图层,我不太确定如何快速构build图层,而不使用大量的内存,因为我的目标是128M内存的DirectX9兼容video卡,以及约3.2 ghz的系统的CPU的功率和2至8演出之间的RAM。 我有几种不同的方法,我正在考虑使用,并想知道哪个可能是最好的,如果有什么我可以研究,使其运行更好。 我的第一个想法是通过让所有块上的所有图层都作为纹理来使gfx硬件尽可能多地工作,并且通过locking更改的区域,在CPU上更新它们并解锁它们来更新它们。 当前未被更改的块被拼合成一个纹理,并且单独的图层本身保存在系统内存中,这将减less使用的gfx内存,但是会显着增加系统和gfx内存之间的带宽使用。 我可以看到不断的locking和解锁,可能会减慢系统的速度。 另一个可能的问题是,我听说有人使用200层,我想不出有什么好的方法来优化给定的上述。 我的另一个想法是将系统内存中的纹理完全合成,将它们写入纹理,然后将纹理复制到gfx内存以在每个块中渲染。 这似乎消除了其他方法中的很多问题,但同时我将所有工作都移到了CPU中,而不是平衡它。 但是,只要它仍然很快运行,这并不是什么大问题。 然而,再次,有几百层的问题。 在这种情况下,我可能只能更新实际上正在改变的最终像素,这是我认为像Sai和Photoshop这样的大型程序所做的。 我主要是在寻找build议,可能改善上述的build议,更好的方法,或链接到可能与这样的项目有关的文章。 当我用C ++编写它时,我从其他语言翻译没有麻烦。 谢谢你的时间〜

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? 这是可能的,但是很难实现吗?

如何实现语音转换器?

我想写一个应用程序,改变麦克风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 /似乎是最合乎逻辑的,但似乎没有办法。 我很确定有一种方法可以做到这一点,艰难,我不确定如何。 任何帮助将非常欢迎! 谢谢!

不同显卡上的DirectXfunction

我正在使用DirectX 9编写Direct3D应用程序。虽然它可以在我的电脑上运行,但是我需要使它在各种系统上运行。 我需要知道我可以期望在其他系统上看到什么function。 有显卡支持的DirectX function列表吗? 我find了一个网站,我会作为答案发布,但是有点过时了。 编辑#1:当然我会在使用之前testing所有的function。 但是有两种不同的方法来解决缺失的function:解决方法或者只是无法启动。 在决定采取什么方法之前,我需要知道有多less人会受到影响。 编辑#2:“能力”我的意思是由IDirect3D9 :: GetDeviceCaps返回的D3DCAPS9中的值。 这些可以(并且)在不同的显卡之间有所不同。

如何有效调整DirectX窗口?

我看了这个网站的例子: http : //www.codesampler.com/dx9src/dx9src_6.htm 但是代码很奇怪:它释放每个纹理,顶点缓冲区,一切! 然后再build立它们:从磁盘加载模型…我不认为这是非常有效的! OpenGL可以在没有这种限制的情况下进行窗口大小调整。 我怎样才能像OpenGL一样做:高效的窗口resize,而不需要释放我的程序中的每一个资源? 我试过上面的链接示例中的代码,没有那些invalidateDeviceObjects / restoreDeviceObjects函数调用,但它没有工作..所以我想这一定是要做的? 我希望没有,或者窗口大小调整将是一个大的应用程序,你有纹理,模型等数百兆字节的数据分配的痛苦。

什么是在Windows中采取截图的最快方式?

在Windows中捕获屏幕截图的最快方法是什么? 一个司机? 使用DirectX?