1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "pch.h"
- #include "Direct3DContentProvider.h"
- using namespace PhoneXamlDirect3DApp1Comp;
- Direct3DContentProvider::Direct3DContentProvider(Direct3DInterop^ controller) :
- m_controller(controller)
- {
- m_controller->RequestAdditionalFrame += ref new RequestAdditionalFrameHandler([=] ()
- {
- if (m_host)
- {
- m_host->RequestAdditionalFrame();
- }
- });
- m_controller->RecreateSynchronizedTexture += ref new RecreateSynchronizedTextureHandler([=] ()
- {
- if (m_host)
- {
- m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
- }
- });
- }
- // IDrawingSurfaceContentProviderNative interface
- HRESULT Direct3DContentProvider::Connect(_In_ IDrawingSurfaceRuntimeHostNative* host)
- {
- m_host = host;
- return m_controller->Connect(host);
- }
- void Direct3DContentProvider::Disconnect()
- {
- m_controller->Disconnect();
- m_host = nullptr;
- m_synchronizedTexture = nullptr;
- }
- HRESULT Direct3DContentProvider::PrepareResources(_In_ const LARGE_INTEGER* presentTargetTime, _Out_ BOOL* contentDirty)
- {
- return m_controller->PrepareResources(presentTargetTime, contentDirty);
- }
- HRESULT Direct3DContentProvider::GetTexture(_In_ const DrawingSurfaceSizeF* size, _Out_ IDrawingSurfaceSynchronizedTextureNative** synchronizedTexture, _Out_ DrawingSurfaceRectF* textureSubRectangle)
- {
- HRESULT hr = S_OK;
- if (!m_synchronizedTexture)
- {
- hr = m_host->CreateSynchronizedTexture(m_controller->GetTexture(), &m_synchronizedTexture);
- }
- // Set output parameters.
- textureSubRectangle->left = 0.0f;
- textureSubRectangle->top = 0.0f;
- textureSubRectangle->right = static_cast<FLOAT>(size->width);
- textureSubRectangle->bottom = static_cast<FLOAT>(size->height);
- m_synchronizedTexture.CopyTo(synchronizedTexture);
- // Draw to the texture.
- if (SUCCEEDED(hr))
- {
- hr = m_synchronizedTexture->BeginDraw();
- if (SUCCEEDED(hr))
- {
- hr = m_controller->GetTexture(size, synchronizedTexture, textureSubRectangle);
- }
- m_synchronizedTexture->EndDraw();
- }
- return hr;
- }
|