IDCompositionSurface::BeginDraw 메서드(dcomp.h)
이 Microsoft DirectComposition 표면 개체에 그리기를 시작합니다. 업데이트 사각형은 표면의 경계 내에 있어야 합니다. 그렇지 않으면 이 메서드가 실패합니다.
구문
HRESULT BeginDraw(
[in, optional] const RECT *updateRect,
[in] REFIID iid,
[out] void **updateObject,
[out] POINT *updateOffset
);
매개 변수
[in, optional] updateRect
형식: const RECT*
업데이트할 사각형입니다. 이 매개 변수가 NULL이면 전체 비트맵이 업데이트됩니다.
[in] iid
형식: REFIID
검색할 인터페이스의 식별자입니다.
[out] updateObject
형식: void**
iid 매개 변수에 지정된 형식의 인터페이스 포인터를 받습니다. 이 매개 변수는 NULL이 아니어야 합니다.
[out] updateOffset
형식: POINT*
애플리케이션이 업데이트된 콘텐츠를 그려야 하는 표면의 오프셋입니다. 이 오프셋은 업데이트 사각형의 왼쪽 위 모서리를 참조합니다.
반환 값
형식: HRESULT
함수가 성공하면 S_OK를 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.
설명
이 메서드를 사용하면 애플리케이션이 DirectComposition 표면 개체의 콘텐츠를 증분 방식으로 업데이트할 수 있습니다. 애플리케이션은 다음 시퀀스를 사용해야 합니다.
- BeginDraw를 호출하여 증분 업데이트를 시작합니다.
- 검색된 표면을 렌더링 대상으로 사용하고 검색된 오프셋에서 업데이트된 내용을 그립니다.
- IDCompositionSurface::EndDraw 메서드를 호출하여 업데이트를 완료합니다.
DirectComposition 표면 개체가 DirectComposition 디바이스 또는 Surface 팩터리 자체에서 생성된 경우 iid 매개 변수는 연결된 Direct2D 디바이스로 만든 경우에만 __uuidof(ID2D1DeviceContext)일 수 있습니다. 특히 애플리케이션은 Direct2D 디바이스를 renderingDevice 매개 변수로 사용하여 DCompositionCreateDevice2 함수 또는 IDCompositionDevice2::CreateSurfaceFactory 메서드를 호출해야 합니다. DirectComposition 표면이 Direct2D 디바이스와 연결되지 않은 Surface 팩터리를 통해 만들어졌거나 IDCompositionDevice2 인터페이스를 통해 직접 만들어졌으며 디바이스가 Direct2D 디바이스와 직접 연결되지 않은 경우 iid 매개 변수로 __uuidof(ID2D1DeviceContext)를 전달하면 이 메서드가 E_INVALIDARG 반환됩니다.
애플리케이션이 Direct2D 디바이스 컨텍스트를 업데이트 개체로 성공적으로 검색하는 경우 애플리케이션은 반환된 Direct2D 디바이스 컨텍스트에서 ID2D1DeviceContext::BeginDraw 또는 ID2D1DeviceContext::EndDraw 메서드를 호출해서는 안 됩니다.
검색된 오프셋이 요청된 업데이트 사각형의 왼쪽 위 모서리와 반드시 같은 것은 아닙니다. 애플리케이션은 렌더링 기본 형식을 변환하여 입력 사각형과 동일한 너비 및 높이의 사각형 내에서 그리고 지정된 오프셋에 그려야 합니다. 애플리케이션이 이 사각형 외부에 그리면 안 됩니다.
updateRectangle 매개 변수가 NULL이면 전체 표면이 업데이트됩니다. 이 경우 검색된 오프셋이 여전히 (0,0)이 아닐 수 있으므로 애플리케이션은 그에 따라 렌더링 기본 형식을 변환해야 합니다.
표면이 가상 표면이 아닌 경우 애플리케이션이 이 메서드를 가상이 아닌 특정 표면에 처음으로 호출할 때 업데이트 사각형은 요청된 업데이트 사각형에서 전체 표면을 지정하거나 NULL을 updateRectangle 매개 변수로 지정하여 전체 표면을 덮어야 합니다. 가상 표면의 경우 첫 번째 호출은 표면의 하위 사각형일 수 있습니다.
이 메서드에 대한 각 호출은 updateObject 표면에서 다른 개체를 검색할 수 있으므로 애플리케이션은 검색된 표면 포인터를 캐시해서는 안 됩니다. 애플리케이션은 그리기를 완료하는 즉시 검색된 포인터를 해제해야 합니다.
검색된 표면 사각형에는 비트맵의 이전 내용이 포함되어 있지 않습니다. 애플리케이션은 먼저 렌더링 대상을 지우거나 업데이트 사각형을 완전히 커버할 수 있는 충분한 렌더링 기본 형식을 실행하여 업데이트 사각형의 모든 픽셀을 업데이트해야 합니다. 업데이트 화면의 초기 콘텐츠는 정의되지 않으므로 모든 픽셀을 업데이트하지 못하면 정의되지 않은 동작이 발생합니다.
DirectComposition 표면은 한 번에 하나만 업데이트할 수 있습니다. 애플리케이션은 시작하거나 다른 표면에 그리기 위해 다시 시작하기 전에 한 표면에서 그리기를 일시 중단해야 합니다. 애플리케이션이 IDCompositionSurface::EndDraw에 대한 중간 호출 없이 동일한 표면 또는 동일한 DirectComposition 디바이스에 속한 다른 표면에 대해 BeginDraw를 두 번 호출하면 두 번째 호출이 실패합니다. 애플리케이션이 EndDraw를 호출하지 않고 IDCompositionDevice2::Commit을 호출하는 경우 업데이트는 보류 중인 상태로 유지됩니다. 업데이트는 애플리케이션이 EndDraw 를 호출한 다음 IDCompositionDevice2::Commit 메서드를 호출한 후에만 적용됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2012 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | dcomp.h |
라이브러리 | Dcomp.lib |
DLL | Dcomp.dll |