Как улучшить производительность потоковой текстуры Direct3D?
Я пытаюсь ускорить рисование полноэкранной текстуры, которая меняет каждый кадр. В моей системе я могу получить около 1000 FPS, используя GDI и BitBlt(), но я думал, что смогу улучшить производительность, используя Direct3D и динамические текстуры. Вместо этого я получаю только около 250 FPS.
Я работаю на Mac Pro с ATI HD 4870 с текущими драйверами.
Я попытался использовать динамические текстуры, и это дает мне небольшой выигрыш (~15FPS), и я попытался использовать цепочку текстур, чтобы избежать задержки конвейера, и это не имеет никакого эффекта.
Я немного осмотрелся и информации об использовании динамических текстур очень мало.
Я что-то упустил?
Настройка устройства:
pparams.BackBufferCount = 1; pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; pparams.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
Текстура создать:
device-> CreateTexture (ширина, высота, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &texture, NULL);
Обновление текстуры:
текстура->LockRect(0, & заблокирован, NULL, D3DLOCK_DISCARD); ... написать текстуру данных текстуры->UnlockRect(0); device->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, вершины, sizeof(* вершины)); ...
Вы можете получить код незавершенного производства по http://www.libsdl.org/tmp/SDL-1.3.zip
Спасибо!
2 ответа
Если вам не нужно считывать текстуру, вы можете создать текстуру с флагом (D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY).
DrawPrimitiveUP очень медленный. Вы должны использовать динамический буфер вершин (обновить с помощью nooverwrite, отбросить, если он заполнен).