Мне нужно поместить несколько целых значений в буфер (32 байт), где каждое целое число должно находиться в определенном месте в буфере (я собираюсь использовать данные в VBOs OpenGL).Упаковывание данных в буфер портально
То, как я делаю это сейчас, выглядит довольно уродливым. Все содержимое должно размещаться по адресу buf2. Не беспокойтесь, глядя на значения, которые я назначаю в буфер, поскольку они не имеют отношения к проблеме.
uint32_t *const coords = reinterpret_cast<uint32_t *>(buf2 + CoordDataOff);
uint16_t *const texcoords = reinterpret_cast<uint16_t *>(buf2 + TcoordDataOff);
uint32_t *const color = reinterpret_cast<uint32_t *>(buf2 + ColorDataOff);
coords[0] = x + bearing[0]; // left
coords[1] = y + bearing[1] - 64*(tcoords[3] - tcoords[1]); // bottom
coords[2] = x + bearing[0] + 64*(tcoords[2] - tcoords[0]); // right
coords[3] = y + bearing[1]; // top
copy_n(tcoords, 4, texcoords);
*color = c.color;
Есть ли какой-нибудь приятный, переносимый способ его достижения?
Ваша 'структура', скорее всего, введет 2 байта заполнения до или после' t excoords'. В стандарте C++ не указывается, где. Вы можете явно добавить дополнение, но с учетом неопределенных ограничений памяти OP это может не сработать. –
У него, похоже, есть только одна TData, и у TData есть 4 texcoords. –
извините, да, я думал о #pragma pack(), когда я печатал ответ, но забыл включить его. Очень важно, чтобы вы это делали. Последняя строка кода, который я вставил, должна быть в порядке для использования в вопросе (в зависимости от значений CoordDataOff, TcoordDataOff, ColorDataOff). Но я думаю, есть и такой же код, который будет заполнять VBO. Использование одной и той же структуры для чтения и записи в буфер должно облегчить задачу. – noggin182