mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
Move the message display thing out of Render.cpp
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2335 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="Windows-1252"?>
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="9.00"
|
Version="9,00"
|
||||||
Name="Plugin_VideoOGL"
|
Name="Plugin_VideoOGL"
|
||||||
ProjectGUID="{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}"
|
ProjectGUID="{CFDCEE0E-FA45-4F72-9FCC-0B88F5A75160}"
|
||||||
RootNamespace="Plugin_VideoOGL"
|
RootNamespace="Plugin_VideoOGL"
|
||||||
@ -758,6 +758,14 @@
|
|||||||
<Filter
|
<Filter
|
||||||
Name="Render"
|
Name="Render"
|
||||||
>
|
>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Src\OnScreenDisplay.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Src\OnScreenDisplay.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\Src\PixelShaderCache.cpp"
|
RelativePath=".\Src\PixelShaderCache.cpp"
|
||||||
>
|
>
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "../Config.h"
|
#include "../Config.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "Win32.h"
|
#include "Win32.h"
|
||||||
#include "Render.h" // for AddMessage
|
#include "OnScreenDisplay.h" // for AddMessage
|
||||||
|
|
||||||
#include "StringUtil.h" // Common: For StringFromFormat
|
#include "StringUtil.h" // Common: For StringFromFormat
|
||||||
//////////////////////////////////
|
//////////////////////////////////
|
||||||
@ -70,12 +70,13 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
|
|||||||
int argc = 0;
|
int argc = 0;
|
||||||
char **argv = NULL;
|
char **argv = NULL;
|
||||||
wxEntryStart(argc, argv);
|
wxEntryStart(argc, argv);
|
||||||
if ( !wxTheApp || !wxTheApp->CallOnInit() )
|
if (!wxTheApp || !wxTheApp->CallOnInit())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
case DLL_PROCESS_DETACH:
|
||||||
|
// This causes a "stop hang", if the gfx config dialog has been opened.
|
||||||
wxEntryCleanup(); // Use wxUninitialize() if you don't want GUI
|
wxEntryCleanup(); // Use wxUninitialize() if you don't want GUI
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -96,276 +97,276 @@ extern bool gShowDebugger;
|
|||||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
namespace EmuWindow
|
namespace EmuWindow
|
||||||
{
|
{
|
||||||
HWND m_hWnd = NULL; // The new window that is created here
|
|
||||||
HWND m_hParent = NULL;
|
|
||||||
HWND m_hMain = NULL; // The main CPanel
|
|
||||||
|
|
||||||
HINSTANCE m_hInstance = NULL;
|
HWND m_hWnd = NULL; // The new window that is created here
|
||||||
WNDCLASSEX wndClass;
|
HWND m_hParent = NULL;
|
||||||
const TCHAR m_szClassName[] = "DolphinEmuWnd";
|
HWND m_hMain = NULL; // The main CPanel
|
||||||
int g_winstyle;
|
|
||||||
|
|
||||||
// ------------------------------------------
|
HINSTANCE m_hInstance = NULL;
|
||||||
/* Invisible cursor option. In the lack of a predefined IDC_BLANK we make
|
WNDCLASSEX wndClass;
|
||||||
an empty transparent cursor */
|
const TCHAR m_szClassName[] = "DolphinEmuWnd";
|
||||||
// ------------------
|
int g_winstyle;
|
||||||
HCURSOR hCursor = NULL, hCursorBlank = NULL;
|
|
||||||
void CreateCursors(HINSTANCE hInstance)
|
// ------------------------------------------
|
||||||
|
/* Invisible cursor option. In the lack of a predefined IDC_BLANK we make
|
||||||
|
an empty transparent cursor */
|
||||||
|
// ------------------
|
||||||
|
HCURSOR hCursor = NULL, hCursorBlank = NULL;
|
||||||
|
void CreateCursors(HINSTANCE hInstance)
|
||||||
|
{
|
||||||
|
BYTE ANDmaskCursor[] = { 0xff };
|
||||||
|
BYTE XORmaskCursor[] = { 0x00 };
|
||||||
|
hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor);
|
||||||
|
|
||||||
|
hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWND GetWnd()
|
||||||
|
{
|
||||||
|
return m_hWnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
HWND GetParentWnd()
|
||||||
|
{
|
||||||
|
return m_hParent;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
||||||
|
{
|
||||||
|
HDC hdc;
|
||||||
|
PAINTSTRUCT ps;
|
||||||
|
switch( iMsg )
|
||||||
{
|
{
|
||||||
BYTE ANDmaskCursor[] = { 0xff };
|
case WM_CREATE:
|
||||||
BYTE XORmaskCursor[] = { 0x00 };
|
PostMessage(m_hMain, WM_USER, OPENGL_WM_USER_CREATE, (int)m_hParent);
|
||||||
hCursorBlank = CreateCursor(hInstance, 0,0, 1,1, ANDmaskCursor,XORmaskCursor);
|
|
||||||
|
|
||||||
hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
HWND GetWnd()
|
|
||||||
{
|
|
||||||
return m_hWnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND GetParentWnd()
|
|
||||||
{
|
|
||||||
return m_hParent;
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc( HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam )
|
|
||||||
{
|
|
||||||
HDC hdc;
|
|
||||||
PAINTSTRUCT ps;
|
|
||||||
switch( iMsg )
|
|
||||||
{
|
|
||||||
case WM_CREATE:
|
|
||||||
PostMessage(m_hMain, WM_USER, OPENGL_WM_USER_CREATE, (int)m_hParent);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case WM_PAINT:
|
|
||||||
hdc = BeginPaint( hWnd, &ps );
|
|
||||||
EndPaint( hWnd, &ps );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_KEYDOWN:
|
|
||||||
switch( LOWORD( wParam ))
|
|
||||||
{
|
|
||||||
case VK_ESCAPE: // Pressing Esc Stop or Maximize
|
|
||||||
//DestroyWindow(hWnd);
|
|
||||||
//PostQuitMessage(0);
|
|
||||||
|
|
||||||
/* The fullscreen option for Windows users is not very user friendly. With this the user
|
|
||||||
can only get out of the fullscreen mode by pressing Esc or Alt + F4. Esc also stops
|
|
||||||
the emulation. Todo: But currently it hangs, so I have disabled the shutdown. */
|
|
||||||
//if (m_hParent == NULL) ExitProcess(0);
|
|
||||||
if (m_hParent == NULL)
|
|
||||||
{
|
|
||||||
if (g_Config.bFullscreen)
|
|
||||||
{
|
|
||||||
//PostMessage(m_hMain, WM_USER, OPENGL_WM_USER_STOP, 0); // Stop
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Toggle maximize and restore
|
|
||||||
if (IsZoomed(hWnd))
|
|
||||||
ShowWindow(hWnd, SW_RESTORE);
|
|
||||||
else
|
|
||||||
ShowWindow(hWnd, SW_MAXIMIZE);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'E': // EFB hotkey
|
|
||||||
if (g_Config.bEFBCopyDisableHotKey)
|
|
||||||
{
|
|
||||||
g_Config.bEFBCopyDisable = !g_Config.bEFBCopyDisable;
|
|
||||||
Renderer::AddMessage(StringFromFormat("Copy EFB was turned %s",
|
|
||||||
g_Config.bEFBCopyDisable ? "off" : "on").c_str(), 5000);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
g_VideoInitialize.pKeyPress(LOWORD(wParam), GetAsyncKeyState(VK_SHIFT) != 0, GetAsyncKeyState(VK_CONTROL) != 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* The reason we pick up the WM_MOUSEMOVE is to be able to change this option
|
|
||||||
during gameplay. The alternative is to load one of the cursors when the plugin
|
|
||||||
is loaded and go with that. This should only produce a minimal performance hit
|
|
||||||
because SetCursor is not supposed to actually change the cursor if it's the
|
|
||||||
same as the one before. */
|
|
||||||
case WM_MOUSEMOVE:
|
|
||||||
/* Check rendering mode; child or parent. Then post the mouse moves to the main window
|
|
||||||
it's nessesary for both the chil dwindow and separate rendering window because
|
|
||||||
moves over the rendering window do not reach the main program then. */
|
|
||||||
if (GetParentWnd() == NULL) // Separate rendering window
|
|
||||||
PostMessage(m_hMain, iMsg, wParam, -1);
|
|
||||||
else
|
|
||||||
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* To support the separate window rendering we get the message back here. So we basically
|
|
||||||
only let it pass through DolphinWX > Frame.cpp to determine if it should be on or off
|
|
||||||
and coordinate it with the other settings if nessesary */
|
|
||||||
case WM_USER:
|
|
||||||
/* I set wParam to 10 just in case there are other WM_USER events. If we want more
|
|
||||||
WM_USER cases we would start making wParam or lParam cases */
|
|
||||||
if (wParam == 10)
|
|
||||||
{
|
|
||||||
if (lParam)
|
|
||||||
SetCursor(hCursor);
|
|
||||||
else
|
|
||||||
SetCursor(hCursorBlank);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* Post thes mouse events to the main window, it's nessesary becase in difference to the
|
|
||||||
keyboard inputs these events only appear here, not in the main WndProc() */
|
|
||||||
case WM_LBUTTONDOWN:
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
case WM_LBUTTONDBLCLK:
|
|
||||||
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// This is called when we close the window when we render to a separate window
|
case WM_PAINT:
|
||||||
case WM_CLOSE:
|
hdc = BeginPaint( hWnd, &ps );
|
||||||
|
EndPaint( hWnd, &ps );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
switch( LOWORD( wParam ))
|
||||||
|
{
|
||||||
|
case VK_ESCAPE: // Pressing Esc Stop or Maximize
|
||||||
|
//DestroyWindow(hWnd);
|
||||||
|
//PostQuitMessage(0);
|
||||||
|
|
||||||
|
/* The fullscreen option for Windows users is not very user friendly. With this the user
|
||||||
|
can only get out of the fullscreen mode by pressing Esc or Alt + F4. Esc also stops
|
||||||
|
the emulation. Todo: But currently it hangs, so I have disabled the shutdown. */
|
||||||
|
//if (m_hParent == NULL) ExitProcess(0);
|
||||||
if (m_hParent == NULL)
|
if (m_hParent == NULL)
|
||||||
{
|
{
|
||||||
// Simple hack to easily exit without stopping. Hope to fix the stopping errors soon.
|
if (g_Config.bFullscreen)
|
||||||
ExitProcess(0);
|
{
|
||||||
|
//PostMessage(m_hMain, WM_USER, OPENGL_WM_USER_STOP, 0); // Stop
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Toggle maximize and restore
|
||||||
|
if (IsZoomed(hWnd))
|
||||||
|
ShowWindow(hWnd, SW_RESTORE);
|
||||||
|
else
|
||||||
|
ShowWindow(hWnd, SW_MAXIMIZE);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_DESTROY:
|
|
||||||
//Shutdown();
|
|
||||||
//PostQuitMessage( 0 ); // Call WM_QUIT
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Called when a screensaver wants to show up while this window is active
|
case 'E': // EFB hotkey
|
||||||
case WM_SYSCOMMAND:
|
if (g_Config.bEFBCopyDisableHotKey)
|
||||||
switch (wParam)
|
|
||||||
{
|
{
|
||||||
case SC_SCREENSAVE:
|
g_Config.bEFBCopyDisable = !g_Config.bEFBCopyDisable;
|
||||||
case SC_MONITORPOWER:
|
OSD::AddMessage(StringFromFormat("Copy EFB was turned %s",
|
||||||
return 0;
|
g_Config.bEFBCopyDisable ? "off" : "on").c_str(), 5000);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
g_VideoInitialize.pKeyPress(LOWORD(wParam), GetAsyncKeyState(VK_SHIFT) != 0, GetAsyncKeyState(VK_CONTROL) != 0);
|
||||||
|
break;
|
||||||
|
|
||||||
return DefWindowProc(hWnd, iMsg, wParam, lParam);
|
/* The reason we pick up the WM_MOUSEMOVE is to be able to change this option
|
||||||
|
during gameplay. The alternative is to load one of the cursors when the plugin
|
||||||
|
is loaded and go with that. This should only produce a minimal performance hit
|
||||||
|
because SetCursor is not supposed to actually change the cursor if it's the
|
||||||
|
same as the one before. */
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
/* Check rendering mode; child or parent. Then post the mouse moves to the main window
|
||||||
|
it's nessesary for both the chil dwindow and separate rendering window because
|
||||||
|
moves over the rendering window do not reach the main program then. */
|
||||||
|
if (GetParentWnd() == NULL) // Separate rendering window
|
||||||
|
PostMessage(m_hMain, iMsg, wParam, -1);
|
||||||
|
else
|
||||||
|
PostMessage(GetParentWnd(), iMsg, wParam, lParam);
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* To support the separate window rendering we get the message back here. So we basically
|
||||||
|
only let it pass through DolphinWX > Frame.cpp to determine if it should be on or off
|
||||||
|
and coordinate it with the other settings if nessesary */
|
||||||
|
case WM_USER:
|
||||||
|
/* I set wParam to 10 just in case there are other WM_USER events. If we want more
|
||||||
|
WM_USER cases we would start making wParam or lParam cases */
|
||||||
|
if (wParam == 10)
|
||||||
|
{
|
||||||
|
if (lParam)
|
||||||
|
SetCursor(hCursor);
|
||||||
|
else
|
||||||
|
SetCursor(hCursorBlank);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* Post thes mouse events to the main window, it's nessesary becase in difference to the
|
||||||
|
keyboard inputs these events only appear here, not in the main WndProc() */
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
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:
|
||||||
|
if (m_hParent == NULL)
|
||||||
|
{
|
||||||
|
// Simple hack to easily exit without stopping. Hope to fix the stopping errors soon.
|
||||||
|
ExitProcess(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
//Shutdown();
|
||||||
|
//PostQuitMessage( 0 ); // Call WM_QUIT
|
||||||
|
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:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return DefWindowProc(hWnd, iMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
// This is called from Create()
|
|
||||||
HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title)
|
|
||||||
{
|
|
||||||
wndClass.cbSize = sizeof( wndClass );
|
|
||||||
wndClass.style = CS_HREDRAW | CS_VREDRAW;
|
|
||||||
wndClass.lpfnWndProc = WndProc;
|
|
||||||
wndClass.cbClsExtra = 0;
|
|
||||||
wndClass.cbWndExtra = 0;
|
|
||||||
wndClass.hInstance = hInstance;
|
|
||||||
wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
|
|
||||||
// To interfer less with SetCursor() later we set this to NULL
|
|
||||||
//wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
|
|
||||||
wndClass.hCursor = NULL;
|
|
||||||
wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
|
|
||||||
wndClass.lpszMenuName = NULL;
|
|
||||||
wndClass.lpszClassName = m_szClassName;
|
|
||||||
wndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
|
|
||||||
|
|
||||||
m_hInstance = hInstance;
|
// This is called from Create()
|
||||||
RegisterClassEx( &wndClass );
|
HWND OpenWindow(HWND parent, HINSTANCE hInstance, int width, int height, const TCHAR *title)
|
||||||
|
{
|
||||||
|
wndClass.cbSize = sizeof( wndClass );
|
||||||
|
wndClass.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
|
wndClass.lpfnWndProc = WndProc;
|
||||||
|
wndClass.cbClsExtra = 0;
|
||||||
|
wndClass.cbWndExtra = 0;
|
||||||
|
wndClass.hInstance = hInstance;
|
||||||
|
wndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
|
||||||
|
// To interfer less with SetCursor() later we set this to NULL
|
||||||
|
//wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
|
||||||
|
wndClass.hCursor = NULL;
|
||||||
|
wndClass.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
|
||||||
|
wndClass.lpszMenuName = NULL;
|
||||||
|
wndClass.lpszClassName = m_szClassName;
|
||||||
|
wndClass.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
|
||||||
|
|
||||||
CreateCursors(m_hInstance);
|
m_hInstance = hInstance;
|
||||||
|
RegisterClassEx( &wndClass );
|
||||||
|
|
||||||
// Create child window
|
CreateCursors(m_hInstance);
|
||||||
if (parent)
|
|
||||||
{
|
|
||||||
m_hParent = m_hMain = parent;
|
|
||||||
|
|
||||||
m_hWnd = CreateWindow(m_szClassName, title,
|
// Create child window
|
||||||
WS_CHILD,
|
if (parent)
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,
|
{
|
||||||
parent, NULL, hInstance, NULL );
|
m_hParent = m_hMain = parent;
|
||||||
|
|
||||||
ShowWindow(m_hWnd, SW_SHOWMAXIMIZED);
|
m_hWnd = CreateWindow(m_szClassName, title,
|
||||||
}
|
WS_CHILD,
|
||||||
|
CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
|
parent, NULL, hInstance, NULL );
|
||||||
|
|
||||||
// Create new separate window
|
ShowWindow(m_hWnd, SW_SHOWMAXIMIZED);
|
||||||
else
|
}
|
||||||
{
|
|
||||||
DWORD style = g_Config.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW;
|
|
||||||
|
|
||||||
RECT rc = {0, 0, width, height};
|
// Create new separate window
|
||||||
AdjustWindowRect(&rc, style, false);
|
else
|
||||||
|
{
|
||||||
|
DWORD style = g_Config.bFullscreen ? WS_POPUP : WS_OVERLAPPEDWINDOW;
|
||||||
|
|
||||||
int w = rc.right - rc.left;
|
RECT rc = {0, 0, width, height};
|
||||||
int h = rc.bottom - rc.top;
|
AdjustWindowRect(&rc, style, false);
|
||||||
|
|
||||||
rc.left = (1280 - w)/2;
|
int w = rc.right - rc.left;
|
||||||
rc.right = rc.left + w;
|
int h = rc.bottom - rc.top;
|
||||||
rc.top = (1024 - h)/2;
|
|
||||||
rc.bottom = rc.top + h;
|
|
||||||
|
|
||||||
// I save this to m_hMain instead of m_hParent because it casused problems otherwise
|
rc.left = (1280 - w)/2;
|
||||||
m_hMain = (HWND)g_VideoInitialize.pWindowHandle;
|
rc.right = rc.left + w;
|
||||||
|
rc.top = (1024 - h)/2;
|
||||||
|
rc.bottom = rc.top + h;
|
||||||
|
|
||||||
m_hWnd = CreateWindow(m_szClassName, title,
|
// I save this to m_hMain instead of m_hParent because it casused problems otherwise
|
||||||
style,
|
m_hMain = (HWND)g_VideoInitialize.pWindowHandle;
|
||||||
rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
|
|
||||||
parent, NULL, hInstance, NULL );
|
|
||||||
|
|
||||||
g_winstyle = GetWindowLong( m_hWnd, GWL_STYLE );
|
m_hWnd = CreateWindow(m_szClassName, title,
|
||||||
g_winstyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style
|
style,
|
||||||
}
|
rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
|
||||||
|
parent, NULL, hInstance, NULL );
|
||||||
|
|
||||||
return m_hWnd;
|
g_winstyle = GetWindowLong( m_hWnd, GWL_STYLE );
|
||||||
}
|
g_winstyle &= ~WS_MAXIMIZE & ~WS_MINIMIZE; // remove minimize/maximize style
|
||||||
|
}
|
||||||
|
|
||||||
void Show()
|
return m_hWnd;
|
||||||
{
|
}
|
||||||
ShowWindow(m_hWnd, SW_SHOW);
|
|
||||||
BringWindowToTop(m_hWnd);
|
|
||||||
UpdateWindow(m_hWnd);
|
|
||||||
|
|
||||||
// gShowDebugger from main.cpp is forgotten between the Dolphin-Debugger is opened and a game is
|
void Show()
|
||||||
// started so we have to use an ini file setting here
|
{
|
||||||
/*
|
ShowWindow(m_hWnd, SW_SHOW);
|
||||||
bool bVideoWindow = false;
|
BringWindowToTop(m_hWnd);
|
||||||
IniFile ini;
|
UpdateWindow(m_hWnd);
|
||||||
ini.Load(DEBUGGER_CONFIG_FILE);
|
|
||||||
ini.Get("ShowOnStart", "VideoWindow", &bVideoWindow, false);
|
|
||||||
if(bVideoWindow) DoDllDebugger();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title)
|
// gShowDebugger from main.cpp is forgotten between the Dolphin-Debugger is opened and a game is
|
||||||
{
|
// started so we have to use an ini file setting here
|
||||||
return OpenWindow(hParent, hInstance, 640, 480, title);
|
/*
|
||||||
}
|
bool bVideoWindow = false;
|
||||||
|
IniFile ini;
|
||||||
|
ini.Load(DEBUGGER_CONFIG_FILE);
|
||||||
|
ini.Get("ShowOnStart", "VideoWindow", &bVideoWindow, false);
|
||||||
|
if(bVideoWindow) DoDllDebugger();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
void Close()
|
HWND Create(HWND hParent, HINSTANCE hInstance, const TCHAR *title)
|
||||||
{
|
{
|
||||||
DestroyWindow(m_hWnd);
|
return OpenWindow(hParent, hInstance, 640, 480, title);
|
||||||
UnregisterClass(m_szClassName, m_hInstance);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------
|
void Close()
|
||||||
// Set the size of the child or main window
|
{
|
||||||
// ------------------
|
DestroyWindow(m_hWnd);
|
||||||
void SetSize(int width, int height)
|
UnregisterClass(m_szClassName, m_hInstance);
|
||||||
{
|
}
|
||||||
RECT rc = {0, 0, width, height};
|
|
||||||
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false);
|
|
||||||
|
|
||||||
int w = rc.right - rc.left;
|
// ------------------------------------------
|
||||||
int h = rc.bottom - rc.top;
|
// Set the size of the child or main window
|
||||||
|
// ------------------
|
||||||
|
void SetSize(int width, int height)
|
||||||
|
{
|
||||||
|
RECT rc = {0, 0, width, height};
|
||||||
|
AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false);
|
||||||
|
|
||||||
// Move and resize the window
|
int w = rc.right - rc.left;
|
||||||
rc.left = (1280 - w)/2;
|
int h = rc.bottom - rc.top;
|
||||||
rc.right = rc.left + w;
|
|
||||||
rc.top = (1024 - h)/2;
|
// Move and resize the window
|
||||||
rc.bottom = rc.top + h;
|
rc.left = (1280 - w)/2;
|
||||||
::MoveWindow(m_hWnd, rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top, TRUE);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
} // EmuWindow
|
} // EmuWindow
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
|
80
Source/Plugins/Plugin_VideoOGL/Src/OnScreenDisplay.cpp
Normal file
80
Source/Plugins/Plugin_VideoOGL/Src/OnScreenDisplay.cpp
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Copyright (C) 2003-2008 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "GLUtil.h"
|
||||||
|
|
||||||
|
#include "OnScreenDisplay.h"
|
||||||
|
#include "Render.h"
|
||||||
|
|
||||||
|
namespace OSD
|
||||||
|
{
|
||||||
|
|
||||||
|
struct MESSAGE
|
||||||
|
{
|
||||||
|
MESSAGE() {}
|
||||||
|
MESSAGE(const char* p, u32 dw) { strcpy(str, p); dwTimeStamp = dw; }
|
||||||
|
char str[255];
|
||||||
|
u32 dwTimeStamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
static std::list<MESSAGE> s_listMsgs;
|
||||||
|
|
||||||
|
void AddMessage(const char* pstr, u32 ms)
|
||||||
|
{
|
||||||
|
s_listMsgs.push_back(MESSAGE(pstr, timeGetTime() + ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawMessages()
|
||||||
|
{
|
||||||
|
GLboolean wasEnabled = glIsEnabled(GL_BLEND);
|
||||||
|
if (!wasEnabled)
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
|
||||||
|
if (s_listMsgs.size() > 0) {
|
||||||
|
int left = 25, top = 15;
|
||||||
|
std::list<MESSAGE>::iterator it = s_listMsgs.begin();
|
||||||
|
while (it != s_listMsgs.end())
|
||||||
|
{
|
||||||
|
int time_left = (int)(it->dwTimeStamp - timeGetTime());
|
||||||
|
int alpha = 255;
|
||||||
|
|
||||||
|
if (time_left < 1024)
|
||||||
|
{
|
||||||
|
alpha = time_left >> 2;
|
||||||
|
if (time_left < 0) alpha = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
alpha <<= 24;
|
||||||
|
|
||||||
|
Renderer::RenderText(it->str, left+1, top+1, 0x000000|alpha);
|
||||||
|
Renderer::RenderText(it->str, left, top, 0xffff30|alpha);
|
||||||
|
top += 15;
|
||||||
|
|
||||||
|
if (time_left <= 0)
|
||||||
|
it = s_listMsgs.erase(it);
|
||||||
|
else
|
||||||
|
++it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wasEnabled) glDisable(GL_BLEND);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
30
Source/Plugins/Plugin_VideoOGL/Src/OnScreenDisplay.h
Normal file
30
Source/Plugins/Plugin_VideoOGL/Src/OnScreenDisplay.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// Copyright (C) 2003-2008 Dolphin Project.
|
||||||
|
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, version 2.0.
|
||||||
|
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License 2.0 for more details.
|
||||||
|
|
||||||
|
// A copy of the GPL 2.0 should have been included with the program.
|
||||||
|
// If not, see http://www.gnu.org/licenses/
|
||||||
|
|
||||||
|
// Official SVN repository and contact information can be found at
|
||||||
|
// http://code.google.com/p/dolphin-emu/
|
||||||
|
|
||||||
|
#ifndef _OSD_H
|
||||||
|
#define _OSD_H
|
||||||
|
|
||||||
|
namespace OSD
|
||||||
|
{
|
||||||
|
|
||||||
|
// On-screen message display
|
||||||
|
void AddMessage(const char* str, u32 ms);
|
||||||
|
void DrawMessages(); // draw the current messages on the screen. Only call once per frame.
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
#endif
|
@ -17,7 +17,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "Globals.h"
|
#include "Globals.h"
|
||||||
#include <list>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
@ -45,6 +44,7 @@
|
|||||||
#include "VertexLoaderManager.h"
|
#include "VertexLoaderManager.h"
|
||||||
#include "VertexLoader.h"
|
#include "VertexLoader.h"
|
||||||
#include "XFB.h"
|
#include "XFB.h"
|
||||||
|
#include "OnScreenDisplay.h"
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
|
|
||||||
#include "main.h" // Local
|
#include "main.h" // Local
|
||||||
@ -57,20 +57,12 @@
|
|||||||
#else
|
#else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct MESSAGE
|
|
||||||
{
|
|
||||||
MESSAGE() {}
|
|
||||||
MESSAGE(const char* p, u32 dw) { strcpy(str, p); dwTimeStamp = dw; }
|
|
||||||
char str[255];
|
|
||||||
u32 dwTimeStamp;
|
|
||||||
};
|
|
||||||
|
|
||||||
CGcontext g_cgcontext;
|
CGcontext g_cgcontext;
|
||||||
CGprofile g_cgvProf;
|
CGprofile g_cgvProf;
|
||||||
CGprofile g_cgfProf;
|
CGprofile g_cgfProf;
|
||||||
|
|
||||||
static RasterFont* s_pfont = NULL;
|
RasterFont* s_pfont = NULL;
|
||||||
static std::list<MESSAGE> s_listMsgs;
|
|
||||||
|
|
||||||
static bool s_bFullscreen = false;
|
static bool s_bFullscreen = false;
|
||||||
static bool s_bOutputCgErrors = true;
|
static bool s_bOutputCgErrors = true;
|
||||||
@ -416,58 +408,6 @@ bool Renderer::InitializeGL()
|
|||||||
return err == GL_NO_ERROR;
|
return err == GL_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::AddMessage(const char* pstr, u32 ms)
|
|
||||||
{
|
|
||||||
s_listMsgs.push_back(MESSAGE(pstr, timeGetTime() + ms));
|
|
||||||
}
|
|
||||||
|
|
||||||
void Renderer::ProcessMessages()
|
|
||||||
{
|
|
||||||
GLboolean wasEnabled = glIsEnabled(GL_BLEND);
|
|
||||||
|
|
||||||
if (!wasEnabled) glEnable(GL_BLEND);
|
|
||||||
|
|
||||||
if (s_listMsgs.size() > 0) {
|
|
||||||
int left = 25, top = 15;
|
|
||||||
std::list<MESSAGE>::iterator it = s_listMsgs.begin();
|
|
||||||
while (it != s_listMsgs.end())
|
|
||||||
{
|
|
||||||
int time_left = (int)(it->dwTimeStamp - timeGetTime());
|
|
||||||
int alpha = 255;
|
|
||||||
|
|
||||||
if (time_left < 1024)
|
|
||||||
{
|
|
||||||
alpha = time_left >> 2;
|
|
||||||
if (time_left < 0) alpha = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
alpha <<= 24;
|
|
||||||
|
|
||||||
RenderText(it->str, left+1, top+1, 0x000000|alpha);
|
|
||||||
RenderText(it->str, left, top, 0xffff30|alpha);
|
|
||||||
top += 15;
|
|
||||||
|
|
||||||
if (time_left <= 0)
|
|
||||||
it = s_listMsgs.erase(it);
|
|
||||||
else ++it;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!wasEnabled) glDisable(GL_BLEND);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Renderer::RenderText(const char* pstr, int left, int top, u32 color)
|
|
||||||
{
|
|
||||||
int nBackbufferWidth = (int)OpenGL_GetWidth();
|
|
||||||
int nBackbufferHeight = (int)OpenGL_GetHeight();
|
|
||||||
glColor4f(
|
|
||||||
((color>>16) & 0xff)/255.0f,
|
|
||||||
((color>> 8) & 0xff)/255.0f,
|
|
||||||
((color>> 0) & 0xff)/255.0f,
|
|
||||||
((color>>24) & 0xFF)/255.0f
|
|
||||||
);
|
|
||||||
s_pfont->printMultilineText(pstr, left * 2.0f / (float)nBackbufferWidth - 1, 1 - top * 2.0f / (float)nBackbufferHeight,0,nBackbufferWidth,nBackbufferHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Return the rendering window width and height
|
// Return the rendering window width and height
|
||||||
@ -989,7 +929,7 @@ void Renderer::SwapBuffers()
|
|||||||
Renderer::RenderText(debugtext_buffer, 21, 21, 0xDD000000);
|
Renderer::RenderText(debugtext_buffer, 21, 21, 0xDD000000);
|
||||||
Renderer::RenderText(debugtext_buffer, 20, 20, 0xFF00FFFF);
|
Renderer::RenderText(debugtext_buffer, 20, 20, 0xFF00FFFF);
|
||||||
|
|
||||||
Renderer::ProcessMessages();
|
OSD::DrawMessages();
|
||||||
|
|
||||||
#if defined(DVPROFILE)
|
#if defined(DVPROFILE)
|
||||||
if (g_bWriteProfile) {
|
if (g_bWriteProfile) {
|
||||||
@ -1035,6 +975,18 @@ void Renderer::SwapBuffers()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer::RenderText(const char* pstr, int left, int top, u32 color)
|
||||||
|
{
|
||||||
|
int nBackbufferWidth = (int)OpenGL_GetWidth();
|
||||||
|
int nBackbufferHeight = (int)OpenGL_GetHeight();
|
||||||
|
glColor4f(((color>>16) & 0xff)/255.0f, ((color>> 8) & 0xff)/255.0f,
|
||||||
|
((color>> 0) & 0xff)/255.0f, ((color>>24) & 0xFF)/255.0f);
|
||||||
|
s_pfont->printMultilineText(pstr,
|
||||||
|
left * 2.0f / (float)nBackbufferWidth - 1,
|
||||||
|
1 - top * 2.0f / (float)nBackbufferHeight,
|
||||||
|
0, nBackbufferWidth, nBackbufferHeight);
|
||||||
|
}
|
||||||
|
|
||||||
bool Renderer::SaveRenderTarget(const char* filename, int jpeg)
|
bool Renderer::SaveRenderTarget(const char* filename, int jpeg)
|
||||||
{
|
{
|
||||||
bool bflip = true;
|
bool bflip = true;
|
||||||
@ -1083,13 +1035,6 @@ void HandleGLError()
|
|||||||
if (!error)
|
if (!error)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// What is this for?
|
|
||||||
// int w, h;
|
|
||||||
// GLint fmt;
|
|
||||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_INTERNAL_FORMAT_EXT, &fmt);
|
|
||||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_WIDTH_EXT, (GLint *)&w);
|
|
||||||
// glGetRenderbufferParameterivEXT(GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_HEIGHT_EXT, (GLint *)&h);
|
|
||||||
|
|
||||||
switch(error)
|
switch(error)
|
||||||
{
|
{
|
||||||
case GL_FRAMEBUFFER_COMPLETE_EXT:
|
case GL_FRAMEBUFFER_COMPLETE_EXT:
|
||||||
@ -1133,8 +1078,6 @@ void HandleCgError(CGcontext ctx, CGerror err, void* appdata)
|
|||||||
if (listing != NULL) {
|
if (listing != NULL) {
|
||||||
ERROR_LOG(" last listing: %s\n", listing);
|
ERROR_LOG(" last listing: %s\n", listing);
|
||||||
}
|
}
|
||||||
// glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &loc);
|
|
||||||
// printf("pos: %d\n", loc);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1186,7 +1129,7 @@ void UpdateViewport()
|
|||||||
I don't allow this option together with UseXFB is that they are supplements and the XFB function
|
I don't allow this option together with UseXFB is that they are supplements and the XFB function
|
||||||
should be able to produce the same result */
|
should be able to produce the same result */
|
||||||
//if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
//if(g_Config.bStretchToFit && !g_Config.bUseXFB)
|
||||||
if(false)
|
if (false)
|
||||||
{
|
{
|
||||||
XOffset = (640 - GLScissorW);
|
XOffset = (640 - GLScissorW);
|
||||||
YOffset = (480 - GLScissorH);
|
YOffset = (480 - GLScissorH);
|
||||||
@ -1299,7 +1242,6 @@ void UpdateViewport()
|
|||||||
glDepthRange(GLNear, GLFar);
|
glDepthRange(GLNear, GLFar);
|
||||||
// -------------------------------------
|
// -------------------------------------
|
||||||
|
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
/*
|
/*
|
||||||
RECT RcTop, RcParent, RcChild;
|
RECT RcTop, RcParent, RcChild;
|
||||||
|
@ -96,12 +96,6 @@ public:
|
|||||||
// initialize opengl standard values (like viewport)
|
// initialize opengl standard values (like viewport)
|
||||||
static bool InitializeGL();
|
static bool InitializeGL();
|
||||||
|
|
||||||
static void AddMessage(const char* str, u32 ms);
|
|
||||||
static void ProcessMessages(); // draw the current messages on the screen
|
|
||||||
static void RenderText(const char* pstr, int left, int top, u32 color);
|
|
||||||
|
|
||||||
static int GetTargetWidth();
|
|
||||||
static int GetTargetHeight();
|
|
||||||
static void SetCgErrorOutput(bool bOutput);
|
static void SetCgErrorOutput(bool bOutput);
|
||||||
|
|
||||||
static void ResetGLState();
|
static void ResetGLState();
|
||||||
@ -109,9 +103,6 @@ public:
|
|||||||
static bool IsUsingATIDrawBuffers();
|
static bool IsUsingATIDrawBuffers();
|
||||||
static bool HaveStencilBuffer();
|
static bool HaveStencilBuffer();
|
||||||
|
|
||||||
static void SetZBufferRender(); // sets rendering of the zbuffer using MRTs
|
|
||||||
static GLuint GetZBufferTarget();
|
|
||||||
|
|
||||||
static void SetColorMask();
|
static void SetColorMask();
|
||||||
static void SetBlendMode(bool forceUpdate);
|
static void SetBlendMode(bool forceUpdate);
|
||||||
static bool SetScissorRect();
|
static bool SetScissorRect();
|
||||||
@ -119,19 +110,27 @@ public:
|
|||||||
static void SetRenderMode(RenderMode mode);
|
static void SetRenderMode(RenderMode mode);
|
||||||
static RenderMode GetRenderMode();
|
static RenderMode GetRenderMode();
|
||||||
|
|
||||||
|
// Render target management
|
||||||
|
static int GetTargetWidth();
|
||||||
|
static int GetTargetHeight();
|
||||||
|
|
||||||
|
static void SetFramebuffer(GLuint fb);
|
||||||
|
static void SetZBufferRender(); // sets rendering of the zbuffer using MRTs
|
||||||
static void SetRenderTarget(GLuint targ); // if targ is 0, sets to original render target
|
static void SetRenderTarget(GLuint targ); // if targ is 0, sets to original render target
|
||||||
static void SetDepthTarget(GLuint targ);
|
static void SetDepthTarget(GLuint targ);
|
||||||
|
|
||||||
static void SetFramebuffer(GLuint fb);
|
|
||||||
|
|
||||||
static GLuint GetRenderTarget();
|
static GLuint GetRenderTarget();
|
||||||
|
static GLuint GetZBufferTarget();
|
||||||
|
|
||||||
|
// Random utilities
|
||||||
|
static void RenderText(const char* pstr, int left, int top, u32 color);
|
||||||
|
static bool SaveRenderTarget(const char* filename, int jpeg);
|
||||||
|
|
||||||
// Finish up the current frame, print some stats
|
// Finish up the current frame, print some stats
|
||||||
static void Swap(const TRectangle& rc);
|
static void Swap(const TRectangle& rc);
|
||||||
|
|
||||||
static void SwapBuffers();
|
static void SwapBuffers();
|
||||||
|
|
||||||
static bool SaveRenderTarget(const char* filename, int jpeg);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -25,6 +25,7 @@ files = [
|
|||||||
'XFB.cpp',
|
'XFB.cpp',
|
||||||
'XFStructs.cpp',
|
'XFStructs.cpp',
|
||||||
'TextureConversionShader.cpp',
|
'TextureConversionShader.cpp',
|
||||||
|
'OnScreenDisplay.cpp',
|
||||||
]
|
]
|
||||||
compileFlags = [
|
compileFlags = [
|
||||||
'-fPIC',
|
'-fPIC',
|
||||||
|
@ -49,6 +49,7 @@
|
|||||||
#include "XFB.h"
|
#include "XFB.h"
|
||||||
#include "XFBConvert.h"
|
#include "XFBConvert.h"
|
||||||
#include "TextureConverter.h"
|
#include "TextureConverter.h"
|
||||||
|
#include "OnScreenDisplay.h"
|
||||||
|
|
||||||
#include "VideoState.h"
|
#include "VideoState.h"
|
||||||
///////////////////////////////////////////////
|
///////////////////////////////////////////////
|
||||||
@ -223,7 +224,7 @@ void Initialize(void *init)
|
|||||||
// Now the window handle is written
|
// Now the window handle is written
|
||||||
_pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle;
|
_pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle;
|
||||||
|
|
||||||
Renderer::AddMessage("Dolphin OpenGL Video Plugin" ,5000);
|
OSD::AddMessage("Dolphin OpenGL Video Plugin" ,5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoState(unsigned char **ptr, int mode) {
|
void DoState(unsigned char **ptr, int mode) {
|
||||||
@ -329,7 +330,7 @@ unsigned int Video_Screenshot(TCHAR* _szFilename)
|
|||||||
{
|
{
|
||||||
char msg[255];
|
char msg[255];
|
||||||
sprintf(msg, "saved %s\n", _szFilename);
|
sprintf(msg, "saved %s\n", _szFilename);
|
||||||
Renderer::AddMessage(msg, 500);
|
OSD::AddMessage(msg, 500);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -359,5 +360,5 @@ void Video_UpdateXFB(u8* _pXFB, u32 _dwWidth, u32 _dwHeight, s32 _dwYOffset, boo
|
|||||||
|
|
||||||
void Video_AddMessage(const char* pstr, u32 milliseconds)
|
void Video_AddMessage(const char* pstr, u32 milliseconds)
|
||||||
{
|
{
|
||||||
Renderer::AddMessage(pstr, milliseconds);
|
OSD::AddMessage(pstr, milliseconds);
|
||||||
}
|
}
|
||||||
|
@ -132,7 +132,7 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
|
|||||||
int argc = 0;
|
int argc = 0;
|
||||||
char **argv = NULL;
|
char **argv = NULL;
|
||||||
wxEntryStart(argc, argv);
|
wxEntryStart(argc, argv);
|
||||||
if ( !wxTheApp || !wxTheApp->CallOnInit() )
|
if (!wxTheApp || !wxTheApp->CallOnInit())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -211,7 +211,7 @@ extern "C" void Initialize(void *init)
|
|||||||
|
|
||||||
// Update the GUI if the configuration window is already open
|
// Update the GUI if the configuration window is already open
|
||||||
#if defined(HAVE_WX) && HAVE_WX
|
#if defined(HAVE_WX) && HAVE_WX
|
||||||
if(g_FrameOpen)
|
if (g_FrameOpen)
|
||||||
{
|
{
|
||||||
// Save the settings
|
// Save the settings
|
||||||
g_Config.Save();
|
g_Config.Save();
|
||||||
@ -256,7 +256,7 @@ extern "C" void Shutdown(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if HAVE_WIIUSE
|
#if HAVE_WIIUSE
|
||||||
if(g_RealWiiMoteInitialized) WiiMoteReal::Shutdown();
|
if (g_RealWiiMoteInitialized) WiiMoteReal::Shutdown();
|
||||||
#endif
|
#endif
|
||||||
WiiMoteEmu::Shutdown();
|
WiiMoteEmu::Shutdown();
|
||||||
|
|
||||||
@ -1058,6 +1058,3 @@ void __Logv(int log, int v, const char *_fmt, ...)
|
|||||||
|
|
||||||
g_WiimoteInitialize.pLog(Msg, v);
|
g_WiimoteInitialize.pLog(Msg, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user