gpt4 book ai didi

c++ - 字体轮廓贝塞尔曲线样条轮廓和 DirectWrite

转载 作者:行者123 更新时间:2023-11-28 03:35:01 30 4
gpt4 key购买 nike

我正在考虑将 DirectWrite 用于将在 DirectX 11 版本和 OpenGL 3.1+ 版本中推出的项目。

据了解,DirectWrite 使用位于 Direct3D 10.1 之上的 Direct2D(直到 DirectX 11.1 发布)。这意味着要将 DirectWrite 与 Direct3D 11 一起使用,目前,我必须创建一个 Direct3D 10.1 设备和一个 Direct3D 11 设备,然后在这两个设备之间共享资源,这似乎会带来一些同步开销。另一个问题是,我似乎无法使用此设置将文本直接渲染到 d3d11 后备缓冲区,对吗?

我也不知道是否有可能在任何实际意义上将 DirectWrite 与 OpenGL 结合起来......?我的猜测不是...

Sooo...我也在考虑编写我自己的字体渲染器,我希望能够根据他们的贝塞尔样条轮廓渲染字体以实现分辨率独立性。我知道 GetGlyphOutline() 函数,但它似乎正处于被弃用的过程中,并且根据 MSDN 库,“......不应在新应用程序中使用”。查看 MSDN 上的 DirectWrites 引用页,我看不出有任何方法可以像使用 GetGlyphOutline() 那样在 Bezier 样条信息中获得相同的信息。您可以获得包装在 ID2D1SimplifiedGeometrySink 中的轮廓信息,但我看不到您如何从 ID2D1SimplifiedGeometrySink 中获取纯贝塞尔曲线、控制点和信息,您只能将其用于使用我的 D2D (D3D10.1) 进行绘图在这一点上没有那么大的兴趣。

有没有办法使用未弃用的方法(DirectWrite 或其他方法)获取字体轮廓轮廓?

您可能会说,我对 DirectWrite 和 Direct2D 都不太熟悉。我想弄清楚该往哪个方向走。是否值得沿着 DirectWrite/D2D 道路前进,或者制作我自己的字体渲染器,或者其他一些绝妙的主意 :)。有什么建议吗?

PS 我目前正在为 Win7 平台开发,当它发布时将迁移到 Win8。

最佳答案

幸运的是你把它倒退了一点。 Direct2D 使用 DirectWrite,而不是相反。从技术上讲,您可以单独使用 DirectWrite(请参阅:IDWriteBitmapRenderTarget)。如果您正处于原型(prototype)设计阶段,使用 Direct2D 将软件渲染到通过 IWICImagingFactory::CreateBitmap() 创建的 IWICBitmap 中可能更容易(或者只是包装一个您已经创建的位图,并自己实现 IWICBitmap)。您使用 ID2D1Factory::CreateWicBitmapRenderTarget(),调用 ID2D1RenderTarget::BeginDraw(),然后创建您的 IDWriteTextFormat 和/或 IDWriteTextLayout 通过 IDWriteFactory,然后在渲染目标上调用 DrawText()DrawTextLayout(),然后是 EndDraw()。然后你复制到一个硬件纹理中并按照你喜欢的方式绘制它。

关于c++ - 字体轮廓贝塞尔曲线样条轮廓和 DirectWrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178505/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com