WinRT: added SDL_WINDOWEVENT_RESIZED support, and moved window-resize-handling code from WinRT rendering code to D3D 11.1 code
This commit is contained in:
parent
0408a58b16
commit
43c3909acd
4 changed files with 21 additions and 18 deletions
|
@ -51,8 +51,8 @@ using namespace Windows::UI::Core;
|
||||||
/* Direct3D 11.1 renderer implementation */
|
/* Direct3D 11.1 renderer implementation */
|
||||||
|
|
||||||
static SDL_Renderer *D3D11_CreateRenderer(SDL_Window * window, Uint32 flags);
|
static SDL_Renderer *D3D11_CreateRenderer(SDL_Window * window, Uint32 flags);
|
||||||
//static void D3D11_WindowEvent(SDL_Renderer * renderer,
|
static void D3D11_WindowEvent(SDL_Renderer * renderer,
|
||||||
// const SDL_WindowEvent *event);
|
const SDL_WindowEvent *event);
|
||||||
//static int D3D11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
//static int D3D11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
|
||||||
//static int D3D11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
//static int D3D11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
|
||||||
// const SDL_Rect * rect, const void *pixels,
|
// const SDL_Rect * rect, const void *pixels,
|
||||||
|
@ -131,9 +131,7 @@ D3D11_CreateRenderer(SDL_Window * window, Uint32 flags)
|
||||||
data->windowSizeInDIPs = XMFLOAT2(0, 0);
|
data->windowSizeInDIPs = XMFLOAT2(0, 0);
|
||||||
data->renderTargetSize = XMFLOAT2(0, 0);
|
data->renderTargetSize = XMFLOAT2(0, 0);
|
||||||
|
|
||||||
// TODO: Create Direct3D Object(s)
|
renderer->WindowEvent = D3D11_WindowEvent;
|
||||||
|
|
||||||
//renderer->WindowEvent = D3D11_WindowEvent;
|
|
||||||
//renderer->CreateTexture = D3D11_CreateTexture;
|
//renderer->CreateTexture = D3D11_CreateTexture;
|
||||||
//renderer->UpdateTexture = D3D11_UpdateTexture;
|
//renderer->UpdateTexture = D3D11_UpdateTexture;
|
||||||
//renderer->LockTexture = D3D11_LockTexture;
|
//renderer->LockTexture = D3D11_LockTexture;
|
||||||
|
@ -402,7 +400,7 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer)
|
||||||
|
|
||||||
#ifdef __WINRT__
|
#ifdef __WINRT__
|
||||||
|
|
||||||
CoreWindow ^
|
static CoreWindow ^
|
||||||
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
|
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
|
||||||
{
|
{
|
||||||
SDL_Window * sdlWindow = renderer->window;
|
SDL_Window * sdlWindow = renderer->window;
|
||||||
|
@ -660,6 +658,7 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This method is called when the window's size changes.
|
||||||
HRESULT
|
HRESULT
|
||||||
D3D11_UpdateForWindowSizeChange(SDL_Renderer * renderer)
|
D3D11_UpdateForWindowSizeChange(SDL_Renderer * renderer)
|
||||||
{
|
{
|
||||||
|
@ -691,7 +690,7 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer)
|
||||||
D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata;
|
D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata;
|
||||||
HRESULT result = S_OK;
|
HRESULT result = S_OK;
|
||||||
|
|
||||||
// Reset these member variables to ensure that UpdateForWindowSizeChange recreates all resources.
|
// Reset these member variables to ensure that D3D11_UpdateForWindowSizeChange recreates all resources.
|
||||||
data->windowSizeInDIPs.x = 0;
|
data->windowSizeInDIPs.x = 0;
|
||||||
data->windowSizeInDIPs.y = 0;
|
data->windowSizeInDIPs.y = 0;
|
||||||
data->swapChain = nullptr;
|
data->swapChain = nullptr;
|
||||||
|
@ -711,6 +710,16 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer)
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
D3D11_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event)
|
||||||
|
{
|
||||||
|
//D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata;
|
||||||
|
|
||||||
|
if (event->event == SDL_WINDOWEVENT_RESIZED) {
|
||||||
|
D3D11_UpdateForWindowSizeChange(renderer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
D3D11_UpdateViewport(SDL_Renderer * renderer)
|
D3D11_UpdateViewport(SDL_Renderer * renderer)
|
||||||
{
|
{
|
||||||
|
|
|
@ -151,7 +151,11 @@ void SDL_WinRTApp::Uninitialize()
|
||||||
|
|
||||||
void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args)
|
void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args)
|
||||||
{
|
{
|
||||||
m_renderer->UpdateForWindowSizeChange();
|
SDL_SendWindowEvent(
|
||||||
|
m_sdlWindowData->sdlWindow,
|
||||||
|
SDL_WINDOWEVENT_RESIZED,
|
||||||
|
(int) ceil(args->Size.Width),
|
||||||
|
(int) ceil(args->Size.Height));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args)
|
void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args)
|
||||||
|
|
|
@ -16,9 +16,6 @@ using namespace Windows::UI::Core;
|
||||||
using namespace Windows::Foundation;
|
using namespace Windows::Foundation;
|
||||||
using namespace Windows::Graphics::Display;
|
using namespace Windows::Graphics::Display;
|
||||||
|
|
||||||
extern CoreWindow ^ D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer);
|
|
||||||
extern HRESULT D3D11_UpdateForWindowSizeChange(SDL_Renderer * renderer);
|
|
||||||
|
|
||||||
// Constructor.
|
// Constructor.
|
||||||
SDL_winrtrenderer::SDL_winrtrenderer() :
|
SDL_winrtrenderer::SDL_winrtrenderer() :
|
||||||
m_mainTextureHelperSurface(NULL),
|
m_mainTextureHelperSurface(NULL),
|
||||||
|
@ -102,12 +99,6 @@ void SDL_winrtrenderer::ResizeMainTexture(int w, int h)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method is called in the event handler for the SizeChanged event.
|
|
||||||
void SDL_winrtrenderer::UpdateForWindowSizeChange()
|
|
||||||
{
|
|
||||||
DX::ThrowIfFailed(D3D11_UpdateForWindowSizeChange(m_sdlRenderer));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SDL_winrtrenderer::Render(SDL_Surface * surface, SDL_Rect * rects, int numrects)
|
void SDL_winrtrenderer::Render(SDL_Surface * surface, SDL_Rect * rects, int numrects)
|
||||||
{
|
{
|
||||||
const float blackColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
const float blackColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
|
|
|
@ -16,7 +16,6 @@ internal:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual ~SDL_winrtrenderer();
|
virtual ~SDL_winrtrenderer();
|
||||||
virtual void UpdateForWindowSizeChange();
|
|
||||||
virtual void Present();
|
virtual void Present();
|
||||||
|
|
||||||
internal:
|
internal:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue