次の問題に対して、データのコピーなしでデータの局所性とパフォーマンスを最大限に引き出す方法を考えています。
私は 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 を既に読んだことがありますが、ポインターがあり、クラス内に他の変数があるため、私の場合は基本的に異なります。)