Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
WinRT: added SDL_WINDOWEVENT_RESIZED support, and moved window-resize…
Browse files Browse the repository at this point in the history
…-handling code from WinRT rendering code to D3D 11.1 code
  • Loading branch information
DavidLudwig committed Feb 9, 2013
1 parent 43a54e8 commit ee07fe6
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
23 changes: 16 additions & 7 deletions src/render/direct3d11/SDL_render_d3d11.cpp
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -402,7 +400,7 @@ D3D11_CreateDeviceResources(SDL_Renderer * renderer)

#ifdef __WINRT__

CoreWindow ^
static CoreWindow ^
D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer)
{
SDL_Window * sdlWindow = renderer->window;
Expand Down Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand All @@ -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)
{
Expand Down
6 changes: 5 additions & 1 deletion src/video/windowsrt/SDL_WinRTApp.cpp
Expand Up @@ -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)
Expand Down
9 changes: 0 additions & 9 deletions src/video/windowsrt/SDL_winrtrenderer.cpp
Expand Up @@ -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),
Expand Down Expand Up @@ -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 };
Expand Down
1 change: 0 additions & 1 deletion src/video/windowsrt/SDL_winrtrenderer.h
Expand Up @@ -16,7 +16,6 @@ ref class SDL_winrtrenderer

public:
virtual ~SDL_winrtrenderer();
virtual void UpdateForWindowSizeChange();
virtual void Present();

internal:
Expand Down

0 comments on commit ee07fe6

Please sign in to comment.