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

힙이 선형인 경우 메모리 범위의 끝 주소를 가리킵니다. 이 주소는 포함됩니다. 즉, 범위에서 마지막으로 유효한 주소를 지정합니다. 따라서 fpStartfpEnd 로 지정된 바이트 수는 (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 플래그를 제거). 이렇게 하면 대체 용도를 배제하지 않고 가장 높고 가장 잘 사용하기 위해 힙을 우선적으로 사용할 수 있습니다. 할당 순서를 신중하게 선택하면(예: 마지막 백 버퍼를 나열하여) ddsCapsddsCapsAlt 를 기준으로 정렬해야 하는 필요성이 제거될 수 있습니다.

요구 사항

   
머리글 ddrawint.h(Winddi.h 포함)

추가 정보

DDSCAPS

DrvGetDirectDrawInfo