我必须将几个整数值放入(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;
有没有更好,更便携的方法来实现它?
答案 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;
这也应该让事情更容易阅读以维护