D3DImage Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Объект, ImageSource отображающий созданную пользователем поверхность Direct3D.
public ref class D3DImage : System::Windows::Media::ImageSource
public class D3DImage : System.Windows.Media.ImageSource
type D3DImage = class
inherit ImageSource
Public Class D3DImage
Inherits ImageSource
- Наследование
Примеры
В следующем примере кода показано, как объявить его D3DImage в XAML. Необходимо сопоставить System.Windows.Interop пространство имен, так как оно не входит в пространства имен XAML по умолчанию. Для получения дополнительной информации см. пошаговое руководство по размещению содержимого Direct3D9 в WPF.
<Window x:Class="D3DHost.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interop;assembly=PresentationCore"
Title="MainWindow" Height="300" Width="300" Background="PaleGoldenrod">
<Grid>
<Image x:Name="imgelt">
<Image.Source>
<i:D3DImage x:Name="d3dimg" />
</Image.Source>
</Image>
</Grid>
</Window>
Комментарии
D3DImage Используйте класс для размещения содержимого Direct3D в приложении Windows Presentation Foundation (WPF).
Lock Вызовите метод для изменения содержимого Direct3D, отображаемого элементом D3DImage. SetBackBuffer Вызовите метод, чтобы назначить поверхность Direct3D объектуD3DImage. AddDirtyRect Вызовите метод для отслеживания обновлений поверхности Direct3D. Unlock Вызовите метод для отображения измененных областей.
Класс D3DImage управляет двумя буферами отображения, которые называются задним буфером и передним буфером. Задний буфер — это поверхность Direct3D. Изменения обратного буфера копируются в передний буфер при вызове Unlock метода, где он отображается на оборудовании. Иногда передний буфер становится недоступным. Это отсутствие доступности может быть вызвано блокировкой экрана, полноэкранными эксклюзивными приложениями Direct3D, переключением пользователей или другими системными действиями. При возникновении этого, приложение WPF уведомляется о событии IsFrontBufferAvailableChanged. Как ваше приложение реагирует на недоступность переднего буфера, зависит от того, включен ли WPF для возврата к программной отрисовке. Метод SetBackBuffer имеет перегрузку, которая принимает параметр, указывающий, возвращается ли WPF к отрисовке программного обеспечения.
Реагирование на недоступный передний буфер, если WPF не возвращается к программной отрисовке
При вызове SetBackBuffer(D3DResourceType, IntPtr) перегрузки или вызове SetBackBuffer(D3DResourceType, IntPtr, Boolean) перегрузки с enableSoftwareFallback заданным параметром falseсистема отрисовки освобождает ссылку на задний буфер, когда передний буфер становится недоступным, и ничего не отображается. Когда фронтальный буфер снова доступен, система отрисовки вызывает IsFrontBufferAvailableChanged событие для уведомления вашего приложения WPF. Вы можете создать обработчик событий для события, IsFrontBufferAvailableChanged чтобы повторно перезапустить отрисовку с допустимой поверхностью Direct3D. Чтобы перезапустить отрисовку, необходимо вызвать SetBackBuffer.
Реагирование на недоступный передний буфер при возврате WPF к программной отрисовке
При вызове SetBackBuffer(D3DResourceType, IntPtr, Boolean) перегрузки с enableSoftwareFallback набором trueпараметров система отрисовки сохраняет свою ссылку на буфер обратной части, когда передний буфер становится недоступным, поэтому при повторной доступности переднего буфера не требуется вызывать SetBackBuffer . Могут возникнуть ситуации, когда устройство пользователя становится недоступным. При этом вызовите SetBackBuffer ссылку WPF на обратный буфер. Если необходимо сбросить устройство, вызовите SetBackBuffer, установив параметр backBuffer в null, а затем снова вызовите SetBackBuffer, установив backBuffer на допустимую поверхность Direct3D.
Note
Производительность значительно зависит от параметров поверхности Direct3D. Дополнительные сведения см. раздел Соображения по производительности для интеграции Direct3D9 и WPF.
Note
Класс D3DImage не отображает содержимое Direct3D при отрисовке WPF в программном обеспечении, например через подключение к удаленному рабочему столу, если вы не вызываете SetBackBuffer(D3DResourceType, IntPtr, Boolean) и не указываете true для enableSoftwareFallback параметра.
Конструкторы
| Имя | Описание |
|---|---|
| D3DImage() |
Инициализирует новый экземпляр класса D3DImage. |
| D3DImage(Double, Double) |
Инициализирует новый экземпляр D3DImage класса с указанным разрешением дисплея. |
Поля
| Имя | Описание |
|---|---|
| IsFrontBufferAvailableProperty |
Определяет IsFrontBufferAvailable свойство зависимостей. |
Свойства
| Имя | Описание |
|---|---|
| CanFreeze |
Возвращает значение, указывающее, можно ли изменить объект. (Унаследовано от Freezable) |
| DependencyObjectType |
Возвращает объект DependencyObjectType , который упаковывает тип СРЕДЫ CLR этого экземпляра. (Унаследовано от DependencyObject) |
| Dispatcher |
Dispatcher Возвращает это DispatcherObject значение, с которым связано. (Унаследовано от DispatcherObject) |
| HasAnimatedProperties |
Возвращает значение, указывающее, связан ли один или несколько AnimationClock объектов с любым из свойств зависимостей этого объекта. (Унаследовано от Animatable) |
| Height |
Возвращает высоту D3DImageобъекта . |
| IsFrontBufferAvailable |
Возвращает значение, указывающее, существует ли передний буфер. |
| IsFrozen |
Возвращает значение, указывающее, является ли объект изменяемым в настоящее время. (Унаследовано от Freezable) |
| IsSealed |
Возвращает значение, указывающее, запечатан ли этот экземпляр (только для чтения). (Унаследовано от DependencyObject) |
| Metadata |
Возвращает метаданные, связанные с источником изображения. |
| PixelHeight |
Возвращает высоту в пикселях D3DImage. |
| PixelWidth |
Возвращает ширину в пикселях D3DImage. |
| Width |
Возвращает ширину D3DImageэлемента . |
Методы
| Имя | Описание |
|---|---|
| AddDirtyRect(Int32Rect) |
Указывает область измененного буфера задней части. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Применяется к указанному объекту AnimationClockDependencyProperty. Если свойство уже анимировано, используется указанный HandoffBehavior параметр. (Унаследовано от Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Применяется к указанному объекту AnimationClockDependencyProperty. Если свойство уже анимировано, SnapshotAndReplace используется поведение передачи. (Унаследовано от Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Применяет анимацию к указанному DependencyProperty. Анимация запускается при отрисовки следующего кадра. Если указанное свойство уже анимировано, используется указанный HandoffBehavior параметр. (Унаследовано от Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Применяет анимацию к указанному DependencyProperty. Анимация запускается при отрисовки следующего кадра. Если указанное свойство уже анимировано, SnapshotAndReplace используется поведение передачи. (Унаследовано от Animatable) |
| CheckAccess() |
Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject. (Унаследовано от DispatcherObject) |
| ClearValue(DependencyProperty) |
Очищает локальное значение свойства. Свойство для очистки указывается идентификатором DependencyProperty . (Унаследовано от DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Очищает локальное значение свойства только для чтения. Свойство, которое необходимо очистить, задается параметром DependencyPropertyKey. (Унаследовано от DependencyObject) |
| Clone() |
Создает модификаторный клон этого объекта, делая глубокие копии значений этого D3DImage объекта. При копировании свойств зависимостей этот метод копирует ссылки на ресурсы и привязки данных (которые больше не могут разрешаться), но не анимации или их текущие значения. |
| CloneCore(Freezable) |
Делает экземпляр клоном (глубокой копией) указанных Freezable значений свойств с использованием базовых (не анимированных) значений свойств. |
| CloneCurrentValue() |
Создает модификаторный клон этого объекта, делая глубокие копии текущих значений этого D3DImage объекта. Ссылки на ресурсы, привязки данных и анимации не копируются, но их текущие значения копируются. |
| CloneCurrentValueCore(Freezable) |
Делает экземпляр модификируемым клоном (глубокой копией) указанного Freezable с использованием текущих значений свойств. |
| CoerceValue(DependencyProperty) |
Принуждает значение указанного свойства зависимостей. Это достигается путем вызова любой CoerceValueCallback функции, указанной в метаданных свойств для свойства зависимостей, так как он существует при вызове DependencyObject. (Унаследовано от DependencyObject) |
| CopyBackBuffer() |
Создает копию программного D3DImageобеспечения . |
| CreateInstance() |
Инициализирует новый экземпляр класса Freezable. (Унаследовано от Freezable) |
| CreateInstanceCore() |
При реализации в производном классе создает новый экземпляр производного D3DImage класса. |
| Equals(Object) |
Определяет, эквивалентен ли предоставленный DependencyObject объект текущему DependencyObject. (Унаследовано от DependencyObject) |
| Finalize() |
Освобождает ресурсы и выполняет другие операции очистки перед D3DImage восстановлением сборкой мусора. |
| Freeze() |
Делает текущий объект неизменяемым и задает для свойства значение IsFrozen |
| FreezeCore(Boolean) |
D3DImage Делает неизменяемым или определяет, может ли он быть изменен. |
| GetAnimationBaseValue(DependencyProperty) |
Возвращает неанимированное значение указанного DependencyProperty. (Унаследовано от Animatable) |
| GetAsFrozen() |
Создает замороженную копию базовых Freezable(не анимированных) значений свойств. Так как копия заморожена, все замороженные вложенные объекты копируются по ссылке. (Унаследовано от Freezable) |
| GetAsFrozenCore(Freezable) |
Делает экземпляр замороженным клоном указанных Freezable значений свойств (не анимированных). |
| GetCurrentValueAsFrozen() |
Создает замороженную копию с использованием текущих значений Freezable свойств. Так как копия заморожена, все замороженные вложенные объекты копируются по ссылке. (Унаследовано от Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Делает текущий экземпляр замороженным клоном указанного Freezable. Если объект имеет анимированные свойства зависимостей, их текущие анимированные значения копируются. |
| GetHashCode() |
Получает хэш-код для этого DependencyObject. (Унаследовано от DependencyObject) |
| GetLocalValueEnumerator() |
Создает специализированный перечислитель для определения того, какие свойства зависимостей имеют локальные значения для этого DependencyObject. (Унаследовано от DependencyObject) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| GetValue(DependencyProperty) |
Возвращает текущее эффективное значение свойства зависимостей для этого экземпляра DependencyObject. (Унаследовано от DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Повторно вычисляет эффективное значение для указанного свойства зависимостей. (Унаследовано от DependencyObject) |
| Lock() |
D3DImage Блокирует и включает операции на заднем буфере. |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| OnChanged() |
Вызывается при изменении текущего Freezable объекта. (Унаследовано от Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода. (Унаследовано от Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Убедитесь, что для элемента данных, который только что был установлен, установлены DependencyObjectType соответствующие указатели контекста. (Унаследовано от Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Переопределяет DependencyObject реализацию OnPropertyChanged(DependencyPropertyChangedEventArgs) для вызова всех Changed обработчиков в ответ на изменение свойства зависимостей типа Freezable. (Унаследовано от Freezable) |
| ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если оно существует. (Унаследовано от DependencyObject) |
| ReadPreamble() |
Гарантирует, что Freezable доступ к ней осуществляется из допустимого потока. Наследующие метод Freezable должны вызывать этот метод в начале любого API, который считывает элементы данных, которые не являются свойствами зависимостей. (Унаследовано от Freezable) |
| SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Назначает поверхность Direct3D в качестве источника заднего буфера. |
| SetBackBuffer(D3DResourceType, IntPtr) |
Назначает поверхность Direct3D в качестве источника заднего буфера. |
| SetCurrentValue(DependencyProperty, Object) |
Задает значение свойства зависимостей, не изменяя его источник значений. (Унаследовано от DependencyObject) |
| SetValue(DependencyProperty, Object) |
Задает локальное значение свойства зависимостей, указанное его идентификатором свойства зависимостей. (Унаследовано от DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Задает локальное значение свойства зависимостей только для чтения, указанное DependencyPropertyKey идентификатором свойства зависимости. (Унаследовано от DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Возвращает значение, указывающее, должны ли процессы сериализации сериализовать значение для указанного свойства зависимостей. (Унаследовано от DependencyObject) |
| ToString() |
Создает строковое представление этого объекта на основе текущего языка и региональных параметров. (Унаследовано от ImageSource) |
| ToString(IFormatProvider) |
Создает строковое представление этого объекта на основе переданного IFormatProvider объекта. Если поставщик имеет значение |
| TryLock(Duration) |
Пытается заблокировать D3DImage и ожидать указанного периода. |
| Unlock() |
Уменьшает число блокировок для D3DImage. |
| VerifyAccess() |
Принудительно применяет, что вызывающий поток имеет доступ к этому DispatcherObject. (Унаследовано от DispatcherObject) |
| WritePostscript() |
Changed Вызывает событие для Freezable метода и вызывает его OnChanged() метод. Классы, производные от Freezable этого метода, должны вызываться в конце любого API, который изменяет элементы класса, которые не хранятся в качестве свойств зависимостей. (Унаследовано от Freezable) |
| WritePreamble() |
Проверяет, что Freezable он не заморожен и к нему осуществляется доступ из допустимого контекста потоков. Freezable наследующие метод должны вызывать этот метод в начале любого API, записывающего элементы данных, которые не являются свойствами зависимостей. (Унаследовано от Freezable) |
События
| Имя | Описание |
|---|---|
| Changed |
Происходит при Freezable изменении объекта или объекта, содержащего его. (Унаследовано от Freezable) |
| IsFrontBufferAvailableChanged |
Происходит при IsFrontBufferAvailable изменении свойства. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Форматирует значение текущего экземпляра с помощью указанного формата. (Унаследовано от ImageSource) |