В: C++ приложения \ Win32 (не в полноэкранном режиме) \ DX9окно DirectX9 размер во время выполнения без устройства сброса
Как я могу перерисовывать содержимое окна во время изменения размеров достаточно быстро и красиво? Изменить размер окна пользователя.
Различные подходы:
- Сброс устройства на каждом WM_SIZE \ WM_PAINT. Адекватное разрешение, но черные полосы появляются на высоких скоростях.
- Сбросить устройство на WM_EXITSIZEMOVE и сделать паузу на WM_ENTERSIZEMOVE. Лучшая скорость, но до уродливых ~ черных полос во время изменения размера.
- Невозможно выяснить, как использовать swapchain dx9 в этом случае
- Сохранять рендеринг и замену буферов во время изменения размера; сбросить WM_EXITSIZEMOVE. Именно то, что происходит в официальных демонстрациях с 2010 SDK. Выглядит быстро и приемлемо. Но [внезапно] на медленных компьютерных черных полосах снова появился. Тонкие и редкие, но настоящие. На самом деле, это очень странно: синхронный рендеринг и
Present(,,,)
на каждом WM_SIZE и \ или WM_PAINT исключает это на первый взгляд. А на втором. Возможно, я не понимаю что-то важное?
Итак, когда последний метод не удалось, я решил задать здесь. Возможно ли это, как-то сделать поверхность dx9 надежно приклеенной к границе окна. Нет черных полос. Предпочитайте медленную скорость масштабирования вниз, но синхронизируйте ее как-нибудь с DX.
Да, хорошее решение. Я попробую. Но может быть несколько проблем с настройкой нескольких мониторов и мультисэмплированием. – mjollneer
Несомненно. Тем не менее, вы всегда можете указать максимальный размер окна, используя WM_GETMINMAXINFO. Я еще не использовал свое решение с мультисэмплированием. – cdoubleplusgood