【问题标题】:HLSL without WPF or XNA?没有 WPF 或 XNA 的 HLSL?
【发布时间】:2011-12-30 20:16:47
【问题描述】:

我有一个用 VB .NET 4.0 编写的大型科学遗留应用程序,使用 winforms。我发现需要像素着色器。为了在这种情况下使用像素着色器,我假设我必须启动一个 WPF 表单,执行一些图形魔术,然后使表单消失。这似乎很尴尬。所以,我的问题是“有没有办法在没有 WPF 或 XNA 的 winforms 应用程序中使用 HLSL 像素着色器?

非常感谢。

凯瑟琳

【问题讨论】:

  • 您是在谈论使用像素着色器在 VB.NET 中渲染 2D 或 3D 图形,还是使用 GPGPU(通用 GPU 计算)进行科学计算(无图形)?
  • @Dr.AndrewBurnett-Thompson 好问题!可视化或计算是否需要着色器?
  • ... 就好像它的 GPGPU 我会按优先顺序查看 nVidia CUDA(仅限 Cg+nVidia)或 OpenCL(ATI、nVidia、CPU 并行)。我之前从事过 GPGPU 项目,特别是在 GPU 上计算快速傅里叶变换。最好的问候
  • Wouter -- 感谢您的链接。我还没有找到那个。我今天会研究一下。

标签: .net wpf xna directx hlsl


【解决方案1】:

您绝对不想使用 MDX(托管 DirectX 已弃用)或调用本机 DirectX(重新发明轮子)。最好使用 SlimDXSharpDX 这两个开源和最新的库。

同样,如果 OpenGL 是一个选项,那么还有像 OpenTK 这样的库。

【讨论】:

  • @MattDavey - 它是 VB.NET 4.0(见问题)
  • @Erno 是的,我现在看到了 :) 我以为他用的是 VB4!
  • @MattDavey - 我同意,尤其是当同一句话中有可怕的“遗留”术语时。另一方面,VB 9、10 也无济于事,因为我忘记了 VB 版本号。
  • 谢谢,伙计们。我会研究 SlimDX。该网站称“渲染图元是 3D 图形 API 存在的理由。”我想我最好也上法语课。
【解决方案2】:

HLSL 真的是您想要的吗?如果它是一个科学应用程序,您最好使用更通用的着色器语言,例如 CG

不过,要回答您的问题,WPF 和 XNA 需要 HLSL,但依赖关系只是一种方式。您最好的选择可能是回退到原生 C++ 代码并以这种方式与 DirectX 或 OpenGL 交互 - 这个原生接口可以通过 COM 与您的 VB4 应用程序集成。这不是一个很好的解决方案,但遗留应用程序永远不会:)

编辑:我刚刚看到您将 VB.NET 与 .NET 4.0 一起使用。我以为你用的是老旧的 Visual Basic 4!在这种情况下,提到托管 DirectX 包装器 (SlimDX) 的答案是您的最佳选择:)

【讨论】:

  • 谢谢。是的,这是遗产,但不是那种遗产。它是 .NET 4.0,所以“遗留”是指我不会获得重写它的许可。
【解决方案3】:

是的,您可以通过 DirectX 使用不带 WPF 和 XNA 的 HLSL 着色器,您需要创建着色器文件(.fx)然后您可以使用 MDX 库在 C# 或 VB.NET 中使用它。 Here 是对您有帮助的示例

【讨论】:

    【解决方案4】:

    您可以使用本机 DirectX。 Windows 上的 Xna 基本上是一个 DirectX 包装器。如果您使用本机 DirectX 库,如果您熟悉 Xna,您可能可以自己解决大部分问题,但有很多指南。最难模拟的部分是内容管道。

    为此,只需下载最新的 DirectX SDK,安装它,然后添加对 Microsoft.DirectX.* 库的引用。

    【讨论】:

    • -1 Microsoft.DirectX.* 程序集不是本机 DirectX - 它们是托管 DirectX,已弃用。
    • 谢谢...顺便说一句,我在 EE 上发布了同样的问题,但在 5 天内没有得到任何回复。我删了它。 www.stackoverflow.com 摇滚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多