我们在使用内置图形卡的新笔记本电脑上遇到了一个奇怪的问题。
为了绘制真实字体,我们使用wglUseFontOutlines获取字形轮廓,然后在glRenderMode(GL_FEEDBACK)
中绘制它们。
然后我们解析反馈缓冲区。这已经工作了很多年。
现在我们遇到包含洞的字形的问题(仅在具有内置图形卡的平台上):
wglUseFontOutlines
完美无缺。如果我们只绘制返回的显示列表,一切都很好。但是,使用GL_FEEDBACK
生成的令牌流已损坏。调试器没有显示任何异常,所有函数都返回成功,解析本身也正常工作。它实际上是由GL_FEEDBACK
模式生成的二进制数据,这是错误的。
还有其他人遇到过这个问题吗?
是否有另一种方法可以在Windows上获取真实字体的轮廓和填充?
答案 0 :(得分:0)
我只是在这里猜测蓝色:广泛的GPU驱动程序OpenGL实现通常不支持GL_SELECT和GL_FEEDBACK渲染模式。只有上个世纪的少数显卡实际上支持这些渲染模式。因此,在使用这些模式时,您几乎总是会回到软件实现中。
然而,鉴于现代GPU的灵活反馈机制非常灵活,最新的驱动程序实际上可以尝试使用GPU功能实现这些渲染模式(有点奇怪,因为那些modi已经从现代OpenGL配置文件中删除)。无论如何,这可能是你遇到这些问题的原因。
为了绘制真实字体,我们使用wglUseFontOutlines获取字形轮廓,然后使用glRenderMode(GL_FEEDBACK)绘制它们。然后我们解析反馈缓冲区。
这是一款很酷的Rube-Goldberg机器。为什么不直接使用适当的Windows GDI函数(GetGlyphOutline)来剪切中间人并获取字形轮廓?无论如何,这就是wglUseFontOutlines在内部使用的内容。