我目前正在尝试在我的桌面上启动并运行 OpenVG。问题来了:我正在/将要为 Windows CE 设备(使用 .NET 紧凑框架)开发一个应用程序,该设备具有硬件加速的 OpenGL ES 2.0 和 OpenVG 1.0.1(基于 TI OMAP35x,如果您有兴趣)。应用程序肯定会使用 OpenVG 进行绘图,如果 OpenVG 不提供某些效果(即模糊),则可能会使用 OpenGL 进行某些效果。
现在我想在没有模拟器的情况下在我的桌面上开发(见这个问题)。所以我想我只是用 P/Invoke 导入 OpenVG,这很容易,因为 OpenVG 人把他们的常量变成了真正的枚举,虽然是一个过程 C API,它很好地转换成一个面向对象的形式(带有一个 Graphics 类用于绘图和 Path、Paint、Stroke 和 Image 对象)。我还设法使用不同名称的 DLL 和入口点。哦,我导入了 EGL 1.3,也很容易转换为面向对象的 API。
直到此时,它听起来还不错。我以为我会使用 Khronos 的 OpenVG 参考实现,但速度很慢。真的很慢。你知道,就像清理表面需要一秒钟!所以我想,好吧,OpenVG 是一个标准,我将采用其他实现之一。它们中的大多数都是基于 OpenGL 的,这正是我想要的。或者不是吗?
不,这不对。使用 EGL 1.3(随用于 OpenGL ES 2.0 的 PowerVR Windows Emulation SDK 提供)创建 OpenGL ES 2.0 表面与我尝试的任何 OpenVG 实现都不兼容。其中一些需要传统的 OpenGL (AmanithVG GLE),PowerVR 提供的 EGL 版本不支持 OpenVG。大多数实现甚至没有 EGL,并使用一些奇怪的函数来初始化上下文——所有这些都假设已经创建了 OpenGL 上下文。OpenGL,而不是 OpenGL ES。叹。
我唯一可以开始工作的是 AmanithVG SRE,它对于软件实现来说非常快,并且不依赖于 OpenGL 或 EGL。它可以工作,但对于实时动画来说仍然太慢了。
我不敢相信这些事情感觉如此不对劲。我真的很想只使用 WindowsMobile.DirectX.Direct3D,PowerVR 为桌面 Windows 提供了一个仿真层,希望最终的 Board Support Package 将 Direct3D 作为 OpenGL ES 包装器提供,就像它似乎在许多设备。
所以,最后的问题是:
是否有任何适用于 OpenGL ES 2.0 的 Windows 桌面系统的 OpenVG 实现?如果它与 PowerVR 的 OpenGL ES 2.0 仿真和提供的 EGL 1.3 一起顺利运行,则可以加分。
还是我应该尝试在桌面上使用传统的 OpenGL 2.0 实现?但他们通常也不提供 EGL。我不想有两个初始化层(EGL 和 WGL)。还是我应该?
注意:这不是 .NET 的问题,因为没有 .NET 的问题是一样的。