现成的替代品
NanoVG (https://github.com/memononen/nanovg https://github.com/memononen/nanovg)似乎有一点吸引力(http://www.reddit.com/r/opengl/comments/28z6rf/whats_a_popular_vector_c_library_for_opengl/ http://www.reddit.com/r/opengl/comments/28z6rf/whats_a_popular_vector_c_library_for_opengl/)。所以你可以看看他们的实现。不过,我自己没有使用过 NanoVG,而且对其内部结构也很不熟悉;我所知道的是他们明确拒绝使用NV_path_rendering
: https://github.com/memononen/nanovg/issues/25 https://github.com/memononen/nanovg/issues/25
正如我在上面的评论中已经提到的,NV_path_rendering 现已在 Skia 中实现,并且似乎也受到 cairo 的青睐,请参阅上面 tjklemz 的答案下面的评论,以获取有关这些详细信息的链接。 NV_path_rendering 的一个问题是它在某种程度上依赖于固定功能管道,因此与 OpenGL ES 2.0 有点不兼容,但有一个解决方法https://code.google.com/p/chromium/issues/detail?id=344330 https://code.google.com/p/chromium/issues/detail?id=344330
我会远离任何与 OpenVG 相关的东西。致力于此的委员会已于 2011 年解散;它现在基本上是一个遗留产品/API。 OpenVG 的大多数实现(包括 ShivaVG)也很古老,并且根据以下标准使用固定功能 OpenGLhttps://github.com/memononen/nanovg/issues/113 https://github.com/memononen/nanovg/issues/113如果你确实必须使用类似 OpenVG 的库,MonkVG似乎是免费的中维护得最好的[读作:最近被放弃的](代码:https://github.com/micahpearlman/MonkVG https://github.com/micahpearlman/MonkVG; 2010年公告http://www.khronos.org/message_boards/showthread.php/6776-MonkVG-an-OpenSource-implementation-available http://www.khronos.org/message_boards/showthread.php/6776-MonkVG-an-OpenSource-implementation-available)。他们声称它可以通过 OpenGL ES 1.1 和 2.0 在 Windows、MacOS X、iOS 和 Android 上运行。 [相当大的]警告是 MonkVG 并不是 OpenVG 的完整实现;请参阅其代码页上的“TODO”部分以了解缺少的内容。
我还发现开罗(和 pango)开发者 Behdad Esfahbod 编写了一个新的字形(即字体)渲染库(https://code.google.com/p/glyphy/ https://code.google.com/p/glyphy/): "GLyphy是使用 OpenGL ES2 着色语言的符号距离场 (SDF) 文本渲染器。 [...] GLyphy [...] 表示使用提交给 GPU 的实际向量的 SDF。这会产生非常高质量的渲染。” 据我所知,它还没有在开罗使用。(Behdad [从 Red Hat] 转到 Google,而开罗已经有一段时间没有发布版本了,所以也许 GLyphy 会去相反,谁知道...)我不确定该解决方案对任意路径的通用性如何。(在另一个方向上,NV_path_rendering 还可以渲染字体并使用字距调整,以防您不知道这一点。)如果您对 GLyphy 感兴趣,您绝对应该观看 Linux.conf.au 2014 上的演讲:https://www.youtube.com/watch?v=KdNxR5V7prk https://www.youtube.com/watch?v=KdNxR5V7prk如果您不熟悉(原始)SDF 方法,请参阅http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
我发现 Mozilla 开发人员的演讲总结了当今使用的常见方法:https://www.youtube.com/watch?v=LZis03DXWjE#t=828 https://www.youtube.com/watch?v=LZis03DXWjE#t=828(时间戳是为了跳过介绍部分,他告诉你什么是 GPU。)
DIY(可能)
顺便说一句,很多路径渲染的东西都是命令/状态更改密集型的。我认为 Mantle、DX12 以及 OpenGL 的等价物(主要是扩展)http://gdcvault.com/play/1020791/ http://gdcvault.com/play/1020791/)可能会改善一点。
我想我还应该提到 Nvidia 已获得(至少)四项与 NV_path_rendering 相关的专利:
- https://www.google.com/patents/US8698837 https://www.google.com/patents/US8698837
- https://www.google.com/patents/US8698808 https://www.google.com/patents/US8698808
- https://www.google.com/patents/US8704830 https://www.google.com/patents/US8704830
- https://www.google.com/patents/US8730253 https://www.google.com/patents/US8730253
请注意,还有大约 17 个与这些“同时发布”相关的 USPTO 文件,其中大多数是专利申请,因此完全有可能从这些文件中授予更多专利。更新:谷歌没有完全链接all它们加在一起,所以还有一些已经被肯定地授予:
- https://www.google.com/patents/US8786606 https://www.google.com/patents/US8786606
- https://www.google.com/patents/US8773439 https://www.google.com/patents/US8773439
我不确定他们愿意在什么条件下许可这些......
我发现了 Kilgard 自己写的一个非常好的常见问题解答,内容是“矢量图形/路径渲染有什么特别之处”,不幸的是它被埋在了 OpenGL 论坛的某个地方。。对于任何考虑快速/黑客替代解决方案的人来说,这是一本非常有用的读物。
Direct3D 11.1 中还有一项新功能,可能很有用,因为 Microsoft 使用它来改进 Windows 8 中的 Direct2D 实现;它被称为目标独立光栅化(TIR)。除了微软已经申请了专利之外,我对此了解不多。http://www.google.com/patents/US20120086715 http://www.google.com/patents/US20120086715问题是,根据这场“口水战”,似乎只有 AMD GPU 真正支持它http://www.hardwarecanucks.com/news/war-of-words- Between-nvidia-and-amd-over-directx-11-1-support-continues/ http://www.hardwarecanucks.com/news/war-of-words-between-nvidia-and-amd-over-directx-11-1-support-continues/
Adoption
我无法预知 NVpr 何时会被非 Nvidia 采用,但我认为他们正在大力推动。这OpenGL 4.5 Nvidia 演示 http://www.ustream.tv/recorded/51255959/几乎已经被它接管了——至少就演示软件而言,我认为这有点愚蠢(因为它不是 OpenGL 4.5 核心的一部分)。 Neil Trevett 也不止一次报道过 NVpr(例如https://www.youtube.com/watch?v=eTdLwfOLoG0#t=2095 https://www.youtube.com/watch?v=eTdLwfOLoG0#t=2095) and Adobe Illustrator beta 2014正在使用它 http://on-demand.gputechconf.com/gtc/2014/video/S4867-path-fast-lines-adobe-illustrator.mp4以及谷歌的 Skia。