Функция для возврата имени ошибки OpenGL #define из ее шестнадцатеричного значения - PullRequest
0 голосов
/ 25 апреля 2019

Я недавно узнал об 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, если это что-то изменит.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

возможно ли создать в C ++ функцию, которая возвращает имя определения путем ввода его значения?

Да, это так.

Если кто-то уже не сделал этого, вам придется сделать это в коде приложения.

1009 * Е.Г. *

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];
}
0 голосов
/ 25 апреля 2019

Если библиотека не предоставляет или вы сами пишете функцию для перевода числовой ошибки в строковое представление, то это невозможно.

Во время выполнения невозможно перевести значениемакрос (#define) в названии макроса.

Но вполне возможно написать функцию, которая принимает код ошибки, ищет его в таблице и возвращает некоторую строку (которую вы пишете) длякаждая ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...