Compartilhar via


Estrutura VIDEOMEMORY (ddrawint.h)

A estrutura VIDEOMEMORY permite que o driver gerencie sua memória de exibição em heaps.

Sintaxe

typedef struct _VIDEOMEMORY {
  DWORD   dwFlags;
  FLATPTR fpStart;
  union {
    FLATPTR fpEnd;
    DWORD   dwWidth;
  };
  DDSCAPS ddsCaps;
  DDSCAPS ddsCapsAlt;
  union {
#if ...
    _VMEMHEAP        *lpHeap;
#else
    struct _VMEMHEAP *lpHeap;
#endif
    DWORD            dwHeight;
  };
} VIDEOMEMORY;

Membros

dwFlags

Especifica um conjunto de sinalizadores que descrevem esta seção específica da memória de exibição. Esse membro pode ser um OR bit a bit de qualquer um dos seguintes valores:

Sinalizador Significado
VIDMEM_ISLINEAR A memória de exibição é um bloco contíguo de memória.
VIDMEM_ISRECTANGULAR A memória de exibição é retangular.
VIDMEM_ISHEAP Esse sinalizador é reservado para uso do sistema e deve ser ignorado pelo driver.
VIDMEM_ISNONLOCAL O heap reside na memória não local (AGP).
VIDMEM_ISWC O driver habilitou a combinação de gravação na memória de exibição neste heap. A combinação de gravação é um modo de cache especial em processadores pentium pro-class que os lotes gravam na mesma linha de cache para que possam ser transferidos em um único relógio de barramento. A combinação de gravação não preserva a ordenação das gravações, uma compensação que geralmente é aceitável para buffers de quadro. Consulte a documentação da Intel para obter mais informações sobre a combinação de gravação. Esse sinalizador não pode ser usado, a menos que o sinalizador VIDMEM_ISNONLOCAL também esteja definido.
VIDMEM_HEAPDISABLED O runtime do Microsoft DirectDraw usa esse sinalizador para desativar um heap quando a inicialização do heap falhar. Isso provavelmente ocorre com um heap de AGP. O driver não deve definir esse bit.

fpStart

Aponta para o endereço inicial de um intervalo de memória no heap.

fpEnd

Aponta para o endereço final de um intervalo de memória se o heap for linear. Esse endereço é inclusivo, ou seja, especifica o último endereço válido no intervalo. Assim, o número de bytes especificados por fpStart e fpEnd é (fpEnd - fpStart + 1).

dwWidth

Especifica a largura em bytes da seção de memória apontada por fpStart. Esse membro só deve ser usado para descrever regiões de memória retangulares.

ddsCaps

Especifica uma estrutura DDSCAPS na qual o driver retorna os recursos para os quais esta seção de memória não pode ser usada.

ddsCapsAlt

Especifica uma estrutura DDSCAPS na qual o driver retorna os recursos para os quais essa parte da memória não pode ser usada quando nenhuma outra memória é encontrada na primeira passagem.

lpHeap

Reservado para uso do sistema e deve ser ignorado pelo driver.

dwHeight

Especifica a altura da parte da memória à qual fpStart aponta. Esse membro só deve ser usado para descrever regiões de memória retangulares.

Comentários

No Microsoft Windows 2000 e posterior, a estrutura de dados é chamada VIDEOMEMORY e, no Windows 98/Me, a estrutura de dados é chamada de VIDMEM.

O GDI aloca e passa uma matriz de estruturas VIDEOMEMORY para a segunda chamada da função DrvGetDirectDrawInfo do driver. O driver deve preencher os membros apropriados de cada estrutura para descrever cada seção específica da memória. A lista fornece uma descrição completa da memória offscreen do driver.

O DirectDraw examina para alocar suas superfícies na ordem em que os heaps de memória de exibição são listados. Os heaps são gerenciados em uma matriz de estruturas VIDEOMEMORY. A memória alocada primeiro será a memória acessada primeiro. A estrutura VIDEOMEMORY configura determinados pontos de partida e determina a quantidade de memória na superfície e o que não pode ser feito com a superfície. O DirectDraw o gerencia subalocando e desalocando a memória, ou seja, criando e destruindo superfícies sob a jurisdição de cada heap. Os limites físicos determinam como configurar esses atributos.

O gerenciador de heap do DirectDraw faz duas passagens pelas estruturas VIDEOMEMORY. O membro ddsCaps indica para DirectDraw para o que a memória no heap não pode ser usada na primeira passagem. Por exemplo, se o heap for grande o suficiente para um buffer traseiro, os sprites poderão ser excluídos de serem alocados na primeira passagem definindo o sinalizador DSCAPS_OFFSCREENPLAIN na estrutura DDSCAPS . Dessa forma, outras superfícies se encheriam de sprites, preservando o buffer traseiro para inversão de página. O membro ddsCapsAlt pode ser definido para permitir sprites na segunda passagem (removendo o sinalizador DSCAPS_OFFSCREENPLAIN). Isso permite que os heaps sejam usados preferencialmente para seu uso mais alto e melhor, sem descartar usos alternativos. Ao escolher a ordem de alocação cuidadosamente (por exemplo, listando o buffer de fundo por último), a necessidade de classificar por ddsCaps e ddsCapsAlt às vezes pode ser eliminada.

Requisitos

   
Cabeçalho ddrawint.h (inclua Winddi.h)

Confira também

DDSCAPS

DrvGetDirectDrawInfo