我想知道如何在没有数据复制的情况下获得以下问题的最大数据局部性和性能。
我有一个 std::vector< MyClass* >MyClass
像
class MyClass
{
public:
MyClass(int n,double px,double py,double pz)
{
someField=n;
x=px;
y=py;
z=pz;
anotherField=100;
anotherUnusefulField=-10.0;
}
int someField;
int anotherField;
double x;
double y;
double z;
double anotherUnusefulField;
};
std::vector<MyClass*> myClassVector;
// add some values and set x,y,z
for (std::vector<MyClass*>::iterator iter = myClassVector.begin(); iter!=myClassVector.end();++iter)
{
MyClass *tmp = *iter;
tmp->x+=1.0;
tmp->y+=2.0;
tmp->z+=3.0;
}
我经常对这些数据进行迭代,并且我还想强制执行数据局部性。指向 MyClass 的指针中包含的数据应发送到 OpenGL 顶点数组,其中顶点仅由x,y,z
变量确定。正如您可能想象的那样,很难正确设置步幅,所以我在这里询问是否有其他(便携式)解决方案来解决这个问题。
(ps 我已经阅读了带有 std::vector 的帖子 VBO,但我的情况基本不同,因为我有指针,并且类中还有其他变量。)