こんばんは。
現在DirectX9.0で自作ゲームの為のライブラリを作っています。
それで自分はDrawPrimitiveUPを使い描写をしています。その時にグラフィックボードを積んでいないPCでデバックをするとテクスチャ500枚程度でFPSが30に落ちます。それに比べてDXライブラリのDrawRotaGraphで画像を2000枚表示しても処理落ちしません。
それで質問なのですが、DXライブラリではどのようにして描写しているのか教えて頂けたらと思います。
どうぞよろしくお願いします。
ちなみに自分のソースはこんな感じです。遅い原因がわかれば教えてください。
void DXTexture::draw(float x,float y,float ex,float ey, float r){
if(FAILED(error))return;
ZeroMemory(p,sizeof(PORIGON));
if(div != -1){
if(pos == -1 || pos >= div){
DX::error("描写範囲エラー");return;
}
int pos_x = pos % wh[0];
int pos_y = pos / wh[1];
float w = 1.0/wh[0] * pos_x;
float h = 1.0/wh[1] * pos_y;
p[0].u = w;
p[0].v = h;
p[1].u = w+1.0/wh[0];
p[1].v = h;
p[2].u = w;
p[2].v = h+1.0/wh[1];
p[3].u = w+1.0/wh[0];
p[3].v = h+1.0/wh[1];
} else {
p[0].u = 0.0f; p[0].v = 0.0f;
p[1].u = 1.0f; p[1].v = 0.0f;
p[2].u = 0.0f; p[2].v = 1.0f;
p[3].u = 1.0f; p[3].v = 1.0f;
}
for(int i=0;i<4;i++){
p[i].z = 0.0f;
p[i].rhw = 1.0f;
p[i].color = D3DCOLOR_RGBA(BlendState,BlendState, BlendState, 255);
if(BlendMode == ADD){
p[i].color = D3DCOLOR_XRGB(BlendState, BlendState, BlendState);
}
}
D3DXMATRIX mtrx1, mtrx2;
D3DXMatrixIdentity(&mtrx1);
D3DXMatrixIdentity(&mtrx2);
float X = x;
float Y = y;
float EX = (info.Width) * ex;
float EY = (info.Height) * ey;
float R = r;
if(div != -1){
D3DXMatrixScaling(&mtrx1, EX/wh[0], EY/wh[1], 1.0f);
} else {
D3DXMatrixScaling(&mtrx1, EX, EY, 1.0f);
}
D3DXMatrixRotationZ(&mtrx2, R);
D3DXMatrixMultiply(&mtrx1, &mtrx1, &mtrx2);
D3DXMatrixTranslation(&mtrx2, X, Y, 0.0f);
D3DXMatrixMultiply(&mtrx1, &mtrx1, &mtrx2);
D3DXVECTOR2 in[4];
if(centerPos == TRUE){
in[0].x = -0.5f; in[0].y = -0.5f;
in[1].x = 0.5f; in[1].y = -0.5f;
in[2].x = -0.5f; in[2].y = 0.5f;
in[3].x = 0.5f; in[3].y = 0.5f;
} else {
in[0].x = 0.0f; in[0].y = 0.0f;
in[1].x = 1.0f; in[1].y = 0.0f;
in[2].x = 0.0f; in[2].y = 1.0f;
in[3].x = 1.0f; in[3].y = 1.0f;
}
D3DXVECTOR4 out[4];
for (int i = 0; i < 4; i++ ) {
D3DXVec2Transform( &out[i], &in[i], &mtrx1 );
p[i].x = out[i].x;
p[i].y = out[i].y;
}
DEBUG_DRAW_COUNT++;
pD3DDev->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
pD3DDev->SetTexture(0,pTexture);
pD3DDev->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, p, sizeof(PORIGON));
}