Здравствуйте уважаемые программисты! Вот уже который день не могу понять в чем проблема. Вот функция, которая создает спрайт с нужными характеристиками.
| Код | //-------------------------------------------------------------------------------------- // Функция // DrawSprite() // Выводит спрайт на экран VOID DrawSprite(LPDIRECT3DTEXTURE9 textura, float X, float Y, float ugol) { sprite->Begin(D3DXSPRITE_ALPHABLEND); float scX = 0.5f;//Длина спрайта к1 float scY = 0.5f;//Ширина спрайта к1 // Texture being used is 64 by 64: float cenX = 16; float cenY = 16; D3DXVECTOR2 spriteCentre=D3DXVECTOR2(cenX * scX, cenY * scY);
// Screen position of the sprite D3DXVECTOR2 trans=D3DXVECTOR2(X - spriteCentre.x,Y - spriteCentre.y);
// Rotate based on the time passed float rotation=ugol*D3DX_PI/180.0f;
// Build our matrix to rotate, scale and position our sprite D3DXMATRIX mat;
D3DXVECTOR2 scaling(scX,scY);
// out, scaling centre, scaling rotation, scaling, rotation centre, rotation, translation D3DXMatrixTransformation2D(&mat,NULL,0.0,&scaling,&spriteCentre,rotation,&trans);
// Tell the sprite about the matrix sprite->SetTransform(&mat);
// Draw the sprite sprite->Draw(textura,NULL,NULL,NULL,0xFFFFFFFF);
// Thats it sprite->End();
}
|
Потом вывожу определенное количество спрайтов на экран и засекаю время.
| Код | //----------------------------------------------------------------------------------- // Функция // RenderingDirect3D() // Рисуем в приложении //----------------------------------------------------------------------------------- VOID RenderingDirect3D() { if(pDirect3DDevice == NULL) // Проверяем ошибки return; //Очищаем задний буфер pDirect3DDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );//цвет фона // Здесь происходит прорисовка сцены pDirect3DDevice->BeginScene();// Начало сцены //----------------------------------------------------------------------------------------------- // Вывод спрайта на экран //----------------------------------------------------------------------------------------------- start_2 = GetCycleCount();//Засекаем время for(int i=1; i<=8; i++) { for(int j=1; j<=6; j++) { DrawSprite(pTex_k1, 100 + (i*15), 100 + (j*15), ug2); } } raznost = GetCycleCount() - start_2;//Количество тактов microSec = (double)raznost/2310; //Время в микросекундах pDirect3DDevice->EndScene();//Конец сцены pDirect3DDevice->Present( NULL, NULL, NULL, NULL );//Копируем задний буфер в передний }
|
Вывод 1 спрайта занимает 30 мкс. Вывод 10 спрайтов занимает 70 мкс. Вывод 48 спрайтов занимает 220 мкс. Вывод 49 спрайтов занимает 2500 мкс. (Почему?) Вывод 200 спрайтов занимает 7000 мкс.
Вот никак понять не могу, почему когда рисуется 49 спрайт время выполнения кода возрастает более чем в 10 раз? |