Método ID2D1RenderTarget::BeginDraw (d2d1.h)
Inicia el dibujo en este destino de representación.
Sintaxis
void BeginDraw();
Valor devuelto
None
Observaciones
Las operaciones de dibujo solo se pueden emitir entre una llamada a BeginDraw y EndDraw .
BeginDraw y EndDraw se usan para indicar que el sistema Direct2D usa un destino de representación. Diferentes implementaciones de ID2D1RenderTarget pueden comportarse de forma diferente cuando se llama a BeginDraw . Un ID2D1BitmapRenderTarget puede bloquearse entre las llamadas a BeginDraw/EndDraw, un destino de representación de superficie DXGI puede adquirirse en BeginDraw y liberarse en EndDraw, mientras que un ID2D1HwndRenderTarget puede comenzar a procesar por lotes en BeginDraw y puede presentarse en EndDraw, por ejemplo.
Se debe llamar al método BeginDraw antes de llamar a las operaciones de representación, aunque las operaciones de configuración de estado y recuperación de estado se pueden realizar incluso fuera de BeginDraw EndDraw/.
Después de llamar a BeginDraw , un destino de representación normalmente creará un lote de comandos de representación, pero aplazará el procesamiento de estos comandos hasta que un búfer interno esté lleno, se llame al método Flush o hasta que se llame a EndDraw . El método EndDraw hace que las operaciones de dibujo por lotes se completen y, a continuación, devuelve un HRESULT que indica el éxito de las operaciones y, opcionalmente, el estado de etiqueta del destino de representación en el momento en que se produjo el error. El método EndDraw siempre se realiza correctamente: no se debe llamar dos veces incluso si un endDraw anterior produjo un error HRESULT.
Si se llama a EndDraw sin una llamada coincidente a BeginDraw, devuelve un error que indica que se debe llamar a BeginDraw antes de EndDraw.
Al llamar a BeginDraw dos veces en un destino de representación, el destino se coloca en un estado de error en el que no se dibuja nada más, y devuelve una información de error y HRESULT adecuada cuando se llama a EndDraw .
Ejemplos
En el ejemplo siguiente se usa un ID2D1HwndRenderTarget para dibujar texto en una ventana.
// 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;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 7, Windows Vista con SP2 y Platform Update para Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2008 R2, Windows Server 2008 con SP2 y Actualización de plataforma para Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | d2d1.h |
Library | D2d1.lib |
Archivo DLL | D2d1.dll |