可以便携地将数据打包到缓冲区中

时间:2012-01-03 15:00:39

标签: c++

我必须将几个整数值放入(32字节)缓冲区,其中每个整数必须位于缓冲区中的特定位置(我将使用OpenGL VBO中的数据)。

我现在这样做的方式有点难看。所有内容都应该放在地址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;

有没有更好,更便携的方法来实现它?

1 个答案:

答案 0 :(得分:2)

您的缓冲区是否只包含每个顶点的数据?你可以生成一个结构

struct TData
{
  uint32_t coords[4];
  uint16_t texcoords[4];
  uint32_t color;
};

然后就像将缓冲区视为TData数组

一样简单
TData verts[100];
vert[0].coord[0] = x;
vert[0].coord[1] = y;
...
FunctionToWriteToBuffer((void *)verts, sizeof(TData) * 100);

或您上面的代码

  TData *vert = (TData *)buf2;

这也应该让事情更容易阅读以维护