可移植地将数据装入缓冲区
Packing data into a buffer portably
我必须将几个整数值放入(32字节)缓冲区,其中每个整数必须位于缓冲区中的特定位置(我将使用OpenGL VBOs中的数据)。
我现在做的方式有点难看。所有的内容应该放在地址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;
有没有更好的、可移植的方法来完成它?
缓冲区是否只包含每个顶点的数据?你可以直接生成一个struct
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;
这也应该使内容更容易阅读和维护
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在 openGL 中多次绑定缓冲区
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 可移植地将数据装入缓冲区