Tag: directx

E_INVALIDARG:将无效参数传递给返回函数

我试图制作一个简单的SlimDX示例来测试一些性能与GDI,不幸的是我一开始就陷入了困境。 我在VS2010中创建了简单的控制台应用程序,并将此代码添加到程序main方法中: // 0. STEP SlimDX.Direct3D10.Device device = new SlimDX.Direct3D10.Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport); SlimDX.Direct2D.Factory factory = new SlimDX.Direct2D.Factory(); // 1. STEP Texture2DDescription textureDesc = new Texture2DDescription(); textureDesc.Width = 512; textureDesc.Height = 512; textureDesc.MipLevels = 1; textureDesc.ArraySize = 1; textureDesc.Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm; textureDesc.SampleDescription = new SampleDescription(1, 0); textureDesc.Usage = ResourceUsage.Default; textureDesc.BindFlags = BindFlags.RenderTarget; textureDesc.CpuAccessFlags = CpuAccessFlags.None; textureDesc.OptionFlags = […]

如何在XNA中使用DirectX.DirectInput

joystick.cs using System; using Microsoft.DirectX.DirectInput; namespace gameproject { /// /// Description of device. /// class joysticks { public static Device joystick; public static JoystickState state; public static void InitDevices() //Function of initialize device { //create joystick device. foreach (DeviceInstance di in Manager.GetDevices( DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly)) { joystick = new Device(di.InstanceGuid); break; } if (joystick == null) […]

C#directx sprite origin

当我的Sprite旋转原点固定在窗口的左上角时我有这个问题(与sprite.Draw和sprite.Draw2D相同)无论哪种方式,如果我改变旋转中心它仍然在左上角。 我需要精灵绕其Z轴旋转。 编辑:我试过这个: hereMatrix pm = Matrix.Translation(_playerPos.X + 8, _playerPos.Y + 8, 0); sprite.Transform = Matrix.RotationZ(_angle) * pm; sprite.Draw(playerTexture, textureSize, new Vector3(8, 8, 0), new Vector3(_playerPos.X, _playerPos.Y, 0), Color.White); 但它似乎不太好用……

如何在C#中在我的机器上获得直接X版本的代码?

我想知道当用户点击菜单项时,他应该能够知道他的机器上安装的直接X版本吗? 我想在VS2008中用C#编写代码。 我应该在菜单项点击事件中写什么? 我是C#的初学者,所以不知道从哪里开始.. 任何人都可以帮忙吗? 谢谢..

SlimDX Device.Reset崩溃,出现“D3DERR_INVALIDCALL:无效呼叫(-2005530516)”错误

我们最近从VS 2005升级到VS 2008 (Windows XP)。 我们在其中一个项目中使用SlimDx 。 升级后一切正常,除了我的恢复function,它会在devicelost / device reset上调用 D3DERR_INVALIDCALL:无效通话(-2005530516) 我使用Ctrl – Alt – Del然后Escape来模拟丢失的设备。 void Recover() { try { if (res.Code == D3DERR_DEVICENOTRESET) { res = m_device.Reset(m_presentParams); //Crashes on this. if (res.IsSuccess) { m_deviceLost = false; } } } catch(Exception e) {} } 这与VS 2008有什么关系,因为它曾经与VS 2005很好地配合使用?

检查安装了哪个版本的DirectX

根据标题,我如何检查用户安装的DirectX版本? 检查FeatureLevel是不够的,因为我的应用程序可以在function级别10.0上运行,但需要安装DirectX 11.1。 为什么这不重复: 如何在C#中在我的机器上获得直接X版本的代码? 这个问题的第一个答案是“如果Windows 7,DirectX = 11,如果Windows Vista,DirectX = 10”。 这是错误的,因为Vista支持DirectX 10和11,Windows 7支持DirectX 11和11.1。 第二个答案引用了一个仅适用于DirectX 9及更低版本的注册表项。 即使在安装了DirectX 11.1的Windows 7系统上,此注册表项也不会指示安装的版本大于9.0c .NET如何检测是否支持DirectX 10? 这个问题的答案再次引用了DirectX 9和更低版本的相同注册表项。 我需要一个适用于DirectX 10安装及以上的答案。 这意味着确定他们的版本是10,10.1,11或11.1。

来自C#的DirectX

我正在研究在C#中使用DirectX的各种选项; 理想情况下,我想使用微软首选的任何技术。 非Microsoft技术: SharpDX 超薄DX Direct2D Manager Wrapper 微软技术: WPF 用于托管代码的DirectX 9.0(不建议使用) XNA Framework(已弃用) 我想要使​​用的技术背后的基本原理: 我想要一个代码优先的框架(而不是在WPF中编写XAML) 我希望(理想情况下)Microsoft支持的框架不被弃用 我想构建不过度依赖第三方依赖的应用程序(即如果我要使用WPF构建应用程序,该框架可能已经作为.NET框架的一部分安装在用户计算机上) 问题: 什么是Microsoft首选的编写DirectX exabled应用程序的方法(除了WPF)? 使用弃用技术(MDX,XNA)有哪些危险? 什么是可以在C#中使用的最流行的非Microsoft DirectX技术?

如何用C#分别控制立体声帧? (NVIDIA 3D快门眼镜)

我正在尝试制作一个非常简单的应用程序,它会在每只眼睛上显示不同的图像。 我有华硕VG236H显示器和NVIDIA 3D Vision套件,立体3D快门眼镜。 我正在使用C#,.NET Framework 2.0,DirectX 9(Managed Direct X)和Visual Studio 2008.我一直在搜索高低版本的示例和教程,实际上找到了一对并基于我创建的程序但是由于某种原因,我不能让它工作。 在寻找如何为每只眼睛显示不同图像的示例时,许多人不断参考GDC 09(着名的GDC09-3DVision-The_In_and_Out.pdf文档)和第37-40页的NVIDIA演示文稿。 我的代码主要是基于这个例子构建的: 我在表面上加载了两个纹理(Red.png和Blue.png)(_imageLeft和_imageRight),在函数LoadSurfaces()中 Set3D()函数将这两个图像并排放置到一个较大的图像中,该图像的大小为2x屏幕宽度和屏幕高度+ 1(_imageBuf)。 通过在最后一行附加立体声签名继续Set3D()函数。 OnPaint() – 函数获取后台缓冲区(_backBuf)并将组合图像(_imageBuf)的内容复制到它。 当我运行程序时,快门眼镜开始工作,但我只能在屏幕上并排看到这两个图像。 有人可以帮忙告诉我我做错了什么吗? 我相信解决这个问题也可能有助于其他人,因为似乎还没有一个简单的例子如何用C#做到这一点。 以下是我的代码的战术部分。 完整的项目可以在这里下载: http : //koti.mbnet.fi/jjantti2/NVStereoTest.rar public void InitializeDevice() { PresentParameters presentParams = new PresentParameters(); presentParams.Windowed = false; presentParams.BackBufferFormat = Format.A8R8G8B8; presentParams.BackBufferWidth = _size.Width; presentParams.BackBufferHeight = _size.Height; presentParams.BackBufferCount = 1; presentParams.SwapEffect […]

从Windows 8应用程序中生成的缓冲区播放声音

我正在将一些C#Windows Phone 7应用移植到Windows 8。 手机应用程序使用XNA SoundEffect从缓冲区播放任意声音。 在最简单的情况下,我只需创建所需持续时间和频率的正弦波。 持续时间和频率都可能有很大差异,所以我宁愿不依赖MediaElements(除非有一些方法可以改变基本文件的频率,但这只会帮助我生成单一频率)。 WinRT中的XNA SoundEffectInstance相当于什么? 我假设我需要使用DirectX,但我不确定如何从其他C#/ XAML应用程序中进行此操作。 我已经看过SharpDX ,但它似乎没有我认为我需要使用的DirectSound,SecondaryBuffer,SecondaryBuffer类。 我上面做了一些假设。 可能是我正在寻找错误的类,或者有一种完全独立的方式从Windows 8应用程序生成任意声音。 我找到了一个使用SharpDX的XAudio2通过AudioBuffer播放wav文件的例子 。 这看起来很有希望,我只需要将生成的音频缓冲区替换为本机文件流。 PM>安装包装SharpDX PM> Install-Package SharpDX.XAudio2 public void PlaySound() { XAudio2 xaudio; MasteringVoice masteringVoice; xaudio = new XAudio2(); masteringVoice = new MasteringVoice(xaudio); var nativefilestream = new NativeFileStream( @”Assets\SpeechOn.wav”, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read); var soundstream = new SoundStream(nativefilestream); var […]

如何消除动画撕裂?

我在WinForms应用程序中以18.66666运行动画…每秒帧数(它与140 BPM的音乐同步,这就是为什么帧速率很奇怪)。 动画的每个单元都是预先计算的,动画由高分辨率多媒体计时器驱动。 动画本身很流畅,但是我看到了大量的“撕裂”,或者是因为屏幕刷新中途被cels捕获而导致的文物。 当我获取我的程序渲染的一组cels并将它们写出到AVI文件,然后在Windows Media Player中播放AVI文件时,我看不到任何撕裂。 我假设WMP平滑播放文件,因为它使用DirectX(或其他东西)并且能够将渲染与屏幕的刷新活动同步。 它不会改变帧速率,因为动画与音频保持同步。 这是为什么WMP能够渲染动画而不会撕裂,或者我错过了什么? 有没有什么方法可以使用DirectX(或其他东西),以使我的程序能够知道当前扫描线的位置,如果是,有什么方法可以使用该信息消除撕裂而不实际使用DirectX用于显示cels? 或者我是否必须完全使用DirectX进行渲染才能解决此问题? 更新 :忘了细节。 我的应用程序使用Graphics.DrawImage将每个单元格渲染到PictureBox上。 这是否比使用BitBlt慢得多,这样我可以通过使用BitBlt来消除至少一些撕裂? 更新2 :我看到的效果肯定不是闪烁(这与撕裂不同)。 我的面板是双缓冲的,为AllPaintingInWmPaint,UserPaint,OptimizedDoubleBuffer等设置控件样式,覆盖onPaintBackGround等等。 所有这些都是消除闪烁所必需的,但撕裂的问题仍然存在。 当动画具有非常快速移动的物体或物体从非常快速地从亮到暗变化时,它尤其明显。 当物体缓慢移动并且不会快速改变颜色时,撕裂效果就不那么明显了(因为连续的cels总是非常相似)。