D3DImage Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Um ImageSource que exibe uma superfície do Direct3D criada pelo usuário.
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
- Herança
Exemplos
O exemplo de código a seguir mostra como declarar um D3DImage em XAML. Você deve mapear o System.Windows.Interop namespace, pois ele não está incluído nos namespaces XAML padrão. Para obter mais informações, consulte Passo a passo: hospedagem de conteúdo Direct3D9 no 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>
Comentários
Use a classe para hospedar o D3DImage conteúdo do Direct3D em um aplicativo do Windows Presentation Foundation (WPF).
Chame o Lock método para alterar o conteúdo do Direct3D exibido pelo D3DImage. Chame o SetBackBuffer método para atribuir uma superfície Direct3D a um D3DImage. Chame o AddDirtyRect método para acompanhar as atualizações para a superfície do Direct3D. Chame o Unlock método para exibir as áreas alteradas.
A D3DImage classe gerencia dois buffers de exibição, que são chamados de buffer traseiro e buffer frontal. O buffer de fundo é a superfície do Direct3D. As alterações no buffer de fundo são copiadas para o buffer frontal quando você chama o Unlock método, onde ele é exibido no hardware. Ocasionalmente, o buffer frontal fica indisponível. Essa falta de disponibilidade pode ser causada pelo bloqueio de tela, aplicativos Direct3D exclusivos em tela inteira, alternância de usuário ou outras atividades do sistema. Quando isso ocorre, seu aplicativo WPF é notificado manipulando o IsFrontBufferAvailableChanged evento. A maneira como seu aplicativo responde ao buffer frontal ficando indisponível depende se o WPF está habilitado para fazer fallback para a renderização de software. O SetBackBuffer método tem uma sobrecarga que usa um parâmetro que especifica se o WPF volta à renderização de software.
Respondendo a um buffer frontal indisponível quando o WPF não faz fallback para a renderização de software
Quando você chama a SetBackBuffer(D3DResourceType, IntPtr) sobrecarga ou chama a SetBackBuffer(D3DResourceType, IntPtr, Boolean) sobrecarga com o enableSoftwareFallback parâmetro definido como false, o sistema de renderização libera sua referência ao buffer de fundo quando o buffer frontal fica indisponível e nada é exibido. Quando o buffer frontal está disponível novamente, o sistema de renderização aciona o IsFrontBufferAvailableChanged evento para notificar seu aplicativo WPF. Você pode criar um manipulador de eventos para que o IsFrontBufferAvailableChanged evento reinicie a renderização novamente com uma superfície Direct3D válida. Para reiniciar a renderização, você deve chamar SetBackBuffer.
Respondendo a um buffer frontal indisponível quando o WPF voltar à renderização de software
Quando você chama a SetBackBuffer(D3DResourceType, IntPtr, Boolean) sobrecarga com o enableSoftwareFallback parâmetro definido como true, o sistema de renderização mantém sua referência ao buffer de fundo quando o buffer frontal fica indisponível, portanto, não há necessidade de chamar SetBackBuffer quando o buffer frontal estiver disponível novamente. Pode haver situações em que o dispositivo do usuário fica indisponível. Quando isso ocorrer, chame SetBackBuffer para liberar a referência do WPF para o buffer de fundo. Se você precisar redefinir seu dispositivo, chame SetBackBuffer com o backBuffer parâmetro definido como null, e chame SetBackBuffer novamente com backBuffer definido como uma superfície Direct3D válida.
Note
O desempenho depende muito das configurações da superfície do Direct3D. Para obter mais informações, consulte Considerações de desempenho para a interoperabilidade do Direct3D9 e do WPF.
Note
A D3DImage classe não exibe conteúdo direct3D quando o WPF é renderizado no software, como em uma conexão de Área de Trabalho Remota, a menos que você chame SetBackBuffer(D3DResourceType, IntPtr, Boolean) e especifique true o enableSoftwareFallback parâmetro.
Construtores
| Nome | Description |
|---|---|
| D3DImage() |
Inicializa uma nova instância da classe D3DImage. |
| D3DImage(Double, Double) |
Inicializa uma nova instância da D3DImage classe com a resolução de exibição especificada. |
Campos
| Nome | Description |
|---|---|
| IsFrontBufferAvailableProperty |
Identifica a IsFrontBufferAvailable propriedade de dependência. |
Propriedades
| Nome | Description |
|---|---|
| CanFreeze |
Obtém um valor que indica se o objeto pode ser tornado inmodificável. (Herdado de Freezable) |
| DependencyObjectType |
Obtém o DependencyObjectType que encapsula o tipo CLR dessa instância. (Herdado de DependencyObject) |
| Dispatcher |
Obtém o Dispatcher que DispatcherObject está associado. (Herdado de DispatcherObject) |
| HasAnimatedProperties |
Obtém um valor que indica se um ou mais AnimationClock objetos estão associados a qualquer uma das propriedades de dependência desse objeto. (Herdado de Animatable) |
| Height |
Obtém a altura do D3DImage. |
| IsFrontBufferAvailable |
Obtém um valor que indica se existe um buffer frontal. |
| IsFrozen |
Obtém um valor que indica se o objeto é modificável no momento. (Herdado de Freezable) |
| IsSealed |
Obtém um valor que indica se essa instância está lacrada no momento (somente leitura). (Herdado de DependencyObject) |
| Metadata |
Obtém os metadados associados à origem da imagem. |
| PixelHeight |
Obtém a altura do D3DImage. em pixels. |
| PixelWidth |
Obtém a largura do D3DImage. em pixels. |
| Width |
Obtém a largura do D3DImage. |
Métodos
| Nome | Description |
|---|---|
| AddDirtyRect(Int32Rect) |
Especifica a área do buffer de fundo que foi alterada. |
| ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior) |
Aplica-se a AnimationClockum DependencyProperty . Se a propriedade já estiver animada, a especificada HandoffBehavior será usada. (Herdado de Animatable) |
| ApplyAnimationClock(DependencyProperty, AnimationClock) |
Aplica-se a AnimationClockum DependencyProperty . Se a propriedade já estiver animada, o SnapshotAndReplace comportamento de entrega será usado. (Herdado de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior) |
Aplica uma animação ao especificado DependencyProperty. A animação é iniciada quando o próximo quadro é renderizado. Se a propriedade especificada já estiver animada, a especificada HandoffBehavior será usada. (Herdado de Animatable) |
| BeginAnimation(DependencyProperty, AnimationTimeline) |
Aplica uma animação ao especificado DependencyProperty. A animação é iniciada quando o próximo quadro é renderizado. Se a propriedade especificada já estiver animada, o SnapshotAndReplace comportamento de entrega será usado. (Herdado de Animatable) |
| CheckAccess() |
Determina se o thread de chamada tem acesso a isso DispatcherObject. (Herdado de DispatcherObject) |
| ClearValue(DependencyProperty) |
Limpa o valor local de uma propriedade. A propriedade a ser desmarcada é especificada por um DependencyProperty identificador. (Herdado de DependencyObject) |
| ClearValue(DependencyPropertyKey) |
Limpa o valor local de uma propriedade somente leitura. A propriedade a ser desmarcada é especificada por um DependencyPropertyKey. (Herdado de DependencyObject) |
| Clone() |
Cria um clone modificável desse D3DImage objeto, fazendo cópias profundas dos valores desse objeto. Ao copiar propriedades de dependência, esse método copia referências de recurso e associações de dados (que podem não ser mais resolvidas), mas não animações ou seus valores atuais. |
| CloneCore(Freezable) |
Torna a instância um clone (cópia profunda) dos valores de propriedade base (não animados) especificados Freezable . |
| CloneCurrentValue() |
Cria um clone modificável desse D3DImage objeto, fazendo cópias profundas dos valores atuais desse objeto. Referências de recurso, associações de dados e animações não são copiadas, mas seus valores atuais são copiados. |
| CloneCurrentValueCore(Freezable) |
Torna a instância um clone modificável (cópia profunda) do especificado Freezable usando valores de propriedade atuais. |
| CoerceValue(DependencyProperty) |
Coagi o valor da propriedade de dependência especificada. Isso é feito invocando qualquer CoerceValueCallback função especificada nos metadados de propriedade para a propriedade de dependência como ela existe na chamada DependencyObject. (Herdado de DependencyObject) |
| CopyBackBuffer() |
Cria uma cópia de software do D3DImage. |
| CreateInstance() |
Inicializa uma nova instância da classe Freezable. (Herdado de Freezable) |
| CreateInstanceCore() |
Quando implementado em uma classe derivada, cria uma nova instância da D3DImage classe derivada. |
| Equals(Object) |
Determina se um fornecido DependencyObject é equivalente ao atual DependencyObject. (Herdado de DependencyObject) |
| Finalize() |
Libera recursos e executa outras operações de limpeza antes que ela D3DImage seja recuperada pela coleta de lixo. |
| Freeze() |
Torna o objeto atual inmodificável e define sua IsFrozen propriedade como |
| FreezeCore(Boolean) |
Torna o D3DImage unmodifiable ou determina se ele pode ser tornado inmodificável. |
| GetAnimationBaseValue(DependencyProperty) |
Retorna o valor não animado do especificado DependencyProperty. (Herdado de Animatable) |
| GetAsFrozen() |
Cria uma cópia congelada dos valores de Freezablepropriedade base (não animados). Como a cópia está congelada, todos os sub-objetos congelados são copiados por referência. (Herdado de Freezable) |
| GetAsFrozenCore(Freezable) |
Torna a instância um clone congelado dos valores de propriedade base (não animados) especificados Freezable . |
| GetCurrentValueAsFrozen() |
Cria uma cópia congelada do Freezable uso de valores de propriedade atuais. Como a cópia está congelada, todos os sub-objetos congelados são copiados por referência. (Herdado de Freezable) |
| GetCurrentValueAsFrozenCore(Freezable) |
Torna a instância atual um clone congelado do especificado Freezable. Se o objeto tiver propriedades de dependência animadas, seus valores animados atuais serão copiados. |
| GetHashCode() |
Obtém um código hash para isso DependencyObject. (Herdado de DependencyObject) |
| GetLocalValueEnumerator() |
Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente.DependencyObject (Herdado de DependencyObject) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetValue(DependencyProperty) |
Retorna o valor efetivo atual de uma propriedade de dependência nesta instância de um DependencyObject. (Herdado de DependencyObject) |
| InvalidateProperty(DependencyProperty) |
Reavalia o valor efetivo da propriedade de dependência especificada. (Herdado de DependencyObject) |
| Lock() |
Bloqueia e D3DImage habilita as operações no buffer de fundo. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| OnChanged() |
Chamado quando o objeto atual Freezable é modificado. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty) |
Esse membro dá suporte à infraestrutura do WPF (Windows Presentation Foundation) e não se destina a ser usado diretamente do seu código. (Herdado de Freezable) |
| OnFreezablePropertyChanged(DependencyObject, DependencyObject) |
Garante que os ponteiros de contexto apropriados sejam estabelecidos para um DependencyObjectType membro de dados que acabou de ser definido. (Herdado de Freezable) |
| OnPropertyChanged(DependencyPropertyChangedEventArgs) |
Substitui a DependencyObject implementação de OnPropertyChanged(DependencyPropertyChangedEventArgs) invocar também os Changed manipuladores em resposta a uma propriedade de dependência de alteração do tipo Freezable. (Herdado de Freezable) |
| ReadLocalValue(DependencyProperty) |
Retorna o valor local de uma propriedade de dependência, se ela existir. (Herdado de DependencyObject) |
| ReadPreamble() |
Garante que ele Freezable esteja sendo acessado de um thread válido. Os herdadores devem Freezable chamar esse método no início de qualquer API que leia os membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
| SetBackBuffer(D3DResourceType, IntPtr, Boolean) |
Atribui uma superfície Direct3D como a origem do buffer de fundo. |
| SetBackBuffer(D3DResourceType, IntPtr) |
Atribui uma superfície Direct3D como a origem do buffer de fundo. |
| SetCurrentValue(DependencyProperty, Object) |
Define o valor de uma propriedade de dependência sem alterar sua fonte de valor. (Herdado de DependencyObject) |
| SetValue(DependencyProperty, Object) |
Define o valor local de uma propriedade de dependência, especificada por seu identificador de propriedade de dependência. (Herdado de DependencyObject) |
| SetValue(DependencyPropertyKey, Object) |
Define o valor local de uma propriedade de dependência somente leitura, especificada pelo DependencyPropertyKey identificador da propriedade de dependência. (Herdado de DependencyObject) |
| ShouldSerializeProperty(DependencyProperty) |
Retorna um valor que indica se os processos de serialização devem serializar o valor da propriedade de dependência fornecida. (Herdado de DependencyObject) |
| ToString() |
Cria uma representação de cadeia de caracteres desse objeto com base na cultura atual. (Herdado de ImageSource) |
| ToString(IFormatProvider) |
Cria uma representação de cadeia de caracteres desse objeto com base na IFormatProvider passagem. Se o provedor for |
| TryLock(Duration) |
Tenta bloquear e D3DImage aguarda a duração especificada. |
| Unlock() |
Decrementa a contagem de bloqueios para o D3DImage. |
| VerifyAccess() |
Impõe que o thread de chamada tenha acesso a isso DispatcherObject. (Herdado de DispatcherObject) |
| WritePostscript() |
Aciona o Changed evento para o Freezable método e invoca seu OnChanged() método. Classes das quais derivam Freezable devem chamar esse método no final de qualquer API que modifique os membros da classe que não são armazenados como propriedades de dependência. (Herdado de Freezable) |
| WritePreamble() |
Verifica se o Freezable não está congelado e se ele está sendo acessado de um contexto de threading válido. Freezable os herdadores devem chamar esse método no início de qualquer API que grava em membros de dados que não são propriedades de dependência. (Herdado de Freezable) |
Eventos
| Nome | Description |
|---|---|
| Changed |
Ocorre quando o objeto ou um Freezable objeto que ele contém é modificado. (Herdado de Freezable) |
| IsFrontBufferAvailableChanged |
Ocorre quando a IsFrontBufferAvailable propriedade é alterada. |
Implantações explícitas de interface
| Nome | Description |
|---|---|
| IFormattable.ToString(String, IFormatProvider) |
Formata o valor da instância atual usando o formato especificado. (Herdado de ImageSource) |