OS原生2D API与OpenGL

Dea*_*ean 3 c c++ linux windows opengl

假设我想从头开始创建一个文本编辑器.

我四处搜索,每个人都建议使用特定于操作系统的原生2D API(例如Windows中的GDI +或Linux中的XLib),尤其是字体渲染.

我的问题是:为什么openGL不适合这样的任务?为什么在使用openGL的文本编辑器中渲染抗锯齿文本和控件如此困难?为什么我更喜欢原生2D OS API的非可移植方式?

Jer*_*fin 8

部分难点在于OpenGL不提供字体引擎或专门用于渲染文本的任何功能.换句话说,OpenGL不适合渲染任务的部分,只是因为OpenGL缺少了任务所需的许多部分.

要在OpenGL下呈现文本,通常从一些字体引擎开始(例如)采用TrueType或OpenType字体,并从其信息(例如,FreeType)中呈现字形.然后你需要一个文本显示引擎来弄清楚如何渲染字符以正确地显示你的字符串.在像英语这样的简单案例中,它必须处理字距调整和领导等事情.在像一些阿拉伯语脚本这样的复杂情况下,您基本上需要在文本呈现和字体呈现之间进行反馈循环,因为字形可以采用不同的形式,具体取决于字符串中的上下文.

简而言之,编写一个通过OpenGL渲染其文本的文本编辑器意味着从头开始重新构建大量的文本渲染堆栈.

如果您对渲染质量不太关心,那么您可以通过将几种字体渲染到位图并使用它们显示文本来实现.这可以简化代码,但简单的实现意味着生成类似于MS-DOS命令行的输出.即使匹配Windows 3.0的输出质量也需要相当多的工作.这并不是说它无法完成 - 但它可能使编写文本编辑器编辑部分的难度相形见绌.

  • 不完全是.只是OpenGL基本上是一个低级别的绘图库/引擎,而GUI通常需要更多的功能,从头开始实现它们只需要完成大量的工作.在像Linux这样的系统中,基本上,你在OpenGL之上有一个GUI引擎,因为X窗口系统使用驱动程序.OpenGL和GTK之间只有几兆字节的代码. (2认同)