Вы можете использовать битовые сдвиги, чтобы получить целое число:
GLuint get_number(GLubyte const* ptr) {
// magic numbers for shift sizes are safe because GL types have fixed sizes
// (8 for GLubyte and 32 for GLuint)
return ptr[0] << 16 + ptr[1] << 8 + ptr[2];
}
А чтобы заполнить массив обратно, вы можете использовать битовые маски:
void get_bytes(GLuint number, GLubyte* out) {
out[0] = (number & 0xFF0000) >> 16;
out[1] = (number & 0x00FF00) >> 8;
out[2] = number & 0x0000FF;
}