【发布时间】:2013-10-07 02:57:27
【问题描述】:
摘要(TL:DR 版本)
最终,我们的目标是能够在 WPF 应用程序中本地使用 OpenGL ES 代码(即不是 SharpGL 等)并且没有 Airspace 或驱动程序问题,这可能使用 Google 的 ANGLE 项目。
背景:
我喜欢 OpenGL over DirectX 的一个原因是它的跨平台能力。它对 OS X 和 Linux 以及通过 ES 在 Android 和 iOS 上都有出色的支持。然而,在 Windows 上,使用它会受到驱动程序问题的影响,或者更糟糕的是,很多卡根本没有正确实现它。
输入谷歌的ANGLE project,或Almost-Native-Graphics-Layer-Engine。
ANGLE 是围绕 Direct3D 实现的 OpenGL ES 2.0 包装器,这意味着您可以编写 OpenGL ES 2.0 代码以在 Windows 上运行,而无需实际的 OpenGL 驱动程序。它不仅通过了 ES 兼容性测试,而且实际上是 Chrome 进行所有图形渲染的方式,包括 WebGL,因此它绝对是一项经过验证的技术。
问题:
我们知道 WPF 有一个 D3DImage 控件,它允许您在 WPF 中托管 Direct3D 渲染,并且它应该通过将其输出正确地堆肥到 WPF 渲染线程来消除空域问题。我的问题是,由于 ANGLE 是通过 Direct3D 实现的,而 D3DImage 是 Direct3D 渲染的目标,是否可以将两者结合起来,允许我们编写 OpenGL ES 代码并将其托管在 Windows 上的 WPF 应用程序中,所有这些都没有驱动程序或空域问题?
这将是我们的“圣杯”。
但是,由于 ANGLE 想要使用它自己的控件,因此我一直在让 ANGLE 将其渲染定位在由 D3DImage 控件创建的 D3D 表面上。我不确定这是否可能。我什至找不到任何人讨论这个问题的任何文章或参考资料,更不用说尝试了。
再次明确一点,我们的目标是让我们共享的跨平台 OpenGL(或 ES)代码在 WPF 应用程序中工作,而不会出现空域问题或 OpenGL 驱动程序要求。我对使用 ANGLE/D3DImage 的建议就是……尝试。到目前为止,这是我想出的“手段”,但这只是实现我们目标的潜在手段,而不是目标本身。任何其他能让我们获得相同解决方案的东西都将受到欢迎。
【问题讨论】:
-
您在这个问题上还需要帮助吗?如果是这样,您是否需要能够在同一区域上结合 WPF 和 OpenGL 渲染(即,将 OpenGL 与 WPF 混合)或者您只是希望将 OpenGL 嵌入 WPF 窗口中?后者对于OpenTK.GLControl 和WindowsFormsHost 来说是微不足道的。前者需要一些工作(但仍然可能。)
-
是的,我仍然希望在这里得到帮助。虽然不,我们不需要在同一区域结合 WPF 渲染和 OpenGL,如果我是正确的,您的 WinFormsHost 方法仍然会成为 AirSpace 问题的受害者。再说一次,如果我们在同一个窗口中的 WPF 部分不会与 OpenGL 部分重叠,那可能是一个解决方案。不尝试就不确定。你能用一个使用 OpenTK.GLControl 的例子来发布一个正确的答案吗?如果是这样,我会将您的标记为已接受。
-
另一条评论...再次,我们想简单地重用我们已经存在的 OpenGL ES 渲染代码。我们不想将它翻译到另一个库等。(一般的设置代码当然可以,而且通常是特定于平台的,所以这很好。我的意思是实际的绘图调用自己,所以它在 WPF、iOS 上看起来相同, Android 等,并尽可能接近原生速度。
-
我正在准备一个示例项目,展示如何在 WPF 中使用 OpenTK.GLControl 使用 OpenGL 和 OpenGL ES / ANGLE。
标签: wpf opengl opengl-es direct3d d3dimage