Merge pull request #492 from Armada651/master

Remove EmuWindow
This commit is contained in:
Pierre Bourdon 2014-06-15 14:16:53 +02:00
commit 020b4fde1e
14 changed files with 32 additions and 284 deletions

View File

@ -6,7 +6,6 @@
#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
#include "VideoCommon/EmuWindow.h"
#endif #endif
#include "AudioCommon/AudioCommon.h" #include "AudioCommon/AudioCommon.h"
@ -267,10 +266,6 @@ void Stop() // - Hammertime!
INFO_LOG(CONSOLE, "%s", StopMessage(true, "Main Emu thread stopped").c_str()); INFO_LOG(CONSOLE, "%s", StopMessage(true, "Main Emu thread stopped").c_str());
#ifdef _WIN32
EmuWindow::Close();
#endif
// Clear on screen messages that haven't expired // Clear on screen messages that haven't expired
g_video_backend->Video_ClearMessages(); g_video_backend->Video_ClearMessages();

View File

@ -8,7 +8,6 @@
#include "DolphinWX/GLInterface/GLInterface.h" #include "DolphinWX/GLInterface/GLInterface.h"
#include "VideoCommon/EmuWindow.h"
#include "VideoCommon/RenderBase.h" #include "VideoCommon/RenderBase.h"
#include "VideoCommon/VertexShaderManager.h" #include "VideoCommon/VertexShaderManager.h"
#include "VideoCommon/VideoConfig.h" #include "VideoCommon/VideoConfig.h"
@ -59,13 +58,16 @@ bool cInterfaceWGL::PeekMessages()
// Show the current FPS // Show the current FPS
void cInterfaceWGL::UpdateFPSDisplay(const std::string& text) void cInterfaceWGL::UpdateFPSDisplay(const std::string& text)
{ {
EmuWindow::SetWindowText(text); SetWindowTextA((HWND)m_window_handle, text.c_str());
} }
// Create rendering window. // Create rendering window.
// Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize() // Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize()
bool cInterfaceWGL::Create(void *&window_handle) bool cInterfaceWGL::Create(void *&window_handle)
{ {
if (window_handle == nullptr)
return false;
int _tx, _ty, _twidth, _theight; int _tx, _ty, _twidth, _theight;
Host_GetRenderWindowSize(_tx, _ty, _twidth, _theight); Host_GetRenderWindowSize(_tx, _ty, _twidth, _theight);
@ -73,20 +75,12 @@ bool cInterfaceWGL::Create(void *&window_handle)
s_backbuffer_width = _twidth; s_backbuffer_width = _twidth;
s_backbuffer_height = _theight; s_backbuffer_height = _theight;
m_window_handle = window_handle;
#ifdef _WIN32 #ifdef _WIN32
dllHandle = LoadLibrary(TEXT("OpenGL32.dll")); dllHandle = LoadLibrary(TEXT("OpenGL32.dll"));
#endif #endif
window_handle = (void*)EmuWindow::Create((HWND)window_handle, GetModuleHandle(0), _T("Please wait..."));
if (window_handle == nullptr)
{
Host_SysMessage("failed to create window");
return false;
}
// Show the window
EmuWindow::Show();
PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be PIXELFORMATDESCRIPTOR pfd = // pfd Tells Windows How We Want Things To Be
{ {
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
@ -111,7 +105,7 @@ bool cInterfaceWGL::Create(void *&window_handle)
int PixelFormat; // Holds The Results After Searching For A Match int PixelFormat; // Holds The Results After Searching For A Match
if (!(hDC=GetDC(EmuWindow::GetWnd()))) { if (!(hDC = GetDC((HWND)window_handle))) {
PanicAlert("(1) Can't create an OpenGL Device context. Fail."); PanicAlert("(1) Can't create an OpenGL Device context. Fail.");
return false; return false;
} }
@ -151,15 +145,16 @@ bool cInterfaceWGL::ClearCurrent()
void cInterfaceWGL::Update() void cInterfaceWGL::Update()
{ {
RECT rcWindow; RECT rcWindow;
if (!EmuWindow::GetParentWnd()) HWND parent = GetParent((HWND)m_window_handle);
if (!parent)
{ {
// We are not rendering to a child window - use client size. // We are not rendering to a child window - use client size.
GetClientRect(EmuWindow::GetWnd(), &rcWindow); GetClientRect((HWND)m_window_handle, &rcWindow);
} }
else else
{ {
// We are rendering to a child window - use parent size. // We are rendering to a child window - use parent size.
GetWindowRect(EmuWindow::GetParentWnd(), &rcWindow); GetWindowRect(parent, &rcWindow);
} }
// Get the new window width and height // Get the new window width and height
@ -168,11 +163,11 @@ void cInterfaceWGL::Update()
int height = rcWindow.bottom - rcWindow.top; int height = rcWindow.bottom - rcWindow.top;
// If we are rendering to a child window // If we are rendering to a child window
if (EmuWindow::GetParentWnd() != 0 && if (GetParent((HWND)m_window_handle) != 0 &&
(s_backbuffer_width != width || s_backbuffer_height != height) && (s_backbuffer_width != width || s_backbuffer_height != height) &&
width >= 4 && height >= 4) width >= 4 && height >= 4)
{ {
::MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE); ::MoveWindow((HWND)m_window_handle, 0, 0, width, height, FALSE);
s_backbuffer_width = width; s_backbuffer_width = width;
s_backbuffer_height = height; s_backbuffer_height = height;
} }
@ -192,7 +187,7 @@ void cInterfaceWGL::Shutdown()
hRC = nullptr; hRC = nullptr;
} }
if (hDC && !ReleaseDC(EmuWindow::GetWnd(), hDC)) if (hDC && !ReleaseDC((HWND)m_window_handle, hDC))
{ {
ERROR_LOG(VIDEO, "Attempt to release device context failed."); ERROR_LOG(VIDEO, "Attempt to release device context failed.");
hDC = nullptr; hDC = nullptr;

View File

@ -21,4 +21,6 @@ public:
void Update(); void Update();
bool PeekMessages(); bool PeekMessages();
void* m_window_handle;
}; };

View File

@ -41,6 +41,7 @@ void Close();
extern ID3D11Device* device; extern ID3D11Device* device;
extern ID3D11DeviceContext* context; extern ID3D11DeviceContext* context;
extern IDXGISwapChain* swapchain; extern IDXGISwapChain* swapchain;
extern HWND hWnd;
extern bool bFrameInProgress; extern bool bFrameInProgress;
void Reset(); void Reset();

View File

@ -26,7 +26,6 @@
#include "VideoCommon/AVIDump.h" #include "VideoCommon/AVIDump.h"
#include "VideoCommon/BPFunctions.h" #include "VideoCommon/BPFunctions.h"
#include "VideoCommon/EmuWindow.h"
#include "VideoCommon/Fifo.h" #include "VideoCommon/Fifo.h"
#include "VideoCommon/FPSCounter.h" #include "VideoCommon/FPSCounter.h"
#include "VideoCommon/ImageWrite.h" #include "VideoCommon/ImageWrite.h"
@ -178,7 +177,7 @@ void CreateScreenshotTexture(const TargetRectangle& rc)
D3D::SetDebugObjectName((ID3D11DeviceChild*)s_screenshot_texture, "staging screenshot texture"); D3D::SetDebugObjectName((ID3D11DeviceChild*)s_screenshot_texture, "staging screenshot texture");
} }
Renderer::Renderer() Renderer::Renderer(void *&window_handle)
{ {
int x, y, w_temp, h_temp; int x, y, w_temp, h_temp;
@ -186,7 +185,7 @@ Renderer::Renderer()
Host_GetRenderWindowSize(x, y, w_temp, h_temp); Host_GetRenderWindowSize(x, y, w_temp, h_temp);
D3D::Create(EmuWindow::GetWnd()); D3D::Create((HWND)window_handle);
s_backbuffer_width = D3D::GetBackBufferWidth(); s_backbuffer_width = D3D::GetBackBufferWidth();
s_backbuffer_height = D3D::GetBackBufferHeight(); s_backbuffer_height = D3D::GetBackBufferHeight();
@ -275,21 +274,8 @@ TargetRectangle Renderer::ConvertEFBRectangle(const EFBRectangle& rc)
// size. // size.
bool Renderer::CheckForResize() bool Renderer::CheckForResize()
{ {
while (EmuWindow::IsSizing())
Sleep(10);
if (EmuWindow::GetParentWnd())
{
// Re-stretch window to parent window size again, if it has a parent window.
RECT rcParentWindow;
GetWindowRect(EmuWindow::GetParentWnd(), &rcParentWindow);
int width = rcParentWindow.right - rcParentWindow.left;
int height = rcParentWindow.bottom - rcParentWindow.top;
if (width != Renderer::GetBackbufferWidth() || height != Renderer::GetBackbufferHeight())
MoveWindow(EmuWindow::GetWnd(), 0, 0, width, height, FALSE);
}
RECT rcWindow; RECT rcWindow;
GetClientRect(EmuWindow::GetWnd(), &rcWindow); GetClientRect(D3D::hWnd, &rcWindow);
int client_width = rcWindow.right - rcWindow.left; int client_width = rcWindow.right - rcWindow.left;
int client_height = rcWindow.bottom - rcWindow.top; int client_height = rcWindow.bottom - rcWindow.top;
@ -866,7 +852,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl
{ {
s_recordWidth = GetTargetRectangle().GetWidth(); s_recordWidth = GetTargetRectangle().GetWidth();
s_recordHeight = GetTargetRectangle().GetHeight(); s_recordHeight = GetTargetRectangle().GetHeight();
bAVIDumping = AVIDump::Start(EmuWindow::GetParentWnd(), s_recordWidth, s_recordHeight); bAVIDumping = AVIDump::Start(D3D::hWnd, s_recordWidth, s_recordHeight);
if (!bAVIDumping) if (!bAVIDumping)
{ {
PanicAlert("Error dumping frames to AVI."); PanicAlert("Error dumping frames to AVI.");

View File

@ -9,7 +9,7 @@ namespace DX11
class Renderer : public ::Renderer class Renderer : public ::Renderer
{ {
public: public:
Renderer(); Renderer(void *&window_handle);
~Renderer(); ~Renderer();
void SetColorMask() override; void SetColorMask() override;

View File

@ -21,6 +21,8 @@ class VideoBackend : public VideoBackendHardware
void UpdateFPSDisplay(const std::string&) override; void UpdateFPSDisplay(const std::string&) override;
unsigned int PeekMessages() override; unsigned int PeekMessages() override;
void* m_window_handle;
}; };
} }

View File

@ -29,7 +29,6 @@
#include "VideoCommon/BPStructs.h" #include "VideoCommon/BPStructs.h"
#include "VideoCommon/CommandProcessor.h" #include "VideoCommon/CommandProcessor.h"
#include "VideoCommon/EmuWindow.h"
#include "VideoCommon/Fifo.h" #include "VideoCommon/Fifo.h"
#include "VideoCommon/IndexGenerator.h" #include "VideoCommon/IndexGenerator.h"
#include "VideoCommon/OnScreenDisplay.h" #include "VideoCommon/OnScreenDisplay.h"
@ -58,7 +57,8 @@ unsigned int VideoBackend::PeekMessages()
void VideoBackend::UpdateFPSDisplay(const std::string& text) void VideoBackend::UpdateFPSDisplay(const std::string& text)
{ {
EmuWindow::SetWindowText(StringFromFormat("%s | D3D | %s", scm_rev_str, text.c_str())); std::string str = StringFromFormat("%s | D3D | %s", scm_rev_str, text.c_str());
SetWindowTextA((HWND)m_window_handle, str.c_str());
} }
std::string VideoBackend::GetName() const std::string VideoBackend::GetName() const
@ -147,6 +147,9 @@ void VideoBackend::ShowConfig(void *_hParent)
bool VideoBackend::Initialize(void *&window_handle) bool VideoBackend::Initialize(void *&window_handle)
{ {
if (window_handle == nullptr)
return false;
InitializeShared(); InitializeShared();
InitBackendInfo(); InitBackendInfo();
@ -158,12 +161,7 @@ bool VideoBackend::Initialize(void *&window_handle)
g_Config.VerifyValidity(); g_Config.VerifyValidity();
UpdateActiveConfig(); UpdateActiveConfig();
window_handle = (void*)EmuWindow::Create((HWND)window_handle, GetModuleHandle(0), _T("Loading - Please wait.")); m_window_handle = window_handle;
if (window_handle == nullptr)
{
ERROR_LOG(VIDEO, "An error has occurred while trying to create the window.");
return false;
}
s_BackendInitialized = true; s_BackendInitialized = true;
@ -178,7 +176,7 @@ void VideoBackend::Video_Prepare()
s_swapRequested = FALSE; s_swapRequested = FALSE;
// internal interfaces // internal interfaces
g_renderer = new Renderer; g_renderer = new Renderer(m_window_handle);
g_texture_cache = new TextureCache; g_texture_cache = new TextureCache;
g_vertex_manager = new VertexManager; g_vertex_manager = new VertexManager;
g_perf_query = new PerfQuery; g_perf_query = new PerfQuery;

View File

@ -56,7 +56,6 @@
#endif #endif
#ifdef _WIN32 #ifdef _WIN32
#include "VideoCommon/EmuWindow.h"
#endif #endif
#if defined _WIN32 || defined HAVE_LIBAV #if defined _WIN32 || defined HAVE_LIBAV
#include "VideoCommon/AVIDump.h" #include "VideoCommon/AVIDump.h"
@ -1461,7 +1460,7 @@ void Renderer::SwapImpl(u32 xfbAddr, u32 fbWidth, u32 fbHeight,const EFBRectangl
if (!bLastFrameDumped) if (!bLastFrameDumped)
{ {
#ifdef _WIN32 #ifdef _WIN32
bAVIDumping = AVIDump::Start(EmuWindow::GetParentWnd(), w, h); bAVIDumping = AVIDump::Start((HWND)((cInterfaceWGL*)GLInterface)->m_window_handle, w, h);
#else #else
bAVIDumping = AVIDump::Start(w, h); bAVIDumping = AVIDump::Start(w, h);
#endif #endif

View File

@ -80,7 +80,6 @@ Make AA apply instantly during gameplay if possible
#ifdef _WIN32 #ifdef _WIN32
#include "Common/IniFile.h" #include "Common/IniFile.h"
#include "VideoCommon/EmuWindow.h"
#endif #endif
#if defined(HAVE_WX) && HAVE_WX #if defined(HAVE_WX) && HAVE_WX

View File

@ -1,202 +0,0 @@
// Copyright 2013 Dolphin Emulator Project
// Licensed under GPLv2
// Refer to the license.txt file included.
#include <string>
#include <windows.h>
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/Host.h"
#include "VideoCommon/EmuWindow.h"
#include "VideoCommon/Fifo.h"
#include "VideoCommon/VideoBackendBase.h"
#include "VideoCommon/VideoConfig.h"
namespace EmuWindow
{
HWND m_hWnd = nullptr;
HWND m_hParent = nullptr;
HINSTANCE m_hInstance = nullptr;
WNDCLASSEX wndClass;
const TCHAR m_szClassName[] = _T("DolphinEmuWnd");
int g_winstyle;
static volatile bool s_sizing;
static const int WM_SETTEXT_CUSTOM = WM_USER + WM_SETTEXT;
bool IsSizing()
{
return s_sizing;
}
HWND GetWnd()
{
return m_hWnd;
}
HWND GetParentWnd()
{
return m_hParent;
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
{
switch ( iMsg )
{
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
break;
case WM_ENTERSIZEMOVE:
s_sizing = true;
break;
case WM_EXITSIZEMOVE:
s_sizing = false;
break;
/* Post the mouse events to the main window, it's necessary, because the difference between the
keyboard inputs is that these events only appear here, not in the parent window or any other WndProc()*/
case WM_LBUTTONDOWN:
if (g_ActiveConfig.backend_info.bSupports3DVision && g_ActiveConfig.b3DVision)
{
// This basically throws away the left button down input when b3DVision is activated so WX
// can't get access to it, stopping focus pulling on mouse click.
// (Input plugins use a different system so it doesn't cause too much weirdness)
break;
}
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
break;
// This is called when we close the window when we render to a separate window
case WM_CLOSE:
// When the user closes the window, we post an event to the main window to call Stop()
// Which then handles all the necessary steps to Shutdown the core
if (m_hParent == nullptr)
{
// Stop the game
//PostMessage(m_hParent, WM_USER, WM_USER_STOP, 0);
}
break;
case WM_USER:
break;
// Called when a screensaver wants to show up while this window is active
case WM_SYSCOMMAND:
switch (wParam)
{
case SC_SCREENSAVE:
case SC_MONITORPOWER:
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bDisableScreenSaver)
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
break;
case WM_SETCURSOR:
PostMessage(m_hParent, WM_USER, WM_USER_SETCURSOR, 0);
return true;
case WM_SETTEXT_CUSTOM:
SendMessage(hWnd, WM_SETTEXT, wParam, lParam);
break;
default:
return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
return 0;
}
HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title)
{
wndClass.cbSize = sizeof( wndClass );
wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
wndClass.lpfnWndProc = WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance;
wndClass.hIcon = LoadIcon( nullptr, IDI_APPLICATION );
wndClass.hCursor = nullptr;
wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
wndClass.lpszMenuName = nullptr;
wndClass.lpszClassName = m_szClassName;
wndClass.hIconSm = LoadIcon( nullptr, IDI_APPLICATION );
m_hInstance = hInstance;
RegisterClassEx( &wndClass );
m_hParent = parent;
m_hWnd = CreateWindow(m_szClassName, title, (g_ActiveConfig.backend_info.bSupports3DVision && g_ActiveConfig.b3DVision) ? WS_EX_TOPMOST | WS_POPUP : WS_CHILD,
0, 0, width, height, m_hParent, nullptr, hInstance, nullptr);
return m_hWnd;
}
void Show()
{
ShowWindow(m_hWnd, SW_SHOW);
BringWindowToTop(m_hWnd);
UpdateWindow(m_hWnd);
SetFocus(m_hParent);
}
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title)
{
// TODO:
// 1. Remove redundant window manipulation,
// 2. Request window sizes which actually make the client area map to a common resolution
HWND Ret;
int x=0, y=0, width=640, height=480;
Host_GetRenderWindowSize(x, y, width, height);
// TODO: Don't show if fullscreen
Ret = OpenWindow(hParent, hInstance, width, height, title);
if (Ret)
{
Show();
}
return Ret;
}
void Close()
{
DestroyWindow(m_hWnd);
UnregisterClass(m_szClassName, m_hInstance);
}
void SetSize(int width, int height)
{
RECT rc = {0, 0, width, height};
DWORD style = GetWindowLong(m_hWnd, GWL_STYLE);
AdjustWindowRect(&rc, style, false);
int w = rc.right - rc.left;
int h = rc.bottom - rc.top;
rc.left = (1280 - w)/2;
rc.right = rc.left + w;
rc.top = (1024 - h)/2;
rc.bottom = rc.top + h;
MoveWindow(m_hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE);
}
void SetWindowText(const std::string& text)
{
// the OS doesn't allow posting WM_SETTEXT,
// so we post our own message and convert it to that in WndProc
PostMessage(m_hWnd, WM_SETTEXT_CUSTOM, 0, (LPARAM)text.c_str());
}
}

View File

@ -1,19 +0,0 @@
#pragma once
#include <string>
#include <windows.h>
namespace EmuWindow
{
HWND GetWnd();
HWND GetParentWnd();
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title);
void Show();
void Close();
void SetSize(int displayWidth, int displayHeight);
bool IsSizing();
void OSDMenu(WPARAM wParam);
void SetWindowText(const std::string& text);
}

View File

@ -51,7 +51,6 @@
<ClCompile Include="CPMemory.cpp" /> <ClCompile Include="CPMemory.cpp" />
<ClCompile Include="Debugger.cpp" /> <ClCompile Include="Debugger.cpp" />
<ClCompile Include="DriverDetails.cpp" /> <ClCompile Include="DriverDetails.cpp" />
<ClCompile Include="EmuWindow.cpp" />
<ClCompile Include="Fifo.cpp" /> <ClCompile Include="Fifo.cpp" />
<ClCompile Include="FPSCounter.cpp" /> <ClCompile Include="FPSCounter.cpp" />
<ClCompile Include="FramebufferManagerBase.cpp" /> <ClCompile Include="FramebufferManagerBase.cpp" />
@ -98,7 +97,6 @@
<ClInclude Include="DataReader.h" /> <ClInclude Include="DataReader.h" />
<ClInclude Include="Debugger.h" /> <ClInclude Include="Debugger.h" />
<ClInclude Include="DriverDetails.h" /> <ClInclude Include="DriverDetails.h" />
<ClInclude Include="EmuWindow.h" />
<ClInclude Include="Fifo.h" /> <ClInclude Include="Fifo.h" />
<ClInclude Include="FPSCounter.h" /> <ClInclude Include="FPSCounter.h" />
<ClInclude Include="FramebufferManagerBase.h" /> <ClInclude Include="FramebufferManagerBase.h" />

View File

@ -32,9 +32,6 @@
<ClCompile Include="Debugger.cpp"> <ClCompile Include="Debugger.cpp">
<Filter>Base</Filter> <Filter>Base</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="EmuWindow.cpp">
<Filter>Base</Filter>
</ClCompile>
<ClCompile Include="FramebufferManagerBase.cpp"> <ClCompile Include="FramebufferManagerBase.cpp">
<Filter>Base</Filter> <Filter>Base</Filter>
</ClCompile> </ClCompile>
@ -150,9 +147,6 @@
<ClInclude Include="Debugger.h"> <ClInclude Include="Debugger.h">
<Filter>Base</Filter> <Filter>Base</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="EmuWindow.h">
<Filter>Base</Filter>
</ClInclude>
<ClInclude Include="FramebufferManagerBase.h"> <ClInclude Include="FramebufferManagerBase.h">
<Filter>Base</Filter> <Filter>Base</Filter>
</ClInclude> </ClInclude>