Мне нужно визуализировать некоторые изображения, созданные процессором, в Direct3D 9, и я не уверен, как лучше всего передать данные текстуры на графическую карту, поскольку, похоже, существует несколько подходов.
Мой путь использования проходит по следующим строкам в каждом кадре
- Рендерить кучу вещей с текстурами
- Обновите несколько частей текстуры (которые могли быть использованы в предыдущих рендерах).
- Рендерим еще что-нибудь с текстурой
- Обновите другую часть текстуры
- и так далее
Я думал о нескольких способах сделать это, однако я не уверен, какой из них выбрать. Я рассматривал возможность тестирования каждого метода, однако у меня нет возможности узнать, являются ли какие-либо результаты, которые я получаю, репрезентативными для оборудования в целом или только для моего оборудования.
- Какой пул текстуры лучше всего подходит для этой задачи?
- Whats the best way to update this texture?
- Call LockRect and UnlockRect for each region I need to update
- Вызовите LockRect и UnlockRect для всей текстуры.
- Вызовите LockRect и UnlockRect для всей текстуры с D3DLOCK_DISCARD и скопируйте растровое изображение из ОЗУ.
- Создавайте совершенно новую текстуру каждый раз, когда мне нужно ее «обновить».
- Используйте 1,2 или 3 для обновления поверхности в D3DPOOL_SYSMEM, затем UpdateSurface для обновления уровня 0 моей текстуры с этой поверхности.
- То же, что и 5, но укажите RECT, чтобы покрыть всю нужную мне область.
- То же, что и 5, но сделайте несколько звонков, по одному для каждого региона, который я обновил.
- Возможно, еще один способ сделать это, о котором я еще не подумал...
Следует отметить, что области, которые я обновляю, обычно довольно малы по сравнению с размером всей текстуры, например, текстура может быть 1024*1024, и я могу обновить 5 или около того 64*64 ее областей.