问题标签 [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 投票
1 回答
2208 浏览

c# - 在 SlimDX Direct3D 11 中将参数传递给常量缓冲区

这与使用 SlimDX 设置常量缓冲区有关

我有一个着色器,它非常简单,看起来像这样:

它所做的只是将通过常量缓冲区传入的颜色应用于绘制的每个像素,非常简单。

在我的代码中,我将常量缓冲区定义如下:

并将它设置在这里,在我的渲染循环中。

context 是我的 device.ImmediateContext 和 device 是我的 Direct3D 设备。然而,当它运行时,它会将我的像素绘制为黑色,尽管它已经通过了白色,所以很明显没有设置该值。

有人有什么想法吗?

0 投票
1 回答
3000 浏览

c# - Direct3D 11 WorldViewProjection 矩阵转换不起作用

我有一个简单的正方形,我正在使用 Direct3D 11 和 SlimDX 在 3D 空间中绘制,坐标如下(我知道它会渲染)

我有一个相机类,通过对视图矩阵应用矩阵变换来处理相机移动。例如 Camera.MoveForward(float x) 将相机向前移动 x。它还包含 View 和 Projection 矩阵。我使用以下代码实例化它们:

世界矩阵设置为单位矩阵。

在我的着色器代码中,我使用以下代码转换坐标:

WorldViewProjection 在我的代码中使用以下设置:

我知道相机类的转换正在工作,因为它是我为 MDX 应用程序编写的旧代码,它运行良好,但是当它运行时,我看到我的正方形,并且向前和向后移动工作得很好,但左右移动似乎会旋转正方形围绕 Y(向上)轴而不是平移它,向上和向下移动具有类似的效果,而是围绕 X(水平)轴旋转。

供参考,相机移动功能:

0 投票
1 回答
2514 浏览

c# - SlimDX 常量缓冲区创建导致无效参数异常

我有以下代码来实例化一个常量缓冲区并将其绑定到像素着色器。ConstantBuffers.EveryFrame 是 ConstantBuffers 类中的一个结构,它包含我需要在每帧基础上更新的所有数据(当前只有一个 Color3 对象)。

everyFrame 是一个 Direct3D11 缓冲区对象,我将其用作常量缓冲区。上下文是我的 D3DDevice.ImmediateContext

当我运行此代码时,我收到以下错误:

但是,当下面的代码运行时(在上面的代码之前只有几个调用)它工作正常。这段代码没有触及上面代码使用的任何变量,并且大多在单独的类中运行(设备通过类的构造函数传入,constantBuffer 是存储在类变量中的 Direct3D11 Buffer)

供参考的是 ConstantBuffer 结构

0 投票
1 回答
1277 浏览

c# - 停止 SlimDX 原始输入键盘“颤抖”

当您在文本编辑器中按住某个键时,该字符会出现,然后在出现字符流之前会出现短暂的停顿。这是补偿某些人比其他人按住键的时间更长/暂停思考等的系统。

我的问题是当我在 SlimDX Direct3D11 应用程序中按住移动键时会发生这种情况。它不会移动相机,而是移动 1 个单位,暂停,然后流畅地移动。

我使用以下代码来捕获键盘数据:

我使用一个类似的系统来捕捉鼠标,鼠标的移动工作流畅且响应迅速,所以问题必须出在键盘正在执行的自动更正中,以防止双击。有人知道如何阻止硬件这样做吗?或者,如果您应该在 DirectX 11 中以不同方式捕获输入?

0 投票
1 回答
1894 浏览

directx - 找出哪个显示器属于哪个适配器?

我正在开发适用于多显示器的 SlimDX 应用程序。应用程序将占据选定的显示,并且它的选择是通过命令行输入的,如 int。然后我用System.Windows.Forms.Screen.AllScreens[selection]它来了解绑定,并在该显示器上“全屏”显示我的应用程序。

现在,为了优化性能,我需要选择哪个 gpu 适配器来初始化 Direct3D 的设备。如何找出哪个 gpu 适配器正在为选定的显示器供电?

由于每个 gpu 适配器可能连接一到两个显示器,因此我无法使用显示器编号。

我正在使用 Direct3D10。我不介意 Direct3D9 中的解决方案。

更糟糕的情况是让用户通过命令行选择显示器和适配器,但我更喜欢傻瓜证明方法。

谢谢

0 投票
1 回答
380 浏览

directx - 第一次网格后缺少深度信息

我将 SlimDX 用于 Direct3D 10 应用程序。在应用程序中,我将 2 个加载到更多网格,图像加载为纹理并使用 fx 代码进行着色器。代码是根据 SlimDX 的示例“SimpleModel10”修改的

我将绘制调用、着色器设置代码移动到管理 1 个网格、着色器(效果)和绘制调用的类中。然后我初始化这个类的2个副本,然后依次调用draw函数。

输出,无论我如何更改网格的 Z 位置,稍后绘制的将始终保持在顶部。后来,当我使用 PIX 调试绘图调用时,我发现第二个网格没有深度,而第一个网格有深度。我试过 3 个网格,第 2 个和第 3 个网格也没有深度。有趣的是,所有这些都是从同一个类中实例化的,使用相同的绘图调用。

什么可能导致这样的问题?

以下是该类的绘制函数中的部分代码,我省略了其余部分,因为它涉及到几个类。我保留了样本的现有 OnRenderBegin() 和 OnRenderEnd():

编辑:经过大量调试和代码隔离,我发现罪魁祸首Font.Draw()在我的DrawString()函数中

注释掉 Font.Draw 解决问题。也许它会自动设置一些导致下一次网格绘制丢弃深度的状态。现在查看 SlimDX 的源代码。

0 投票
2 回答
594 浏览

c# - 从 C# 调用 C++/CLI 构造函数时出错

我正在尝试通过以下代码片段在 SlimDX 中使用 StateBlock 来保存和恢复状态:

StateBlockMask 和 StateBlock 都是类。这给了我一个编译错误:

从 SO 上的其他一些帖子中阅读,这似乎是一个与使用错误参数调用托管代码有关的问题。在 SlimDX 的源代码中,我发现:

我完全没有使用 C++/CLI 的经验,所以我想知道这里是否有问题(例如缺少或额外的 ^),还是应该将错误集中在我这边?

(注意:此问题已交叉发布到 gamedev.net,未来有相同问题的用户可能还想查看那里给出的答案)

0 投票
3 回答
5358 浏览

c# - SlimDX 和 WPF (DirectX 11)

我想使用 SlimDX (DirectX 11) 在 WPF 中呈现图像的内容。

问题是我找不到将 SwapChain 链接到 D3DImage 的方法。(DirectX 11 示例使用 SlimDX RenderForm。)

0 投票
2 回答
285 浏览

c# - 与 API 无关的 Vector3、Matrix 等?

我试图让我的游戏逻辑 API 不可知。这样做时,我不想使用 Unity3D 的 Vector3 结构或 XNA 等。最好的方法是什么?如果我滚动自己的 Vector3 结构并只是将隐式转换器写入各种 API 实现,这似乎会非常繁重。

这种事情有最佳实践吗?不是我可以要求微软、Unity等去野餐,坚持一个通用的界面。

0 投票
1 回答
917 浏览

wpf - WPF D3DImage 丢失前端缓冲区

我正在使用 VS.Net 10 和 SlimDX 编写代码以在 D3DImage 上呈现 3D 内容。它在 32 位 Windows XP 下完美运行。但是,在迁移到 64 位 Windows 7(四核和 4 GB Ram)后,相同的代码不再工作。症状是在渲染大约 10 或 20 次后,会引发 D3DImage 的 IsFrontBufferAvailableChanged 事件,并且 IsFrontBufferAvailable 的属性值为 false。

我已经检查了我能想到的所有内容,例如 RenderCapability.Tier、调用 SetBackBuffer、在前端缓冲区丢失后检查设备(实际上是 DeviceEx 类型)、更新显卡驱动程序(nvidia 9500 GT 1G RAM)等。 无其中有工作。

可能导致该问题的一件事是使用 D3DImage 作为源的图像控件不是在 GUI 线程上创建的。我这样做是为了减少 GUI 线程的工作量,以使应用程序更具响应性。当然,我一直在使用 Dispatcher.Invoke 来避免线程问题。同样,它在 XP 中完美运行。

任何帮助深表感谢。先感谢您。