mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.2 KiB
77 lines
2.2 KiB
#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; |
|
} |