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이 아니어야 합니다.

참고 Windows 8 이 매개 변수는 surface였습니다.
 

[out] updateOffset

형식: POINT*

애플리케이션이 업데이트된 콘텐츠를 그려야 하는 표면의 오프셋입니다. 이 오프셋은 업데이트 사각형의 왼쪽 위 모서리를 참조합니다.

반환 값

형식: HRESULT

함수가 성공하면 S_OK를 반환합니다. 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

이 메서드를 사용하면 애플리케이션이 DirectComposition 표면 개체의 콘텐츠를 증분 방식으로 업데이트할 수 있습니다. 애플리케이션은 다음 시퀀스를 사용해야 합니다.

  1. BeginDraw를 호출하여 증분 업데이트를 시작합니다.
  2. 검색된 표면을 렌더링 대상으로 사용하고 검색된 오프셋에서 업데이트된 내용을 그립니다.
  3. IDCompositionSurface::EndDraw 메서드를 호출하여 업데이트를 완료합니다.
이 메서드에서 반환된 업데이트 개체는 iid 매개 변수의 값과 DirectComposition 표면 개체를 만든 방법에 따라 Direct2D 디바이스 컨텍스트 또는 DXGI 표면입니다. iid 매개 변수가 __uuidof(ID2D1DeviceContext)인 경우 반환된 개체는 DirectComposition 표면이 렌더링 대상으로 이미 선택된 Direct2D 디바이스 컨텍스트입니다. 그렇지 않으면 애플리케이션이 렌더링 대상으로 사용할 수 있는 DXGI 표면입니다. 두 경우 모두 반환된 개체는 애플리케이션에서 DCompositionCreateDevice2 함수 또는 IDCompositionDevice2::CreateSurfaceFactory 메서드에 전달한 Direct2D 또는 DXGI 디바이스와 연결됩니다.

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

추가 정보

IDCompositionSurface

IDCompositionSurface::EndDraw