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)

Vedi anche

DDSCAPS

DrvGetDirectDrawInfo