VIDEOMEMORY 구조체(ddrawint.h)
VIDEOMEMORY 구조를 사용하면 드라이버가 디스플레이 메모리를 힙으로 관리할 수 있습니다.
구문
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;
멤버
dwFlags
디스플레이 메모리의 이 특정 섹션을 설명하는 플래그 집합을 지정합니다. 이 멤버는 다음 값 중 비트 OR일 수 있습니다.
플래그 | 의미 |
---|---|
VIDMEM_ISLINEAR | 디스플레이 메모리는 연속 메모리 블록입니다. |
VIDMEM_ISRECTANGULAR | 디스플레이 메모리가 사각형입니다. |
VIDMEM_ISHEAP | 이 플래그는 시스템 사용을 위해 예약되어 있으며 드라이버에서 무시해야 합니다. |
VIDMEM_ISNONLOCAL | 힙은 비로컬(AGP) 메모리에 상주합니다. |
VIDMEM_ISWC | 드라이버는 이 힙의 디스플레이 메모리에서 쓰기 결합을 사용하도록 설정했습니다. 쓰기 결합은 펜티엄 Pro 클래스 프로세서의 특수 캐싱 모드로, 일괄 처리가 단일 버스 클록으로 전송될 수 있도록 동일한 캐시 줄에 씁니다. 쓰기 결합은 일반적으로 프레임 버퍼에 허용되는 절충인 쓰기 순서를 유지하지 않습니다. 쓰기 결합에 대한 자세한 내용은 Intel 설명서를 참조하세요. VIDMEM_ISNONLOCAL 플래그도 설정하지 않으면 이 플래그를 사용할 수 없습니다. |
VIDMEM_HEAPDISABLED | Microsoft DirectDraw 런타임은 이 플래그를 사용하여 힙의 초기화에 실패한 경우 힙을 끕니다. 이는 AGP 힙에서 발생할 가능성이 큽니다. 드라이버는 이 비트를 설정해서는 안 됩니다. |
fpStart
힙에 있는 메모리 범위의 시작 주소를 가리킵니다.
fpEnd
힙이 선형인 경우 메모리 범위의 끝 주소를 가리킵니다. 이 주소는 포함됩니다. 즉, 범위에서 마지막으로 유효한 주소를 지정합니다. 따라서 fpStart 및 fpEnd 로 지정된 바이트 수는 (fpEnd - fpStart + 1)입니다.
dwWidth
fpStart에서 가리키는 메모리 섹션의 너비를 바이트 단위로 지정합니다. 이 멤버는 사각형 메모리 영역을 설명하는 데만 사용해야 합니다.
ddsCaps
드라이버가 이 메모리 섹션을 사용할 수 없는 기능을 반환하는 DDSCAPS 구조를 지정합니다.
ddsCapsAlt
드라이버가 첫 번째 패스에서 다른 메모리를 찾을 수 없을 때 이 메모리 청크를 사용할 수 없는 기능을 반환하는 DDSCAPS 구조를 지정합니다.
lpHeap
시스템 사용을 위해 예약되며 드라이버에서 무시해야 합니다.
dwHeight
fpStart가 가리키는 메모리 청크의 높이를 지정합니다. 이 멤버는 사각형 메모리 영역을 설명하는 데만 사용해야 합니다.
설명
Microsoft Windows 2000 이상에서는 데이터 구조를 VIDEOMEMORY라고 하며 Windows 98/Me에서는 데이터 구조를 VIDMEM이라고 합니다.
GDI는 VIDEOMEMORY 구조의 배열을 할당하고 드라이버의 DrvGetDirectDrawInfo 함수의 두 번째 호출에 전달합니다. 드라이버는 메모리의 각 특정 섹션을 설명하기 위해 각 구조체의 적절한 멤버를 채워야 합니다. 이 목록은 드라이버의 오프스크린 메모리에 대한 전체 설명을 제공합니다.
DirectDraw는 를 검색하여 디스플레이 메모리 힙이 나열되는 순서대로 표면을 할당합니다. 힙은 VIDEOMEMORY 구조의 배열에서 관리됩니다. 먼저 할당된 메모리는 먼저 액세스되는 메모리입니다. VIDEOMEMORY 구조는 특정 시작점을 설정하고 표면의 메모리 양과 표면으로 수행할 수 없는 작업을 결정합니다. DirectDraw는 메모리를 하위 할당 및 할당 취소하여 관리합니다. 즉, 각 힙의 관할 구역에서 표면을 만들고 삭제합니다. 물리적 제한은 이러한 특성을 설정하는 방법을 결정합니다.
DirectDraw의 힙 관리자는 VIDEOMEMORY 구조를 통해 두 번의 패스를 합니다. ddsCaps 멤버는 DirectDraw에 첫 번째 패스에서 힙의 메모리를 사용할 수 없는 것을 나타냅니다. 예를 들어 힙이 백 버퍼에 충분히 큰 경우 DDSCAPS 구조체에서 DSCAPS_OFFSCREENPLAIN 플래그를 설정하여 스프라이트가 첫 번째 패스에 할당되지 않도록 제외할 수 있습니다. 이렇게 하면 페이지 대칭 이동에 대한 백 버퍼를 유지하면서 다른 표면이 스프라이트로 채워집니다. ddsCapsAlt 멤버는 두 번째 패스에서 스프라이트를 허용하도록 설정할 수 있습니다(DSCAPS_OFFSCREENPLAIN 플래그를 제거). 이렇게 하면 대체 용도를 배제하지 않고 가장 높고 가장 잘 사용하기 위해 힙을 우선적으로 사용할 수 있습니다. 할당 순서를 신중하게 선택하면(예: 마지막 백 버퍼를 나열하여) ddsCaps 및 ddsCapsAlt 를 기준으로 정렬해야 하는 필요성이 제거될 수 있습니다.
요구 사항
머리글 | ddrawint.h(Winddi.h 포함) |