Это следствие того, как был разработан d3d9. Изменение размера окна d3d9 требует вызова IDirect3DDevice9 :: Reset и из документов:
Вызов IDirect3DDevice9 :: Reset приводит к потере всех поверхностей памяти текстур, удалению управляемых текстур из видеопамяти и потере всей информации о состоянии.
Так оно и есть. На самом деле вы обычно не изменяете разрешение экрана вообще, от начала игры до конца игры. Обычно вы устанавливаете разрешение при запуске игры, позволяете сбросить настройки на экране некоторых специальных настроек.
Теперь я должен добавить, что если вы используете D3D9, есть специальный флаг выделения ресурсов, который вы можете использовать ( D3DPOOL_MANAGED ), который фактически позаботится о повторной загрузке ресурсов для вас . Таким образом, локальная (системная память) копия всех текстур, буферов вершин и т. Д. автоматически сохраняется в системной памяти, и когда графический процессор сбрасывается, эти текстуры и т. Д. Автоматически копируются обратно в графический процессор.
Имейте в виду, D3DPOOL_MANAGED
не допускается, если вы используете более новую IDirect3DDevice9Ex
.