ID2D1RenderTarget::EndDraw 메서드(d2d1.h)

렌더링 대상에 대한 그리기 작업을 종료하고 현재 오류 상태 및 연결된 태그를 나타냅니다.

구문

HRESULT EndDraw(
  [out, optional] D2D1_TAG *tag1,
  [out, optional] D2D1_TAG *tag2
);

매개 변수

[out, optional] tag1

형식: D2D1_TAG*

이 메서드가 반환되면 오류를 발생시킨 그리기 작업에 대한 태그를 포함하거나 오류가 없는 경우 0을 포함합니다. 이 매개 변수는 초기화되지 않은 상태로 전달됩니다.

[out, optional] tag2

형식: D2D1_TAG*

이 메서드가 반환되면 오류를 발생시킨 그리기 작업에 대한 태그를 포함하거나 오류가 없는 경우 0을 포함합니다. 이 매개 변수는 초기화되지 않은 상태로 전달됩니다.

반환 값

형식: HRESULT

메서드가 성공하면 S_OK 반환합니다. 그렇지 않으면 HRESULT 오류 코드를 반환하고 tag1tag2 를 오류가 발생했을 때 활성 상태였던 태그로 설정합니다.

설명

그리기 작업은 BeginDrawEndDraw 호출 간에만 실행할 수 있습니다.

BeginDrawEndDraw 는 Direct2D 시스템에서 렌더링 대상을 사용하고 있음을 나타내는 데 사용합니다. BeginDraw가 호출될 때 ID2D1RenderTarget의 다양한 구현이 다르게 동작할 수 있습니다. ID2D1BitmapRenderTargetBeginDraw EndDraw/ 호출 사이에 잠길 수 있으며, DXGI 표면 렌더링 대상은 BeginDraw에서 획득되고 EndDraw에서 릴리스될 수 있으며, ID2D1HwndRenderTarget은 BeginDraw에서 일괄 처리를 시작하고EndDraw에 표시될 수 있습니다. 예를 들어.

BeginDraw EndDraw 외부에서도 상태 설정 및 상태 검색 작업을 수행할 수 있지만 렌더링 작업을 호출하려면 BeginDraw/ 메서드를 호출해야 합니다.

BeginDraw가 호출되면 렌더링 대상은 일반적으로 렌더링 명령의 일괄 처리를 빌드하지만 내부 버퍼가 가득 차거나 Flush 메서드가 호출되거나 EndDraw가 호출될 때까지 이러한 명령 처리를 연기합니다. EndDraw 메서드는 일괄 처리된 그리기 작업을 완료한 다음 작업의 성공을 나타내는 HRESULT를 반환하고, 필요에 따라 오류가 발생했을 때 렌더링 대상의 태그 상태를 반환합니다. EndDraw 메서드는 항상 성공합니다. 이전 EndDraw에서 HRESULT가 실패한 경우에도 두 번 호출하면 안 됩니다.

EndDrawBeginDraw에 대한 일치 호출 없이 호출되면 EndDraw 전에 BeginDraw를 호출해야 함을 나타내는 오류가 반환됩니다.

렌더링 대상에서 BeginDraw를 두 번 호출하면 대상이 더 이상 그려지지 않는 오류 상태가 되고 EndDraw가 호출되면 적절한 HRESULT 및 오류 정보를 반환합니다.

예제

다음 예제에서는 ID2D1HwndRenderTarget 을 사용하여 텍스트를 창에 그립니다.

//  Called whenever the application needs to display the client
//  window. This method writes "Hello, World"
//
//  Note that this function will automatically discard device-specific
//  resources if the Direct3D device disappears during function
//  invocation, and will recreate the resources the next time it's
//  invoked.
//
HRESULT DemoApp::OnRender()
{
    HRESULT hr;

    hr = CreateDeviceResources();

    if (SUCCEEDED(hr))
    {
        static const WCHAR sc_helloWorld[] = L"Hello, World!";

        // Retrieve the size of the render target.
        D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();

        m_pRenderTarget->BeginDraw();

        m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());

        m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));

        m_pRenderTarget->DrawText(
            sc_helloWorld,
            ARRAYSIZE(sc_helloWorld) - 1,
            m_pTextFormat,
            D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
            m_pBlackBrush
            );

        hr = m_pRenderTarget->EndDraw();

        if (hr == D2DERR_RECREATE_TARGET)
        {
            hr = S_OK;
            DiscardDeviceResources();
        }
    }

    return hr;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7, Windows Vista SP2 및 Windows Vista용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 R2, Windows Server 2008 SP2 및 Windows Server 2008용 플랫폼 업데이트 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 d2d1.h
라이브러리 D2d1.lib
DLL D2d1.dll

추가 정보

ID2D1RenderTarget