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) |