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.
Примечание
Производительность во многом зависит от параметров поверхности Direct3D. Для получения дополнительной информации см. статью Рекомендации по производительности, связанные с взаимодействием Direct3D9 и WPF.
Примечание
Класс 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) |
Применяет AnimationClock к заданному DependencyProperty. Если свойство уже анимировано, используется эстафетное поведение SnapshotAndReplace. (Унаследовано от Animatable) |
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Применяет AnimationClock к заданному DependencyProperty. Если свойство уже является анимированным, используется указанное поведение HandoffBehavior. (Унаследовано от Animatable) |
BeginAnimation(DependencyProperty, AnimationTimeline) |
Применяет анимацию к указанному DependencyProperty. Анимация начинается при отрисовке следующего кадра. Если указанное свойство уже анимировано, используется поведение перемещения SnapshotAndReplace. (Унаследовано от Animatable) |
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Применяет анимацию к указанному DependencyProperty. Анимация начинается при отрисовке следующего кадра. Если указанное свойство уже является анимированным, используется указанное поведение HandoffBehavior. (Унаследовано от 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) |
Обеспечивает создание соответствующих указателей контекста для элемента данных типа DependencyObjectType, который был только что задан. (Унаследовано от Freezable) |
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Этот элемент поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода. (Унаследовано от Freezable) |
OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Переопределяет реализацию DependencyObject для OnPropertyChanged(DependencyPropertyChangedEventArgs), чтобы также вызвать любой обработчик Changed в ответ на изменение свойства зависимостей типа Freezable. (Унаследовано от Freezable) |
ReadLocalValue(DependencyProperty) |
Возвращает локальное значение свойства зависимостей, если таковое существует. (Унаследовано от DependencyObject) |
ReadPreamble() |
Обеспечивает доступ к Freezable из допустимого потока. Наследники объекта Freezable должны вызывать данный метод в начале любого API, который считывает элементы данных, не являющиеся свойствами зависимостей. (Унаследовано от Freezable) |
SetBackBuffer(D3DResourceType, IntPtr) |
Назначает поверхность Direct3D источником заднего буфера. |
SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Назначает поверхность 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) |