将OpenGL枚举转换为字符串

8

很多时候,我需要知道某些OpenGL操作返回的枚举值是什么,以便将它们打印到终端上并了解发生了什么。

目前似乎没有可用于字符串化枚举值的函数,因此我考虑直接使用gl.h(实际上我现在会使用libglew的头文件),获取#define并创建一个巨大的switch表以方便使用。

是否有更好的方法,并且如何处理需要将事物移植到OpenGL ES?


2
你可能会遇到一些问题,因为在OpenGL中不同的枚举名称可能具有相同的十六进制值(特别是如果考虑扩展 - 由于歧义,开关将拒绝编译)。 - rotoglup
哦,好发现。我也刚刚完成了这个东西..要编译并查看有多少个重复的。 - kamziro
1
他们的观点(我猜)是GL_NEVER和GL_ACCUM_BUFFER_BIT不能由同一个gl命令使用,因此枚举值可能会重叠。这对于OpenGL来说没有问题,只是对于辅助工具而言有些麻烦。 - rotoglup
1
一些GL定义是位集,意味着它们应该进行按位或运算。如果有多个这样的集合(我假设是的),那么没有合理的方法可以防止别名。 - Kos
顺便说一下,如果你使用的是非ES OpenGL并且想要打印值,也许最好使用像GLintercept这样的GL调试器? - Kos
显示剩余2条评论
3个回答

7

gluErrorString是OpenGL中您要查找的函数,因为GLU库通常始终与GL一起提供。

我没有OpenGL ES的经验,但谷歌找到了GLUes,这可能会对您有所帮助。


但是,gluErrorString是否考虑了所有其他GL枚举?例如,glGet返回值? - kamziro
哎呀,确实,我明白你的意思;这里已经很晚了……gluErrorString可能对你的需求太有限了,抱歉。 - rotoglup
1
已停用(至少在MacOSX上) - Nils

4
OpenGL有一些官方的.spec文件来定义API,其中有一个enum.spec列出了所有枚举名称及其值。您只需要编写一个简单的程序来解析该文件并生成查找映射表。
该文件可在http://www.opengl.org/registry/(具体为http://www.opengl.org/registry/api/enum.spec)找到。
手动处理gl.h也可以,但是规范文件会针对新版本进行更新,如果您有一个程序可以为您生成代码,则无需做任何事情即可获得新的枚举。此外,gl.h文件是特定于实现的,因此可能会在nVidia、ATI和不同平台之间发生变化。

1
这些链接现在已经失效了,你是如何在网站上导航到它们的?那里似乎有很多繁重的技术文档。 - Score_Under

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接