Compartilhar via


D3DImage Classe

Definição

Um ImageSource que exibe uma superfície de 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 Instruções Passo a Passo: Hospedando 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 D3DImage classe para hospedar conteúdo Direct3D em um aplicativo de Windows Presentation Foundation (WPF).

Chame o Lock método para alterar o conteú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 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 o 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 , em que ele é exibido no hardware. Ocasionalmente, o buffer frontal se torna indisponível. Essa falta de disponibilidade pode ser causada por bloqueio de tela, aplicativos Direct3D de uso exclusivo em tela inteira, troca de usuário ou outras atividades do sistema. Quando isso ocorre, seu aplicativo WPF é notificado manipulando o IsFrontBufferAvailableChanged evento. A maneira que seu aplicativo responde à indisponibilidade do buffer frontal depende de se o WPF está habilitado para voltar à 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 falsecomo , 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 volta para a renderização de software

Quando você chama a SetBackBuffer(D3DResourceType, IntPtr, Boolean) sobrecarga com o enableSoftwareFallback parâmetro definido truecomo , o sistema de renderização mantém sua referência ao buffer de fundo quando o buffer frontal fica indisponível, portanto, não é necessário 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 o dispositivo, chame SetBackBuffer com o backBuffer parâmetro definido nullcomo e chame SetBackBuffer novamente com definido como backBuffer uma superfície Direct3D válida.

Observação

O desempenho depende muito das configurações da superfície do Direct3D. Para obter mais informações, consulte Considerações sobre desempenho para interoperabilidade entre Direct3D9 e WPF.

Observação

A D3DImage classe não exibe conteúdo Direct3D quando o WPF é renderizado em software, como em uma conexão de Área de Trabalho Remota, a menos que você chame SetBackBuffer(D3DResourceType, IntPtr, Boolean) e especifique true para o enableSoftwareFallback parâmetro .

Construtores

D3DImage()

Inicializa uma nova instância da classe D3DImage.

D3DImage(Double, Double)

Inicializa uma nova instância da classe D3DImage com a resolução de vídeo especificada.

Campos

IsFrontBufferAvailableProperty

Identifica a propriedade de dependência IsFrontBufferAvailable.

Propriedades

CanFreeze

Obtém um valor que indica se o objeto pode se tornar não modificá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 ao qual este DispatcherObject está associado.

(Herdado de DispatcherObject)
HasAnimatedProperties

Obtém um valor que indica se um ou mais objetos AnimationClock está associado a qualquer uma das propriedades de dependência do objeto.

(Herdado de Animatable)
Height

Obtém a altura da D3DImage.

IsFrontBufferAvailable

Obtém um valor que indica se existe um buffer frontal.

IsFrozen

Obtém um valor que indica se o objeto pode ser modificado no momento.

(Herdado de Freezable)
IsSealed

Obtém um valor que indica se essa instância está validada no momento (somente leitura).

(Herdado de DependencyObject)
Metadata

Obtém os metadados associados à fonte da imagem.

PixelHeight

Obtém a altura da D3DImage, em pixels.

PixelWidth

Obtém a largura da D3DImage, em pixels.

Width

Obtém a largura da D3DImage.

Métodos

AddDirtyRect(Int32Rect)

Especifica a área do buffer de fundo que foi alterada.

ApplyAnimationClock(DependencyProperty, AnimationClock)

Aplica um AnimationClock ao DependencyProperty especificado. Se a propriedade já tiver sido animada, o comportamento de entrega de SnapshotAndReplace será usado.

(Herdado de Animatable)
ApplyAnimationClock(DependencyProperty, AnimationClock, HandoffBehavior)

Aplica um AnimationClock ao DependencyProperty especificado. Se a propriedade já for animada, o HandoffBehavior especificado será usado.

(Herdado de Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline)

Aplica uma animação ao DependencyProperty especificado. A animação é iniciada quando o próximo quadro for renderizado. Se a propriedade especificada já tiver sido animada, o comportamento de entrega de SnapshotAndReplace será usado.

(Herdado de Animatable)
BeginAnimation(DependencyProperty, AnimationTimeline, HandoffBehavior)

Aplica uma animação ao DependencyProperty especificado. A animação é iniciada quando o próximo quadro for renderizado. Se a propriedade especifica já for animada, o HandoffBehavior especificado será usado.

(Herdado de Animatable)
CheckAccess()

Determina se o thread de chamada tem acesso a este DispatcherObject.

(Herdado de DispatcherObject)
ClearValue(DependencyProperty)

Limpa o valor local de uma propriedade. A propriedade a ser limpa é especificada por um identificador DependencyProperty.

(Herdado de DependencyObject)
ClearValue(DependencyPropertyKey)

Limpa o valor local de uma propriedade somente leitura. A propriedade a ser limpa é especificada por um DependencyPropertyKey.

(Herdado de DependencyObject)
Clone()

Cria um clone modificável deste objeto D3DImage, fazendo cópias em profundidade dos valores do objeto. Ao copiar as propriedades de dependência, esse método copia associações de dados e referências de recursos (que podem não mais ser resolvidos), mas não animações ou seus valores atuais.

CloneCore(Freezable)

Faz com que a instância seja um clone (cópia em profundidade) do Freezable especificado usando valores de propriedade base (não animados).

CloneCurrentValue()

Cria um clone modificável desse objeto D3DImage, fazendo cópias em profundidade dos valores do objeto atual. Referências de recursos, associações de dados e animações não são copiadas, mas seus valores atuais são.

CloneCurrentValueCore(Freezable)

Torna a instância um clone modificável (cópia em profundidade) do Freezable especificado usando os valores de propriedade atuais.

CoerceValue(DependencyProperty)

Converte o valor da propriedade de dependência especificada. Isso é feito invocando qualquer função CoerceValueCallback especificada nos metadados de propriedade para a propriedade de dependência, visto que ela existe na chamada a DependencyObject.

(Herdado de DependencyObject)
CopyBackBuffer()

Cria uma cópia de software da 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 classe derivada D3DImage.

Equals(Object)

Determina se um DependencyObject fornecido é equivalente ao DependencyObject atual.

(Herdado de DependencyObject)
Finalize()

Libera recursos e executa outras operações de limpeza antes que o D3DImage seja reivindicado pela coleta de lixo.

Freeze()

Torna o objeto atual não modificável e define sua propriedade IsFrozen para true.

(Herdado de Freezable)
FreezeCore(Boolean)

Torna a D3DImage não modificável ou determina se ela pode se tornar não modificável.

GetAnimationBaseValue(DependencyProperty)

Retorna o valor não animado do DependencyProperty especificado.

(Herdado de Animatable)
GetAsFrozen()

Cria uma cópia congelada o Freezable usando valores de propriedade base (não animadas). Já que a cópia está congelada, quaisquer subobjetos congelados são copiados por referência.

(Herdado de Freezable)
GetAsFrozenCore(Freezable)

Torna a instância um clone congelado do Freezable especificado usando valores de propriedade base (não animados).

GetCurrentValueAsFrozen()

Cria uma cópia congelada do Freezable usando valores de propriedade atuais. Já que a cópia está congelada, quaisquer subobjetos congelados são copiados por referência.

(Herdado de Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Torna a instância atual um clone congelado do Freezable especificado. Se o objeto tiver propriedades de dependência animadas, seus valores animados atuais serão copiados.

GetHashCode()

Obtém o código hash para esse DependencyObject.

(Herdado de DependencyObject)
GetLocalValueEnumerator()

Cria um enumerador especializado para determinar quais propriedades de dependência têm valores definidos localmente nessa 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 nessa instância de um DependencyObject.

(Herdado de DependencyObject)
InvalidateProperty(DependencyProperty)

Reavalia o valor efetivo para a propriedade de dependência especificada.

(Herdado de DependencyObject)
Lock()

Bloqueia o D3DImage e permite operações no buffer de fundo.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
OnChanged()

Chamado quando o objeto Freezable atual é modificado.

(Herdado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Garante que os ponteiros de contexto apropriados sejam estabelecidos para um membro de dados DependencyObjectType que foi recém-definido.

(Herdado de Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Esse membro dá suporte à infraestrutura de Windows Presentation Foundation (WPF) e não se destina a ser usado diretamente do seu código.

(Herdado de Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Substitui a implementação DependencyObject de OnPropertyChanged(DependencyPropertyChangedEventArgs) para também invocar quaisquer manipuladores Changed em resposta à alteração de uma propriedade de dependência do tipo Freezable.

(Herdado de Freezable)
ReadLocalValue(DependencyProperty)

Retorna o valor local de uma propriedade de dependência, local, se houver.

(Herdado de DependencyObject)
ReadPreamble()

Garante que o Freezable esteja sendo acessado de um thread válido. Herdeiros do Freezable devem chamar esse método no início de qualquer API que lê membros de dados que não são propriedades de dependência.

(Herdado de Freezable)
SetBackBuffer(D3DResourceType, IntPtr)

Atribui uma superfície Direct3D como a origem do buffer de fundo.

SetBackBuffer(D3DResourceType, IntPtr, Boolean)

Atribui uma superfície Direct3D como a origem do buffer de fundo.

SetCurrentValue(DependencyProperty, Object)

Define o valor da propriedade de dependência sem alterar a origem do valor.

(Herdado de DependencyObject)
SetValue(DependencyProperty, Object)

Define o valor local de uma propriedade de dependência, especificada pelo identificador da propriedade de dependência.

(Herdado de DependencyObject)
SetValue(DependencyPropertyKey, Object)

Define o valor de uma propriedade de dependência somente leitura, especificada pelo identificador DependencyPropertyKey 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 passada. Se o provedor for null, o CurrentCulture será usado.

(Herdado de ImageSource)
TryLock(Duration)

Tenta bloquear a D3DImage e aguarda a duração especificada.

Unlock()

Diminui a contagem de bloqueio da D3DImage.

VerifyAccess()

Impõe que o thread de chamada tenha acesso a este DispatcherObject.

(Herdado de DispatcherObject)
WritePostscript()

Aciona o evento Changed para o Freezable e invoca o respectivo método OnChanged(). Classes que derivam de Freezable devem chamar este método no final de qualquer API que modifica os membros de 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 está sendo acessado de um contexto de threading válido. Herdeiros do Freezable 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

Changed

Ocorre quando o Freezable ou um objeto nele contido é modificado.

(Herdado de Freezable)
IsFrontBufferAvailableChanged

Ocorre quando a propriedade IsFrontBufferAvailable muda.

Implantações explícitas de interface

IFormattable.ToString(String, IFormatProvider)

Formata o valor da instância atual usando o formato especificado.

(Herdado de ImageSource)

Aplica-se a