我想知道如何獲得最大的數據局部性和性能爲以下問題沒有數據拷貝。VBO的標準::矢量<MyClass*>和正確的步幅
我有一個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的頂點數組,其中,所述頂點ONLY由x,y,z
變量確定。正如你可能想象的很難正確設定步伐,所以我在這裏問是否有其他(便攜式)解決方案來解決這個問題。
(PS我已經閱讀後VBOs with std::vector但我的情況是根本不同的,因爲我有一個指針,我也有類中其他變量。)
哪部分數據拷貝?你能詳細說明嗎? – billz
如果'MyClass'只包含成員變量像你這樣的說明,然後直接將它們存儲在一個向量會令他們最友好的數據局部性。隨着指針的方法,你需要在這裏,我懷疑你是在顛簸的CPU緩存,更不用說如何無用的數據是OpenGL的。 – radical7
什麼是「VBO」? –