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:
David Ludwig 2013-02-09 16:00:55 -05:00
parent 0408a58b16
commit 43c3909acd
4 changed files with 21 additions and 18 deletions

View file

@ -51,8 +51,8 @@ using namespace Windows::UI::Core;
/* Direct3D 11.1 renderer implementation */
static SDL_Renderer *D3D11_CreateRenderer(SDL_Window * window, Uint32 flags);
//static void D3D11_WindowEvent(SDL_Renderer * renderer,
// const SDL_WindowEvent *event);
static void D3D11_WindowEvent(SDL_Renderer * renderer,
const SDL_WindowEvent *event);
//static int D3D11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
//static int D3D11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
// const SDL_Rect * rect, const void *pixels,
@ -131,9 +131,7 @@ D3D11_CreateRenderer(SDL_Window * window, Uint32 flags)
data->windowSizeInDIPs = 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->UpdateTexture = D3D11_UpdateTexture;
//renderer->LockTexture = D3D11_LockTexture;
@ -402,7 +400,7 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer)
#ifdef __WINRT__
CoreWindow ^
static CoreWindow ^
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
{
SDL_Window * sdlWindow = renderer->window;
@ -660,6 +658,7 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer)
return S_OK;
}
// This method is called when the window's size changes.
HRESULT
D3D11_UpdateForWindowSizeChange(SDL_Renderer * renderer)
{
@ -691,7 +690,7 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer)
D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata;
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.y = 0;
data->swapChain = nullptr;
@ -711,6 +710,16 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer)
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
D3D11_UpdateViewport(SDL_Renderer * renderer)
{

View file

@ -151,7 +151,11 @@ void SDL_WinRTApp::Uninitialize()
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)

View file

@ -16,9 +16,6 @@ using namespace Windows::UI::Core;
using namespace Windows::Foundation;
using namespace Windows::Graphics::Display;
extern CoreWindow ^ D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer);
extern HRESULT D3D11_UpdateForWindowSizeChange(SDL_Renderer * renderer);
// Constructor.
SDL_winrtrenderer::SDL_winrtrenderer() :
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)
{
const float blackColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };

View file

@ -16,7 +16,6 @@ internal:
public:
virtual ~SDL_winrtrenderer();
virtual void UpdateForWindowSizeChange();
virtual void Present();
internal: