2015-08-05 2 views
1

Я запрашиваю GL_TYPE в OpenGL и возвращает шестнадцатеричное значение как целое число, as it should.Префикс шестнадцатеричного значения 0x

Например: 0x1406 является # define'd, как GL_FLOAT, но в настоящее время дано мне от OpenGL в целочисленном виде, 5126.

К сожалению OpenGL не просто возвращает тип, и это также не просто принять значение integer (read: hex). По-видимому, он должен быть префикс 0x перед использованием.

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

+0

У вас есть MCVE этого события? Это звучит странно. – genpfault

+0

Да, но в этот момент довольно долго, поэтому я не хотел копировать/вставлять. Это имеет смысл, хотя. OpenGL возвращает целое число, указанное в моей ссылке, и что целое число, преобразованное в hex, является типом в glew.h, определяемом как (минус 0x). Как-то мне нужно сопоставить целое число с шестнадцатеричным значением без необходимости делать какую-либо таблицу. – Stradigos

+0

Переменные GLint не имеют типа шестнадцатеричного или десятичного числа, это просто артефакт того, как вы их распечатываете. – samgak

ответ

4

Непонятно, какое «преобразование» вы имеете в виду: 0x1406 равно 5126. Это просто разные способы написания одного и того же номера в исходном коде, а компилятор переводит их как в двоичную форму, используемую во время выполнения ,

Вы должны быть в состоянии использовать только оператор == сравнить результат glGetProgramResource против константы как GL_FLOAT, независимо от того, что константа определяется как 0x1406 или 5126 в исходном коде.

+0

Я получаю, что у них одинаковое число, но я удивлен, что работают как 0x1406, так и 5126. Они разные базы, и я думаю, я не ожидал, что параметр функции типа GLenum сможет переключать удар между ними. Но я только что протестировал его, и он работает, поэтому я счастлив. – Stradigos

+0

Я предполагаю, что для этого используется префикс 0x ... просто чтобы обозначить, что «Эй, прежде чем использовать это число как int, вам сначала нужно его преобразовать. Поэтому я получаю то, что вы говорите. – Stradigos

+4

Звучит так, как будто вы «думаю, что тип« int »по сути является десятичным, что неверно. Процессор фактически использует компактное двоичное представление, и задание компилятора переводит цифры в исходном коде в это двоичное представление.« 0x »- prefix просто сообщает компилятору интерпретировать цифры как шестнадцатеричные, а не десятичные при переводе числа в двоичную форму в вашем исполняемом файле. Вы получите точно такой же скомпилированный код, независимо от того, каким образом вы записываете номер в исходном коде. – Wyzard

Смежные вопросы