从十六进制值返回 OpenGL #define 错误名称的函数

Function to return OpenGL #define error name from its hexadecimal value

本文关键字:函数 错误 #define 十六进制 返回 OpenGL      更新时间:2023-10-16

我最近一直在学习OpenGL,并正在搜索有关错误处理的信息。我学会了使用 glGetError 来设置错误标志,并创建了一个打印其十六进制值的函数。相关的C++代码如下所示:

GLClearError();
glDrawElements(GL_TRIANGLES, 6, GL_INT, nullptr);
GLCheckError();

GL_INT故意写的。 GLClearError()只是清除错误标志并GlCheckError()打印glDrawElements产生的错误。

我得到500作为输出。我知道我可以去(就我而言,因为我使用 GLEW(到 glew.h 并使用此数字搜索错误。在这种情况下,错误是 GL_INVALID_ENUM 。这是一个编译器定义;那么我的问题是:是否可以在C++创建一个通过输入其值来返回定义名称的函数?我使用C++ 11,OpenGL 4.6和GLEW 2.1,如果这有什么变化的话。

是否可以在C++中创建一个通过输入其值返回定义名称的函数?

是的,它是。

除非有人已经这样做了,否则你必须在应用程序代码中这样做。

例如

enum MyEnum { ENUM_VALUE_1, ENUM_VALUE_2, ENUM_VALUE_3, ... };
std::string getEnumName(MyEnum e)
{
   static std::map<MyEnum, std::string> nameMap =
   {
      {ENUM_VALUE_1, "ENUM_VALUE_1"},
      {ENUM_VALUE_2, "ENUM_VALUE_2"},
      {ENUM_VALUE_3, "ENUM_VALUE_3"},
      ...
   };
   return nameMap[e];
}

除非库提供或您自己编写的函数将数字错误转换为字符串表示形式,否则这是不可能的。

在运行时,无法将宏的值(#define(转换为宏的名称。

但是完全可以编写一个函数,该函数接受错误代码,在表中查找它,并为每个错误返回一些字符串(您编写的(。