Struttura VIDEOMEMORY (ddrawint.h)
La struttura VIDEOMEMORY consente al driver di gestire la memoria di visualizzazione in heap.
Sintassi
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;
Members
dwFlags
Specifica un set di flag che descrivono questa sezione specifica della memoria di visualizzazione. Questo membro può essere un OR bit per bit di uno dei valori seguenti:
Flag | Significato |
---|---|
VIDMEM_ISLINEAR | La memoria di visualizzazione è un blocco contiguo di memoria. |
VIDMEM_ISRECTANGULAR | La memoria di visualizzazione è rettangolare. |
VIDMEM_ISHEAP | Questo flag è riservato per l'uso del sistema e deve essere ignorato dal driver. |
VIDMEM_ISNONLOCAL | L'heap risiede nella memoria non locale (AGP). |
VIDMEM_ISWC | Il driver ha abilitato la combinazione di scrittura nella memoria di visualizzazione in questo heap. La combinazione di scrittura è una modalità di memorizzazione nella cache speciale nei processori di classe Pentium Pro che esegue batch nella stessa riga della cache in modo che possano essere trasferiti in un singolo orologio del bus. La combinazione di scrittura non mantiene l'ordinamento delle scritture, un compromesso generalmente accettabile per i buffer dei frame. Per altre informazioni sulla combinazione di scrittura, vedere la documentazione di Intel. Questo flag non può essere utilizzato a meno che non sia impostato anche il flag VIDMEM_ISNONLOCAL. |
VIDMEM_HEAPDISABLED | Il runtime di Microsoft DirectDraw usa questo flag per disattivare un heap quando l'inizializzazione dell'heap non è riuscita. Questo problema si verifica probabilmente con un heap AGP. Il driver non deve impostare questo bit. |
fpStart
Punta all'indirizzo iniziale di un intervallo di memoria nell'heap.
fpEnd
Punta all'indirizzo finale di un intervallo di memoria se l'heap è lineare. Questo indirizzo è inclusivo, ovvero specifica l'ultimo indirizzo valido nell'intervallo. Di conseguenza, il numero di byte specificato da fpStart e fpEnd è (fpEnd - fpStart + 1).
dwWidth
Specifica la larghezza in byte della sezione di memoria a cui punta fpStart. Questo membro deve essere usato solo per descrivere aree di memoria rettangolari.
ddsCaps
Specifica una struttura DDSCAPS in cui il driver restituisce le funzionalità per cui non è possibile usare questa sezione di memoria.
ddsCapsAlt
Specifica una struttura DDSCAPS in cui il driver restituisce le funzionalità per cui non è possibile usare questo blocco di memoria quando non viene trovata alcuna altra memoria nel primo passaggio.
lpHeap
Riservato per l'uso del sistema e deve essere ignorato dal driver.
dwHeight
Specifica l'altezza del blocco di memoria a cui punta fpStart . Questo membro deve essere usato solo per descrivere aree di memoria rettangolari.
Commenti
In Microsoft Windows 2000 e versioni successive la struttura dei dati è denominata VIDEOMEMORY e in Windows 98/Me la struttura dei dati è denominata VIDMEM.
GDI alloca e passa una matrice di strutture VIDEOMEMORY alla seconda chiamata della funzione DrvGetDirectDrawInfo del driver. Il driver deve compilare i membri appropriati di ogni struttura per descrivere ogni sezione specifica della memoria. L'elenco fornisce una descrizione completa della memoria fuori schermo del driver.
DirectDraw esegue l'analisi per allocare le relative superfici nell'ordine in cui sono elencati gli heap di memoria di visualizzazione. Gli heap vengono gestiti in una matrice di strutture VIDEOMEMORY. La memoria allocata per prima sarà la memoria a cui si accede per primo. La struttura VIDEOMEMORY imposta determinati punti di partenza e determina la quantità di memoria sulla superficie e ciò che non può essere fatto con la superficie. DirectDraw lo gestisce con il suballocating e la deallocazione della memoria, ovvero creando e distruggendo superfici sotto ogni giurisdizione dell'heap. I limiti fisici determinano come configurare questi attributi.
Il responsabile dell'heap di DirectDraw esegue due passaggi attraverso le strutture VIDEOMEMORY. Il membro ddsCaps indica a DirectDraw quale memoria nell'heap non può essere usata per al primo passaggio. Ad esempio, se l'heap era abbastanza grande per un buffer nascosto, gli sprite potrebbero essere esclusi dall'allocazione al primo passaggio impostando il flag DSCAPS_OFFSCREENPLAIN nella struttura DDSCAPS . In questo modo, altre superfici riempiono di sprite, mantenendo il buffer nascosto per lo scorrimento della pagina. È possibile impostare il membro ddsCapsAlt per consentire gli sprite al secondo passaggio rimuovendo il flag DSCAPS_OFFSCREENPLAIN. In questo modo gli heap possono essere utilizzati preferibilmente per il loro utilizzo più alto e migliore, senza escludere usi alternativi. Scegliendo attentamente l'ordine di allocazione (ad esempio, elencando l'ultimo buffer nascosto), la necessità di ordinare in base a ddsCaps e ddsCapsAlt può talvolta essere eliminata.
Requisiti
Intestazione | ddrawint.h (include Winddi.h) |