【发布时间】:2011-02-15 15:04:28
【问题描述】:
使用 opengl 3.3、radeon 3870HD、c++..
我有关于交错数据数组的问题。我在向量中获得了我的应用程序结构,它作为数据发送到缓冲区对象。像这样的:
struct data{
int a;
int b;
int c;
};
std::vector<data> datVec;
...
glBufferData(GL_ARRAY_BUFFER, sizeof(data)*datVec.size(), &datVec[0], GL_DYNAMIC_DRAW);
没关系,我经常使用这个东西。但我创建的是交错数组,所以数据如下:
a1,b1,c1,a2,b2,c2,a3,b3,c3
现在我将这个东西发送到 GPU 中进行处理,并通过转换反馈读回缓冲区,例如 b 变量。所以它看起来像:
bU1, bU2, bU3
我想将更新后的值复制到交错缓冲区中,这可以通过诸如 glCopyBufferSubData 之类的单个命令来完成吗?这个不合适,因为它只需要偏移量和大小而不是步幅(可能类似于 c++ 中的 memcpy)......结果应该如下所示:
a1, bU1, c1, a2, bU2, c2, a3, bU3, c3
如果没有,还有比这两个更好的方法吗?
映射更新的缓冲区,将值复制到应用程序的临时存储中,取消映射更新,映射数据缓冲区并通过它迭代设置新值
在常量缓冲区和变量缓冲区上分开缓冲区。常量会随着时间的推移保持不变,但使用 glCopyBufferSubData 变量可以在一次调用中更新..
谢谢
【问题讨论】:
-
我会将更新后的数据与您的 2 分开。