问题标签 [slimdx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
13118 浏览

c# - Direct2D / GDI+ 和缓慢的 Windows 窗体绘图 - 可以做什么?

我经常使用 Visual Studio 2008、.NET C# 2.0-3.5 和 Windows 窗体,我注意到,像我之前的许多人一样,GDI+ 在绘制控件方面非常慢。请注意,我不太会处理图像(JPG、GIF 等)。图像仅在某些地方作为图标。这实际上是绘制缓慢的控件/表单/等。

问题是您可以看到正在绘制的控件,并且可能需要几秒钟才能绘制一组看似简单的控件。即,它的滞后和可怕。

我已经进行了测试,我只是在表单上放置了一些标签(40-50),按 F5 运行并且必须等待它们被绘制。再次,滞后,不是一个很好的体验。

所以,有 WPF 可以解决这个问题,但我/我们还没有准备好迁移到 WPF。所以我四处寻找解决方法或修复程序,我偶然发现了 Direct2D,并且在阅读其他一些库时。

让我有点困惑,因此有这些问题:

1) 首先,我想要的是一种相当简洁的方法,只需用更快和硬件加速的方法替换GDI+。是否可以在不使用 WPF 且无需重写所有 Windows 窗体代码的情况下做到这一点?

每当我在 Direct2D 上阅读任何内容时,我都会看到一长串通常很糟糕的 C++ 代码,告诉我如何手动编写代码以进行绘图。我不要那个。

2) 在网上阅读时,我偶然发现了 SlimDX,但我不知道如何使用它(我承认,我在写作时没有尝试过很多)。假设我已经有一个 GUI 应用程序(Windows 窗体,标准 C# 代码)——我可以以某种方式使用 SlimDX(或类似的东西)来“替换”GDI+ 而无需过多重写吗?

我的问题是我找不到任何示例或类似的东西来告诉我是否可以在我已经创建的 Windows 窗体软件中使用 SlimDX、Direct2D 或其他类似的东西,如果可以的话 - 怎么做。

希望我不要太模糊=)

==编辑== 2010-09-22

我已经在我的真实应用程序中进行了一些测试,并将其中一件缓慢的事情隔离出来:

当我将文本添加到用户控件中的某些标签时,控件会自行调整大小以适应文本。例如,包含 GroupControl 会稍微适应刚刚添加到 Labels 的 .Text-property 的文本的大小。

大约有 10 个标签控件。第一次更新标签并因此更改大小时,整个过程大约需要 500 毫秒。第二次更新标签,大小没有变化,大约需要0毫秒。

==编辑 2== 2010-09-22

发现其中一个减速。然后将字符串添加到 Text-property 如果正在添加的文本的字符串长度与更新前的文本不同,则会很慢。

我正在使用 DevExpress 库,并且可以将 LabelControls 设置为 AutoSizeMode。如果我将其设置为“无”,那么当添加长度与前一个文本不同的文本时,延迟就会消失。我猜这个问题对于普通的标签控件来说是一样的,因为它也有一个 AutoSize = true/false 设置。

然而,它是一种“解决方法”,但仍然证明了我的观点——调整大小时它真的很慢,这很蹩脚。

0 投票
1 回答
7549 浏览

c# - 使用 SlimDX 和 DirectSound (C#) 播放声音

(抱歉,如果这是重复的......我发布但没有看到它实际上进入论坛的证据)

我一直在尝试让 SlimDX DirectSound 正常工作。这是我的代码。它从 wav 文件填充辅助缓冲区,然后在线程循环中交替填充缓冲区的下半部分或上半部分。

它可以很好地播放缓冲区的第一次加载。AutoResetEvents 在它们应该触发时触发,并且填充缓冲区的下半部分和上半部分(使用 Debug 语句验证)。但是在第一次加载缓冲区后播放不会继续。因此,缓冲区的重新填充以某种方式无法正常工作。

想法?

(我使用 DirectSound 是因为它是我发现设置要使用的音频设备的 guid 的唯一方法。我对其他 .NET 友好的方法持开放态度。)

0 投票
1 回答
1506 浏览

directx - DirectX11:将数据从 ComputeShader 传递到 VertexShader?

是否可以对要使用计算着色器渲染的几何数据应用过滤器,然后将结果用作顶点着色器中的输入缓冲区?这样可以省去我读回数据的麻烦(和时间)。

任何帮助深表感谢。

0 投票
1 回答
743 浏览

directx - 断开,然后重新连接引脚

我正在使用 DirectShow.net 和 SlimDX 将视频纹理放在四边形上。我在设备丢失时遇到了问题。我无法重置我的设备。经过数小时的谷歌搜索,我找到了一个论坛主题,解决方案是断开 vmr9 引脚,重置设备并重新连接引脚。

我知道如何断开连接:

有了这个,重置就可以了,但是我怎样才能再次连接?

0 投票
2 回答
5296 浏览

c# - SlimDX 和 WPF 通过 D3DImage

我使用 SlimDX 和 WPF 编写了一些代码,我希望最终结果是红屏。

不幸的是,我得到的只是黑屏。

这是在 Windows 7 上。

任何人都可以看到我缺少的任何主要内容吗?

我使用单独的表面作为后缓冲区的原因D3DImage是我将需要多个视口。我认为渲染到单独的表面而不是设备的初始后缓冲将是实现这一目标的最佳方式。

无论如何,继续使用代码..

免责声明:请忽略不良代码,这完全是作为一次性代码编写的,这样我就可以弄清楚如何实现我所追求的目标。

这是我的窗口类:

这是我的“渲染器”类

-- 编辑:有一秒钟我以为我已经解决了,但它似乎只在我的第二个渲染目标(我试图清除红色的那个)是 640x480 时才有效。有什么想法吗?

0 投票
2 回答
1845 浏览

c# - 基于 SlimDX 的大型和/或开源游戏

是否有任何基于 SlimDX 框架的主要游戏或开源游戏?我知道它几乎只是 DirectX 之上的一个包装器,但看到它在成熟的环境中使用仍然很有趣。

我也在寻找一些游戏背后的故事:关于如何选择框架、存在哪些陷阱等的一些事后看法。

0 投票
3 回答
1728 浏览

directx - SlimDx 全屏切换到窗口模式的问题

我正在使用 SlimDx 上的教程 - http://slimdx.org/tutorials/devicecreation.php并注意到交换链没有 IsFullScreen 属性。因此,我尝试使用其他可用的方法并遇到了问题。- 当我切换到全屏时,它会正常运行;但是,当我切换回非全屏时,我看到的只是一个不可移动的空白框。

怎么了?为什么没有教程中的 isFullScreen 属性。设备是否在某处丢失?

0 投票
2 回答
7756 浏览

c# - SlimDX DirectInput 初始化

我最近使用 Direct3D 11 从 MDX 2.0 切换到 SlimDX,但我在努力实现键盘和鼠标控制。

在 MDX 中,您可以使用

设置键盘界面,但是 SlimDX 有不同的方法。在 SlimDX 中,Device 是一个抽象类,取而代之的是一个必须通过传入 DirectInput 对象来初始化的 Keyboard 类,但我终其一生都无法弄清楚如何创建 DirectInput 对象或它的用途。

据我所知,SlimDX 的文档非常少,如果有人知道任何用于学习其特殊怪癖的好资源,那将是非常棒的,谢谢。

0 投票
1 回答
3681 浏览

c# - 使用 SlimDX 设置常量缓冲区

我一直在关注 Microsoft Direct3D11 教程,但使用的是 C# 和 SlimDX。我正在尝试设置常量缓冲区,但不确定如何创建或设置它。

我只是尝试使用常量缓冲区设置三个矩阵(世界、视图和投影),但我在每个阶段都在苦苦挣扎,创建、数据输入并将其传递给着色器。

MSDN 上的 HLSL(我基本上已经复制了)是:

MSDN 上的 C++ 代码是:

有人知道如何将它翻译成 SlimDX 吗?或者,如果有人知道任何也有用的 SlimDX 教程或资源。

谢谢。

0 投票
1 回答
3291 浏览

c# - SlimDX Direct3D 11 索引问题

我正在尝试使用 SlimDX 和 Direct3D11 绘制索引正方形。我已经设法绘制了一个没有索引的正方形,但是当我切换到我的索引版本时,我只是得到一个空白屏幕。

我的输入布局设置为仅获取位置数据(我实际上是从 SlimDX 网站上的第三个教程扩展而来)并绘制三角形列表。

我的渲染循环代码如下(我正在使用教程中的 triangle.fx 像素和顶点着色器文件,它们采用顶点位置(在屏幕坐标中)并将它们涂成黄色,D3D 是 SlimDX.Direct3D11 的简写)

“mesh”是一个包含顶点缓冲区、索引缓冲区和顶点计数的结构。数据在这里填写:

所有这些几乎与我的未索引正方形方法相同(添加了索引缓冲区和索引,并删除了索引不需要的两个重复顶点),但是当未索引方法绘制一个正方形时,索引方法没有不。

我目前的理论是这条线有问题:

或者这些行: