有一种简单的方法在Java中使用DirectX吗?特别是DirectX的视频API.
我知道C#可能是一个更自然的选择,但我有狡猾的理由想要做一些如此不正常的事情.
我想写一个改变麦克风输入语音的应用程序,让它像机器人或一些有趣的男人的声音.它必须支持发送改变的语音到所有应用程序,如IM软件或游戏客户端.我应该选择哪种技术?Windows WaveForm Api?的DirectX?音频驱动?
非常感谢你!
我想做一些项目让我的简历对游戏公司更具吸引力.所以我要开始买书了.但我不知道要开始阅读DirectX 9或10 api书籍.DirectX10很棒,但似乎行业正在慢慢变为10.所以我应该使用9还是10?
我正在更新一个应用程序,在该应用程序中,在屏幕上显示刺激时间的测量需要最大的准确度.它目前用DirectDraw编写,很久以前就被放到了牧场,需要更新我们的图形库.
我们测量呈现时间的方式利用检测垂直空白周期的结束.具体而言,当需要翻转到主表面(或在交换链中呈现)的任何内容实际上被屏幕绘制时,我需要知道最大可能的准确度.检测扫描线可以增加该测量的确定性,但是我能够仅在检测到在翻转或存在之后立即结束垂直空白时段的情况下工作.
Direct 3D 9具有IDirect3DDevice9 :: GetRasterStatus方法,该方法返回包含InVBlank布尔值的D3DRASTER_STATUS结构,该结构描述设备是否处于垂直空白以及当前扫描线.DirectDraw具有类似的功能(IDirectDraw :: GetVerticalBlankStatus,IDirectDraw :: GetScanLine,它在Vertical Blank期间返回DDERR_VERTICALBLANKINPROGRESS,可用于检测VB).
但是我在Direct3D11中找不到任何类似的功能.有没有人知道Direct3D9和Direct3D11之间是否移动或删除了这个功能,如果是后者,为什么?
我想将向量和矩阵相乘.向量是XMVECTOR类型,矩阵是XMMATRIX类型.我在DirectX SDK中找不到任何功能.有XMMatrixMultiply,但只有两个个矩阵,同为载体-无(vector, matrix)功能.
我有一些用C#编写的DirectX项目,我需要专门通过Visual Studio 2012运行.
所有这些项目都使用名为"Microsoft.DirectX"的命名空间.
Microsoft Windows SDK在我的Windows 8计算机上完全成功安装,但是此命名空间仍然无法识别.
我的问题是,"如何使用C#,Visual Studio 2012和MS Windows SDK的组合运行和开发DirectX应用程序?"
在我的OpenGL体验期间,我经常忘记设置一些状态.所以我认为状态机今天可能不是一个好的设计.但现在必须兼容.而且我也知道DirectX在早期也是一台状态机.我想知道为什么OpenGL和DirectX最初被设计为状态机?
我正试图在Sharpdx/DirectX应用程序中寻找可能的内存泄漏.
我从流程资源管理器中获取以下信息,我不知道如何解释.

我正在修改一个旧的Windows DirectDraw游戏.我已经创建了一个DirectDraw代理.它记录每个IDirectDraw和IDirectDrawSurface调用.一次通话后,backbuffer看起来像这样BltFast:

而像这样之前的下一个BltFast呼叫:

通过在任何呼叫之前和之后Lock复制后备缓冲器Unlock来转储这些图像BltFast.这两个BltFast调用之间没有其他IDirectDraw(Surface)调用,尤其是没有Lock/ Unlock调用.这怎么可能?
在开发检查软件时,我有一个要求防止通过TeamViewer,AnyDesk,Ammyy Admin等应用程序共享桌面,或者至少阻止对其进行检测。我们的考试软件是用C#开发的,它是一种winform逐一呈现问题。
我不认为检测如此简单,因为它们有多种捕获屏幕桌面复制API,BitBlt,Direct3D,DirectX,DirectShow等方法。
因此,我开始探索如何防止在启动桌面共享时显示我的c#winform。为此,到目前为止,我已经尝试了以下操作:
SetWindowDisplayAffinity为WDA_MONITOR对Winform 启用保护的桌面组合来利用DWM(停止窗口管理器)。通过在我开始桌面共享时执行此操作,远程控制的计算机可以看到表单上的黑色层。但是,并非所有桌面共享应用程序都具有相同的行为。就像TeamViewer的行为一样,但Ammyy Admin的行为却像AnyDesk。某些应用程序如何显示黑层而有些则不显示?我还能做些什么吗? if (winForm != null)
{
if (Protect)
result = SetWindowDisplayAffinity(winForm.Handle, WDA_MONITOR);
else
result = SetWindowDisplayAffinity(winForm.Handle, WDA_NONE);
}
Run Code Online (Sandbox Code Playgroud)
我编码的这种方法并不完全适用于所有桌面共享应用程序,因此,是否有100%的解决方案可以防止/检测桌面共享?
如果您尝试了VLC播放器的“ DirectX(DirectDraw)视频输出”,那么此输出方法也将执行相同的操作SetWindowDisplayAffinity,当启动任何桌面共享应用程序时,它将在视频上显示黑色图层,而我测试了该功能是否可与将近9种桌面共享应用程序一起使用知道怎么做?可以用c#winform完成吗?
更新29-05-2019
检查VLC代码后,我知道它们正在使用DirectDraw进行硬件覆盖。因此,我创建了vc ++项目并使用d3d9并创建了具有红色表面的覆盖,现在,如果我将机器移开,则红色的表单将显示黑色。答对了!!解决了一半问题。
现在,我正在尝试为该窗口设置透明度,以便覆盖将在我的C#应用程序的顶部,并且考生可以进行考试,如果进行远程考试,则覆盖将以黑色显示。为了使窗口透明,我使用了DwmExtendFrameIntoClientAreawinapi,但是现在在远程也可以将其显示为透明。有什么办法吗?