У меня есть сцена Direct3D11, настроенная в SlimDX в окне.Рендеринг выполняется в отдельном потоке.
Есть ли способ предотвратить растягивание рендерера изображения, когда оно обращается к элементу управления с измененным размером?Я пробовал ModeDescription.Scaling = DisplayModeScaling.Centered
, и это, похоже, не имеет никакого эффекта.Я что-то упускаю?
(я уже обновляю целевой размер рендеринга. Я спрашиваю это потому, что когда я изменяю размер элемента управления, он растягивает изображение, чтобы заполнить элемент управления за доли секунды доЦель рендеринга обновляется с новым размером. Это приводит к тому, что при изменении ее размера она мерцает ужасно. Если бы я мог сбросить цель рендеринга чуть быстрее, это могло бы избавить от мерцания. Хранение изображения в углу без его масштабированияотлично, так как в конечном итоге он вообще не будет масштабироваться.)
Обходной путь 1: Можно поместить цель рендеринга внутри элемента управления.Когда окно изменяет размеры, изменяйте размер только элемента управления, используя специальный метод, который сначала останавливает рендеринг, затем обновляет буферы и начинает рендеринг снова.Это немного взломать, хотя.Мне нужно дождаться завершения цикла рендеринга, затем заблокировать его, затем изменить его размер, затем разблокировать.
Обходной путь 2: Подобный обходной путь заключается в проверке флага изменения размера в цикле рендеринга.вместо того, чтобы прерывать это.Рендер должен иметь возможность рисовать напрямую без масштабирования.Это намного более приемлемо с точки зрения производительности.Однако для выполнения фактического изменения размера необходимо выполнить блокирующий вызов потока пользовательского интерфейса.
Обходной путь 3 : Вместо того, чтобы вообще изменять размеры элемента управления, можно сделать его максимально большимРазмер это может быть, но обрезается (внутри окна).Изменение размера не требуется, но прямоугольник ножниц должен поддерживаться аналогично обходным путям, описанным выше, если вы не возражаете против рендеринга большого количества пикселей вне экрана.Рендеринг двадцати или более дополнительных строк и столбцов пикселей имеет благоприятный эффект немедленного предоставления изображения на краю, когда размер окна уменьшается до большего.
В идеале изменение размера должно выполняться непосредственно из потока пользовательского интерфейса (не нужно дурачиться с его задержкой и повторным вводом потока пользовательского интерфейса из потока визуализации).Это не является обязанностью потока рендеринга, и это замедляет его.Аналогично, изменение размера буфера должно выполняться в потоке рендеринга для максимальной производительности (не нужно дурачиться с ожиданием / блокировкой / изменением размера / разблокировкой).Единственная причина, по которой это не работает, заключается в том, что поток рендеринга масштабируется, если изменение размера выполняется до изменения размера буферов.
Таким образом, мой вопрос остается в силе: Есть ли способ рендеринга без масштабирования?