diff --git a/SConstruct b/SConstruct index c9eb8353d2..d77cb990f2 100644 --- a/SConstruct +++ b/SConstruct @@ -81,7 +81,6 @@ dirs = [ 'Source/Plugins/Plugin_DSP_HLE/Src', 'Source/Plugins/Plugin_DSP_LLE/Src', 'Source/Plugins/Plugin_PadSimple/Src', - 'Source/Plugins/Plugin_PadSimpleEvnt/Src', 'Source/Plugins/Plugin_nJoy_SDL/Src', 'Source/Plugins/Plugin_Wiimote/Src', 'Source/Core/DolphinWX/Src', @@ -109,7 +108,6 @@ vars.AddVariables( BoolVariable('nowx', 'Set For Building with no WX libs (WIP)', False), BoolVariable('wxgl', 'Set For Building with WX GL libs (WIP)', False), BoolVariable('sdlgl', 'Set For Building with SDL GL libs (WIP)', False), - BoolVariable('gltest', 'temp don\'t use (WIP)', False), BoolVariable('jittest', 'temp don\'t use (WIP)', False), BoolVariable('nojit', 'Remove entire jit cores', False), EnumVariable('flavor', 'Choose a build flavor', 'release', @@ -304,12 +302,6 @@ if env['sdlgl']: env['HAVE_COCOA'] = 0 env['USE_WX'] = 0 -env['GLTEST'] = 0 -if env['gltest']: - env['GLTEST'] = 1 - -conf.Define('GLTEST', env['GLTEST']) - env['JITTEST'] = 0 if env['jittest']: env['JITTEST'] = 1 diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj b/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj deleted file mode 100644 index 07eea1edc5..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Plugin_PadSimpleEvnt.vcproj +++ /dev/null @@ -1,658 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.cpp deleted file mode 100644 index aff69c433f..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.cpp +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (C) 2003 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 "ConfigDlg.h" -#include "../PadSimple.h" -#include "EventHandler.h" - -BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) - EVT_CLOSE(ConfigDialog::OnClose) - EVT_BUTTON(ID_CLOSE,ConfigDialog::OnCloseClick) - EVT_BUTTON(ID_PAD_ABOUT,ConfigDialog::DllAbout) - EVT_CHECKBOX(ID_ATTACHED,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_X360PAD,ConfigDialog::ControllerSettingsChanged) - EVT_CHOICE(ID_X360PAD_CHOICE,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_RUMBLE,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_DISABLE,ConfigDialog::ControllerSettingsChanged) - EVT_BUTTON(CTL_A,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_B,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_X,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_Y,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_Z,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_START,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_L,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_R,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_HALFPRESS,ConfigDialog::OnButtonClick) -END_EVENT_TABLE() - -ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) -: wxDialog(parent, id, title, position, size, style) -{ - clickedButton = NULL; - CreateGUIControls(); - Fit(); -} - -ConfigDialog::~ConfigDialog() -{ -} - -inline void AddControl(wxPanel *pan, wxButton **button, wxStaticBoxSizer *sizer, - const char *name, int ctl, int controller) { - wxBoxSizer *hButton = new wxBoxSizer(wxHORIZONTAL); - char keyStr[10] = {0}; - - hButton->Add(new wxStaticText(pan, 0, wxString::FromAscii(name), - wxDefaultPosition, wxDefaultSize), 0, - wxALIGN_CENTER_VERTICAL|wxALL); - ((EventHandler *)globals->eventHandler)->SFKeyToString - (pad[controller].keyForControl[ctl], keyStr); - - *button = new wxButton(pan, ctl, wxString::FromAscii(keyStr), - wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS); - - hButton->Add(*button, 0, wxALIGN_RIGHT|wxALL); - - sizer->Add(hButton, 0, wxALIGN_RIGHT|wxALL); -} - -void ConfigDialog::CreateGUIControls() { - // Notebook - m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); - - // Controller pages - m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[0], wxT("Controller 1")); - m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[1], wxT("Controller 2")); - m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[2], wxT("Controller 3")); - m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[3], wxT("Controller 4")); - - // Standard buttons - m_Close = new wxButton(this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_About = new wxButton(this, ID_PAD_ABOUT, wxT("About"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - - // Put notebook and standard buttons in sizers - wxBoxSizer* sSButtons; - sSButtons = new wxBoxSizer(wxHORIZONTAL); - sSButtons->Add(m_About,0,wxALL, 5); - sSButtons->Add(0, 0, 1, wxEXPAND, 5); - sSButtons->Add(m_Close, 0, wxALL, 5); - - wxBoxSizer* sMain; - sMain = new wxBoxSizer(wxVERTICAL); - sMain->Add(m_Notebook, 1, wxEXPAND|wxALL, 5); - sMain->Add(sSButtons, 0, wxEXPAND, 5); - - this->SetSizer(sMain); - this->Layout(); - - for(int i = 0; i < 4; i++) { - sbDevice[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Controller Settings")); - sDevice[i] = new wxBoxSizer(wxHORIZONTAL); - m_Attached[i] = new wxCheckBox(m_Controller[i], ID_ATTACHED, wxT("Controller attached"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Disable[i] = new wxCheckBox(m_Controller[i], ID_DISABLE, wxT("Disable when Dolphin is not in focus"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Attached[i]->SetValue(pad[i].bAttached); - m_Disable[i]->SetValue(pad[i].bDisable); - - sDevice[i]->Add(m_Attached[i], 0, wxEXPAND|wxALL, 1); - sDevice[i]->AddStretchSpacer(); - sDevice[i]->Add(m_Disable[i], 0, wxEXPAND|wxALL, 1); - sbDevice[i]->Add(sDevice[i], 0, wxEXPAND|wxALL, 1); - - sButtons[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Buttons")); - - AddControl(m_Controller[i], &(m_ButtonA[i]), sButtons[i], "A: ", CTL_A, i); - AddControl(m_Controller[i], &(m_ButtonB[i]), sButtons[i], "B: ", CTL_B, i); - AddControl(m_Controller[i], &(m_ButtonX[i]), sButtons[i], "X: ", CTL_X, i); - AddControl(m_Controller[i], &(m_ButtonY[i]), sButtons[i], "Y: ", CTL_Y, i); - AddControl(m_Controller[i], &(m_ButtonZ[i]), sButtons[i], "Z: ", CTL_Z, i); - AddControl(m_Controller[i], &(m_ButtonStart[i]), sButtons[i], "Start: ", CTL_START, i); - - sTriggers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Triggers")); - - AddControl(m_Controller[i], &(m_ButtonL[i]), sTriggers[i], " L: ", CTL_L, i); - AddControl(m_Controller[i], &(m_ButtonR[i]), sTriggers[i], " R: ", CTL_R, i); - - sModifiers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Modifiers")); - - AddControl(m_Controller[i], &(m_HalfPress[i]), sModifiers[i], "1/2 Press: ", CTL_HALFPRESS, i); - - sStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Main Stick")); - - AddControl(m_Controller[i], &(m_StickUp[i]), sStick[i], "Up: ", CTL_MAINUP, i); - AddControl(m_Controller[i], &(m_StickDown[i]), sStick[i], "Down: ", CTL_MAINDOWN, i); - AddControl(m_Controller[i], &(m_StickLeft[i]), sStick[i], "Left: ", CTL_MAINLEFT, i); - AddControl(m_Controller[i], &(m_StickRight[i]), sStick[i], "Right: ", CTL_MAINRIGHT, i); - - sDPad[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("D-Pad")); - - AddControl(m_Controller[i], &(m_DPadUp[i]), sDPad[i], "Up: ", CTL_DPADUP, i); - AddControl(m_Controller[i], &(m_DPadDown[i]), sDPad[i], "Down: ", CTL_DPADDOWN, i); - AddControl(m_Controller[i], &(m_DPadLeft[i]), sDPad[i], "Left: ", CTL_DPADLEFT, i); - AddControl(m_Controller[i], &(m_DPadRight[i]), sDPad[i], "Right: ", CTL_DPADRIGHT, i); - - sCStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("C-Stick")); - - AddControl(m_Controller[i], &(m_CStickUp[i]), sCStick[i], "Up: ", CTL_SUBUP, i); - AddControl(m_Controller[i], &(m_CStickDown[i]), sCStick[i], "Down: ", CTL_SUBDOWN, i); - AddControl(m_Controller[i], &(m_CStickLeft[i]), sCStick[i], "Left: ", CTL_SUBLEFT, i); - AddControl(m_Controller[i], &(m_CStickRight[i]), sCStick[i], "Right: ", CTL_SUBRIGHT, i); - - sPage[i] = new wxGridBagSizer(0, 0); - sPage[i]->SetFlexibleDirection(wxBOTH); - sPage[i]->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); - sPage[i]->Add(sbDevice[i], wxGBPosition(0, 0), wxGBSpan(1, 5), wxEXPAND|wxALL, 1); - sPage[i]->Add(sButtons[i], wxGBPosition(1, 0), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sTriggers[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 1); - sPage[i]->Add(sModifiers[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL, 1); - sPage[i]->Add(sStick[i], wxGBPosition(1, 2), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sDPad[i], wxGBPosition(1, 3), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sCStick[i], wxGBPosition(1, 4), wxGBSpan(2, 1), wxALL, 1); - m_Controller[i]->SetSizer(sPage[i]); - sPage[i]->Layout(); - } -} - -void ConfigDialog::OnClose(wxCloseEvent& event) { - EndModal(0); -} - -void ConfigDialog::OnKeyDown(wxKeyEvent& event) { - if(clickedButton != NULL) { - int page = m_Notebook->GetSelection(); - EventHandler *eventHandler = (EventHandler *)globals->eventHandler; - fprintf(stderr, "Got key code %d\n",event.GetKeyCode()); - sf::Key::Code sfcode = eventHandler->wxCharCodeToSF(event.GetKeyCode()); - char sfstr[100]; - eventHandler->SFKeyToString(sfcode, sfstr); - - if (registerKey(page, clickedButton->GetId(), sfcode)) - clickedButton->SetLabel(wxString::FromAscii(sfstr)); - clickedButton->Disconnect(); - } - - clickedButton = NULL; - event.Skip(); -} - -void ConfigDialog::OnCloseClick(wxCommandEvent& event) -{ - Close(); -} - -void ConfigDialog::ControllerSettingsChanged(wxCommandEvent& event) -{ - int page = m_Notebook->GetSelection(); - - switch (event.GetId()) { - case ID_ATTACHED: - pad[page].bAttached = m_Attached[page]->GetValue(); - break; - case ID_DISABLE: - pad[page].bDisable = m_Disable[page]->GetValue(); - break; - } -} - -void ConfigDialog::OnButtonClick(wxCommandEvent& event) -{ - if(clickedButton) { - clickedButton->SetLabel(oldLabel); - } - clickedButton = (wxButton *)event.GetEventObject(); - oldLabel = clickedButton->GetLabel(); - clickedButton->SetLabel(_("Press Key")); - - clickedButton->Connect(wxID_ANY, wxEVT_KEY_DOWN, - wxKeyEventHandler(ConfigDialog::OnKeyDown), - (wxObject*)NULL, this); -} -void ConfigDialog::DllAbout(wxCommandEvent& event) -{ - wxString message; - message = _("A simple keyboard plugin for dolphin."); - - wxMessageBox(_T("Dolphin PadSimple Event Plugin\nBy ector and F|RES\n\n" + message), - _T("Dolphin PadSimple Event"), wxOK, this); -} diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.h b/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.h deleted file mode 100644 index f274480f4e..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/GUI/ConfigDlg.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) 2003 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 __CONFIGDLG_H__ -#define __CONFIGDLG_H__ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class ConfigDialog : public wxDialog -{ - - - public: - ConfigDialog(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Pad Configuration"), - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE); - - virtual ~ConfigDialog(); - - private: - DECLARE_EVENT_TABLE(); - wxNotebook *m_Notebook; - wxPanel *m_Controller[4]; - wxButton *m_About; - wxButton *m_Close; - - wxStaticBoxSizer *sbDevice[4]; - wxBoxSizer *sDevice[4]; - wxGridBagSizer *sPage[4]; - wxStaticBoxSizer *sButtons[4]; - wxStaticBoxSizer *sTriggers[4]; - wxStaticBoxSizer *sModifiers[4]; - wxStaticBoxSizer *sStick[4]; - wxStaticBoxSizer *sCStick[4]; - wxStaticBoxSizer *sDPad[4]; - - wxArrayString arrayStringFor_X360Pad; - wxCheckBox *m_X360Pad[4]; - wxChoice *m_X360PadC[4]; - wxCheckBox *m_Attached[4]; - wxCheckBox *m_Disable[4]; - wxCheckBox *m_Rumble[4]; - - wxButton *m_ButtonA[4]; - wxButton *m_ButtonB[4]; - wxButton *m_ButtonX[4]; - wxButton *m_ButtonY[4]; - wxButton *m_ButtonZ[4]; - wxButton *m_ButtonStart[4]; - wxButton *m_ButtonL[4]; - wxButton *m_ButtonR[4]; - wxButton *m_HalfPress[4]; - wxButton *m_StickUp[4]; - wxButton *m_StickDown[4]; - wxButton *m_StickLeft[4]; - wxButton *m_StickRight[4]; - wxButton *m_CStickUp[4]; - wxButton *m_CStickDown[4]; - wxButton *m_CStickLeft[4]; - wxButton *m_CStickRight[4]; - wxButton *m_DPadUp[4]; - wxButton *m_DPadDown[4]; - wxButton *m_DPadLeft[4]; - wxButton *m_DPadRight[4]; - - enum - { - ////GUI Enum Control ID Start - ID_CLOSE = 1000, - ID_NOTEBOOK, - ID_CONTROLLERPAGE1, - ID_CONTROLLERPAGE2, - ID_CONTROLLERPAGE3, - ID_CONTROLLERPAGE4, - - ID_X360PAD_CHOICE, - ID_X360PAD, - ID_ATTACHED, - ID_DISABLE, - ID_RUMBLE, - ID_PAD_ABOUT - }; - - void OnClose(wxCloseEvent& event); - void CreateGUIControls(); - void OnCloseClick(wxCommandEvent& event); - void OnKeyDown(wxKeyEvent& event); - void ControllerSettingsChanged(wxCommandEvent& event); - void OnButtonClick(wxCommandEvent& event); - void DllAbout(wxCommandEvent& event); - - int keyPress; - wxButton *clickedButton; - wxString oldLabel; -}; - -#endif diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp b/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp deleted file mode 100644 index 3a35f69dba..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// Copyright (C) 2003 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 -#include - -#include "Common.h" - -#include "pluginspecs_pad.h" -#include "PadSimple.h" -#include "IniFile.h" - -#if defined(HAVE_WX) && HAVE_WX -#include "GUI/ConfigDlg.h" -#endif - -// Control names -static const char* controlNames[] = -{ - "A_button", - "B_button", - "X_button", - "Y_button", - "Z_trigger", - "Start", - "L_button", - "R_button", - "Main_stick_up", - "Main_stick_down", - "Main_stick_left", - "Main_stick_right", - "Sub_stick_up", - "Sub_stick_down", - "Sub_stick_left", - "Sub_stick_right", - "D-Pad_up", - "D-Pad_down", - "D-Pad_left", - "D-Pad_right", - "half_press_toggle", - "Mic-button", -}; - -PLUGIN_GLOBALS* globals = NULL; - -SPads pad[4]; -bool KeyStatus[NUMCONTROLS]; - -HINSTANCE g_hInstance; -SPADInitialize g_PADInitialize; - -#define RECORD_SIZE (1024 * 128) -SPADStatus recordBuffer[RECORD_SIZE]; -int count = 0; - -void RecordInput(const SPADStatus& _rPADStatus) -{ - if (count >= RECORD_SIZE) - { - return; - } - - recordBuffer[count++] = _rPADStatus; -} - - -const SPADStatus& PlayRecord() -{ - if (count >= RECORD_SIZE){return(recordBuffer[0]);} - - return(recordBuffer[count++]); -} - -bool registerKey(int nPad, int id, sf::Key::Code code, int mods) { - - Keys key, oldKey; - EventHandler *eventHandler = (EventHandler *)globals->eventHandler; - - key.inputType = KeyboardInput; - key.keyCode = code; - key.mods = mods; - - if (!eventHandler) { - PanicAlert("Can't get event handler"); - return false; - } - - - // We need to handle mod change - // and double registers - if (pad[nPad].keyForControl[id] != 0) { - - oldKey.inputType = KeyboardInput; - oldKey.keyCode = pad[nPad].keyForControl[id]; - oldKey.mods = mods; - - - // Might be not be registered yet - eventHandler->RemoveEventListener(oldKey); - } - - if (!eventHandler->RegisterEventListener(ParseKeyEvent, key)) { - char codestr[100]; - eventHandler->SFKeyToString(code, codestr); - PanicAlert("Failed to register %s, might be already in use", codestr); - return false; - } - - - pad[nPad].keyForControl[id] = code; - - return true; -} - -void LoadRecord() -{ - FILE* pStream = fopen("c:\\pad-record.bin", "rb"); - - if (pStream != NULL) - { - fread(recordBuffer, 1, RECORD_SIZE * sizeof(SPADStatus), pStream); - fclose(pStream); - } -} - - -void SaveRecord() -{ - FILE* pStream = fopen("c:\\pad-record.bin", "wb"); - - if (pStream != NULL) - { - fwrite(recordBuffer, 1, RECORD_SIZE * sizeof(SPADStatus), pStream); - fclose(pStream); - } -} - - -#ifdef _WIN32 - -class wxDLLApp : public wxApp -{ - bool OnInit() - { - return true; - } -}; -IMPLEMENT_APP_NO_MAIN(wxDLLApp) - -WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); - -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle - DWORD dwReason, // reason called - LPVOID lpvReserved) // reserved -{ - switch (dwReason) - { - case DLL_PROCESS_ATTACH: - { //use wxInitialize() if you don't want GUI instead of the following 12 lines - wxSetInstance((HINSTANCE)hinstDLL); - int argc = 0; - char **argv = NULL; - wxEntryStart(argc, argv); - if ( !wxTheApp || !wxTheApp->CallOnInit() ) - return FALSE; - } - break; - - case DLL_PROCESS_DETACH: - wxEntryCleanup(); //use wxUninitialize() if you don't want GUI - break; - default: - break; - } - - g_hInstance = hinstDLL; - return(TRUE); -} - -#endif - - -void GetDllInfo(PLUGIN_INFO* _PluginInfo) -{ - _PluginInfo->Version = 0x0100; - _PluginInfo->Type = PLUGIN_TYPE_PAD; - -#ifdef DEBUGFAST - sprintf(_PluginInfo->Name, "Dolphin event pad (DebugFast)"); -#elif defined _DEBUG - sprintf(_PluginInfo->Name, "Dolphin event pad (Debug)"); -#else - sprintf(_PluginInfo->Name, "Dolphin event pad"); -#endif - -} - -void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals) { - globals = _pPluginGlobals; -// LogManager::SetInstance((LogManager *)globals->logManager); - -} - -void DllConfig(HWND _hParent) -{ - LoadConfig(); - ConfigDialog frame(NULL); - frame.ShowModal(); - SaveConfig(); -} - -void DllDebugger(HWND _hParent, bool Show) { -} - -void DoState(unsigned char **ptr, int mode) { -} - -void Initialize(void *init) -{ -#ifdef RECORD_REPLAY - LoadRecord(); -#endif - g_PADInitialize = *(SPADInitialize*)init; - LoadConfig(); -} - - -void Shutdown() -{ -#ifdef RECORD_STORE - SaveRecord(); -#endif - SaveConfig(); -} - -bool ParseKeyEvent(sf::Event ev) { - fprintf(stderr, "parsing type %d code %d\n", ev.Type, ev.Key.Code); - - // FIXME: should we support more than one control? - for (int i = 0; i < NUMCONTROLS; i++) { - if (ev.Key.Code == pad[0].keyForControl[i]) { - KeyStatus[i] = (ev.Type == sf::Event::KeyPressed); - break; - } - } - - return true; - -} - -void PAD_Input(u16 _Key, u8 _UpDown) { -} - -void PAD_GetStatus(u8 _numPAD, SPADStatus* _pPADStatus) -{ - // Check if all is okay - if ((_pPADStatus == NULL)) { - return; - } - -#ifdef RECORD_REPLAY - *_pPADStatus = PlayRecord(); - return; -#endif - - const int base = 0x80; - // Clear pad - memset(_pPADStatus, 0, sizeof(SPADStatus)); - - _pPADStatus->stickY = base; - _pPADStatus->stickX = base; - _pPADStatus->substickX = base; - _pPADStatus->substickY = base; - _pPADStatus->button |= PAD_USE_ORIGIN; - - _pPADStatus->err = PAD_ERR_NONE; - - int stickvalue = (KeyStatus[CTL_HALFPRESS]) ? 40 : 100; - int triggervalue = (KeyStatus[CTL_HALFPRESS]) ? 100 : 255; - int sensevalue = (KeyStatus[CTL_HALFPRESS]) ? 100 : 255; - - if (KeyStatus[CTL_MAINLEFT]){_pPADStatus->stickX -= stickvalue;} - if (KeyStatus[CTL_MAINUP]){_pPADStatus->stickY += stickvalue;} - if (KeyStatus[CTL_MAINRIGHT]){_pPADStatus->stickX += stickvalue;} - if (KeyStatus[CTL_MAINDOWN]){_pPADStatus->stickY -= stickvalue;} - - if (KeyStatus[CTL_SUBLEFT]){_pPADStatus->substickX -= stickvalue;} - if (KeyStatus[CTL_SUBUP]){_pPADStatus->substickY += stickvalue;} - if (KeyStatus[CTL_SUBRIGHT]){_pPADStatus->substickX += stickvalue;} - if (KeyStatus[CTL_SUBDOWN]){_pPADStatus->substickY -= stickvalue;} - - if (KeyStatus[CTL_DPADLEFT]){_pPADStatus->button |= PAD_BUTTON_LEFT;} - if (KeyStatus[CTL_DPADUP]){_pPADStatus->button |= PAD_BUTTON_UP;} - if (KeyStatus[CTL_DPADRIGHT]){_pPADStatus->button |= PAD_BUTTON_RIGHT;} - if (KeyStatus[CTL_DPADDOWN]){_pPADStatus->button |= PAD_BUTTON_DOWN;} - - if (KeyStatus[CTL_A]) { - _pPADStatus->button |= PAD_BUTTON_A; - _pPADStatus->analogA = sensevalue; - } - - if (KeyStatus[CTL_B]) { - _pPADStatus->button |= PAD_BUTTON_B; - _pPADStatus->analogB = sensevalue; - } - - if (KeyStatus[CTL_X]){_pPADStatus->button |= PAD_BUTTON_X;} - if (KeyStatus[CTL_Y]){_pPADStatus->button |= PAD_BUTTON_Y;} - if (KeyStatus[CTL_Z]){_pPADStatus->button |= PAD_TRIGGER_Z;} - - if (KeyStatus[CTL_L]) { - _pPADStatus->button |= PAD_TRIGGER_L; - _pPADStatus->triggerLeft = triggervalue; - } - - if (KeyStatus[CTL_R]) { - _pPADStatus->button |= PAD_TRIGGER_R; - _pPADStatus->triggerRight = triggervalue; - } - - if (KeyStatus[CTL_START]){_pPADStatus->button |= PAD_BUTTON_START;} - if (KeyStatus[CTL_MIC]) - _pPADStatus->MicButton = true; - else - _pPADStatus->MicButton = false; -#ifdef RECORD_STORE - RecordInput(*_pPADStatus); -#endif -} - -void PAD_Rumble(u8 _numPAD, unsigned int _uType, unsigned int _uStrength) { -} - -unsigned int PAD_GetAttachedPads() -{ - unsigned int connected = 0; - - LoadConfig(); - - if(pad[0].bAttached) - connected |= 1; - if(pad[1].bAttached) - connected |= 2; - if(pad[2].bAttached) - connected |= 4; - if(pad[3].bAttached) - connected |= 8; - - return connected; -} - - -void LoadConfig() -{ - const int defaultKeyForControl[NUMCONTROLS] = { - sf::Key::X, //A - sf::Key::Z, - sf::Key::S, - sf::Key::C, - sf::Key::D, - sf::Key::Return, - sf::Key::Q, - sf::Key::W, - sf::Key::Up, //mainstick - sf::Key::Down, - sf::Key::Left, - sf::Key::Right, - sf::Key::I, //substick - sf::Key::K, - sf::Key::J, - sf::Key::L, - sf::Key::T, //dpad - sf::Key::G, - sf::Key::F, - sf::Key::H, - sf::Key::LShift, //halfpress - sf::Key::P // mic - }; - - IniFile file; - file.Load(FULL_CONFIG_DIR EPAD_CONFIG_FILE); - - for(int i = 0; i < 1; i++) { - char SectionName[32]; - sprintf(SectionName, "PAD%i", i+1); - - file.Get(SectionName, "Attached", &pad[i].bAttached, i==0); - file.Get(SectionName, "DisableOnBackground", &pad[i].bDisable, false); - for (int x = 0; x < NUMCONTROLS; x++) { - int key; - file.Get(SectionName, controlNames[x], - &key, (i==0)?defaultKeyForControl[x]:0); - - if (i == g_PADInitialize.padNumber && pad[i].bAttached) - registerKey(i, x, (sf::Key::Code)key); - } - } -} - - -void SaveConfig() -{ - IniFile file; - file.Load(FULL_CONFIG_DIR EPAD_CONFIG_FILE); - - for(int i = 0; i < 4; i++) { - char SectionName[32]; - sprintf(SectionName, "PAD%i", i+1); - - file.Set(SectionName, "Attached", pad[i].bAttached); - file.Set(SectionName, "DisableOnBackground", pad[i].bDisable); - - for (int x = 0; x < NUMCONTROLS; x++) { - file.Set(SectionName, controlNames[x], pad[i].keyForControl[x]); - } - } - file.Save(FULL_CONFIG_DIR EPAD_CONFIG_FILE); -} - - diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.h b/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.h deleted file mode 100644 index 837a3e4d98..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/PadSimple.h +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (C) 2003 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 __PADSIMPLE_H__ -#define __PADSIMPLE_H__ - -#include "InputCommon.h" -#include "pluginspecs_pad.h" - -#define EPAD_CONFIG_FILE "epad.ini" -// Controls -enum -{ - CTL_A = 0, - CTL_B, - CTL_X, - CTL_Y, - CTL_Z, - CTL_START, - CTL_L, - CTL_R, - CTL_MAINUP, - CTL_MAINDOWN, - CTL_MAINLEFT, - CTL_MAINRIGHT, - CTL_SUBUP, - CTL_SUBDOWN, - CTL_SUBLEFT, - CTL_SUBRIGHT, - CTL_DPADUP, - CTL_DPADDOWN, - CTL_DPADLEFT, - CTL_DPADRIGHT, - CTL_HALFPRESS, - CTL_MIC, - NUMCONTROLS -}; - - -struct SPads { - bool bAttached; // Pad is "attached" to the gamecube/wii - bool bDisable; // Disabled when dolphin isn't in focus - sf::Key::Code keyForControl[NUMCONTROLS];// Keyboard mapping -}; - -extern SPads pad[]; -extern PLUGIN_GLOBALS* globals; - -void LoadConfig(); -void SaveConfig(); -bool registerKey(int nPad, int id, sf::Key::Code code, int mods = 0); -bool ParseKeyEvent(sf::Event ev); - -#endif diff --git a/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript b/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript deleted file mode 100644 index 43e294a24e..0000000000 --- a/Source/Plugins/Plugin_PadSimpleEvnt/Src/SConscript +++ /dev/null @@ -1,24 +0,0 @@ -# -*- python -*- - -Import('env') -import sys - -name = "Plugin_PadSimpleEvnt" - -if not env['GLTEST']: - print name + " Doesn't work without testgl" - Return() - -files = [ - "PadSimple.cpp", - ] -padeenv = env.Clone() - -if padeenv['HAVE_WX']: - files += [ - "GUI/ConfigDlg.cpp", - ] - -padeenv.Append(LIBS = [ 'inputcommon', 'common' ]) - -padeenv.SharedLibrary(env['plugin_dir']+name, files) diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp index b152d3c1c3..f13d964c8e 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.cpp @@ -124,18 +124,13 @@ void UpdateFPSDisplay(const char *text) sprintf(temp, "SVN R%s: GL: %s", SVN_REV_STR, text); OpenGL_SetWindowText(temp); } -// ========================= -// ======================================================================================= // Create rendering window. // Call browser: Core.cpp:EmuThread() > main.cpp:Video_Initialize() -// ------------------ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight) { - // -------------------------------------------- // Check for fullscreen mode - // --------------- int _twidth, _theight; if (g_Config.bFullscreen) { @@ -165,21 +160,14 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight #if defined(_WIN32) EmuWindow::SetSize(_twidth, _theight); #endif - // ---------------------------- - // --------------------------------------------------------------------------------------- // Control window size and picture scaling - // ------------------ s_backbuffer_width = _twidth; s_backbuffer_height = _theight; g_VideoInitialize.pPeekMessages = &Callback_PeekMessages; g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay; - //char buff[100]; - //sprintf(buff, "%i %i %d %d %d", s_backbuffer_width, s_backbuffer_height, Max, MValueX, MValueY); - //MessageBox(0, buff, "", 0); - #if USE_SDL //init sdl video if (SDL_Init(SDL_INIT_VIDEO) < 0) { @@ -223,15 +211,11 @@ bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _iwidth, int _iheight GLWin.glCanvas->SetCurrent(); #else GLWin.glCanvas->SetCurrent(*GLWin.glCtxt); - // GLWin.glCtxt->SetCurrent(*GLWin.glCanvas); #endif #elif defined(_WIN32) - // --------------------------------------------------------------------------------------- // Create rendering window in Windows - // ---------------------- - // Create a separate window if (!g_Config.RenderToMainframe || g_VideoInitialize.pWindowHandle == NULL) g_VideoInitialize.pWindowHandle = (void*)EmuWindow::Create(NULL, g_hInstance, _T("Please wait...")); @@ -783,3 +767,4 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line) } return true; } + diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h index 5475662bfd..54e569fb81 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GLUtil.h @@ -18,9 +18,6 @@ #ifndef _GLINIT_H_ #define _GLINIT_H_ -#if defined GLTEST && GLTEST -#include "nGLUtil.h" -#else #include "Config.h" #include "MathUtil.h" #include "pluginspecs_video.h" @@ -148,8 +145,6 @@ bool OpenGL_ReportFBOError(const char *function, const char *file, int line); #define GL_REPORT_ERRORD() #endif -#endif // GLTEST ?? - #include #include diff --git a/Source/Plugins/Plugin_VideoOGL/Src/SConscript b/Source/Plugins/Plugin_VideoOGL/Src/SConscript index e75df3e93e..992c928bb4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/SConscript +++ b/Source/Plugins/Plugin_VideoOGL/Src/SConscript @@ -37,17 +37,11 @@ libs = [ gfxenv = env.Clone() -if gfxenv['GLTEST']: - files += [ - 'nmain.cpp', - 'nGLUtil.cpp', - ] - libs += [ 'inputcommon' ] -else: - files += [ - 'main.cpp', - 'GLUtil.cpp', - ] +files += [ + 'main.cpp', + 'GLUtil.cpp', + ] + if gfxenv['HAVE_WX']: files += [ 'GUI/ConfigDlg.cpp', @@ -110,21 +104,6 @@ conf.Define('HAVE_XXF86VM', gfxenv['HAVE_XXF86VM']) conf.Finish() -if gfxenv['GLTEST']: - if gfxenv['HAVE_XXF86VM']: - files += [ - 'X11Window.cpp', - ] - - if gfxenv['HAVE_SDL']: - files += [ - 'SDLWindow.cpp', - ] - if gfxenv['USE_WX']: - files += [ - 'WXGLWindow.cpp', - ] - # Sanity check if gfxenv['USE_WX'] and not gfxenv['HAVE_WX']: print "Must have wx to use wxgl" diff --git a/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.cpp b/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.cpp deleted file mode 100644 index d6b709df5d..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "SDLWindow.h" - -void SDLWindow::SwapBuffers() { - SDL_GL_SwapBuffers(); -} - -void SDLWindow::SetWindowText(const char *text) { - SDL_WM_SetCaption(text, NULL); -} - -bool SDLWindow::PeekMessages() { - // TODO implement - return false; -} - -void SDLWindow::Update() { - - SDL_Surface *surface = SDL_GetVideoSurface(); - if (!surface) { - PanicAlert("Can't get surface to update"); - return; - } - - //SetSize(surface->w, surface->h); - updateDim(); - -} - -bool SDLWindow::MakeCurrent() { - /* Note: The reason for having the call to SDL_SetVideoMode in here instead - of in OpenGL_Create() is that "make current" is part of the video - mode setting and is not available as a separate call in SDL. We - have to do "make current" here because this method runs in the CPU - thread while OpenGL_Create() runs in a diferent thread and "make - current" has to be done in the same thread that will be making - calls to OpenGL. */ - - // Fetch video info. - const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo(); - if (!videoInfo) { - PanicAlert("Couldn't get video info"); - SDL_Quit(); - return false; - } - // Compute video mode flags. - const int videoFlags = SDL_OPENGL - | ( videoInfo->hw_available ? SDL_HWSURFACE : SDL_SWSURFACE ) - | ( g_Config.bFullscreen ? SDL_FULLSCREEN : 0); - // Set vide mode. - // TODO: Can we use this field or is a separate field needed? - SDL_Surface *screen = SDL_SetVideoMode(GetXwin(), GetYwin(), - 0, videoFlags); - if (!screen) { - PanicAlert("Couldn't set video mode"); - SDL_Quit(); - return false; - } - - return true; -} - -SDLWindow::~SDLWindow() { - SDL_Quit(); -} - -SDLWindow::SDLWindow() : GLWindow() { - - //init sdl video - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - PanicAlert("Failed to init SDL: %s", SDL_GetError()); - SDL_Quit(); - //return NULL; - } - - // Setup ogl to use double buffering - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.h b/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.h deleted file mode 100644 index f53f921b4b..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/SDLWindow.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _SDLWINDOW_H -#define _SDLWINDOW_H - -#include "GLWindow.h" -#if defined HAVE_SDL && HAVE_SDL -#include - -class SDLWindow : public GLWindow -{ -public: - virtual void SwapBuffers(); - virtual void SetWindowText(const char *text); - virtual bool PeekMessages(); - virtual void Update(); - virtual bool MakeCurrent(); - - static bool valid() { return true; } - ~SDLWindow(); - SDLWindow(); - -}; -#else -class SDLWindow : public GLWindow -{ -public: - SDLWindow() {} -}; -#endif -#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.cpp deleted file mode 100644 index b871b12e7d..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.cpp +++ /dev/null @@ -1,803 +0,0 @@ -#include "Win32Window.h" - -// Static member data -unsigned int Win32Window::ourWindowCount = 0; -const char* Win32Window::ourClassName = _T("DolphinEmuWnd"); -Win32Window* Win32Window::ourFullscreenWindow = NULL; - - -Win32Window::Win32Window() : GLWindow(), -myHandle (NULL), -myCallback (0), -myCursor (NULL), -myIcon (NULL), -myKeyRepeatEnabled (true), -myIsCursorIn (false) -{ - // Register the window class at first call - if (ourWindowCount == 0) - RegisterWindowClass(); - - // Use small dimensions - //SetWinSize(1, 1); - - // Create the rendering window - if (!(myHandle = CreateWindow(ourClassName, _T(""), WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, - GetXwin(), GetYwin(), NULL, NULL, myhInstance, this))) { - PanicAlert("Error creating GL Window"); - } - - ShowWindow(myHandle, SW_SHOW); - - // Create the rendering context - if (myHandle) - { - VideoMode Mode; - Mode.Width = GetXwin(); - Mode.Height = GetYwin(); - Mode.BitsPerPixel = 32; - Mode.DepthBits = 24; - Mode.StencilBits = 8; - Mode.AntialiasingLevel = 0; - CreateContext(Mode); - - // Don't activate by default - //SetNotActive(); - } -} - -Win32Window::~Win32Window() -{ - // Destroy the custom icon, if any - if (myIcon) - DestroyIcon(myIcon); - - if (!myCallback) - { - // Destroy the window - if (myHandle) - DestroyWindow(myHandle); - - // Decrement the window count - ourWindowCount--; - - // Unregister window class if we were the last window - if (ourWindowCount == 0) - UnregisterClass(ourClassName, GetModuleHandle(NULL)); - } - else - { - // The window is external : remove the hook on its message callback - SetWindowLongPtr(myHandle, GWLP_WNDPROC, myCallback); - } -} - -void Win32Window::SwapBuffers() -{ - if (myDeviceContext && myGLContext) - ::SwapBuffers(myDeviceContext); -} - -void Win32Window::SetWindowText(const char *text) -{ - ::SetWindowText(GetWnd(), text); -} - -void Win32Window::ShowMouseCursor(bool Show) -{ - if (Show) - myCursor = LoadCursor(NULL, IDC_ARROW); - else - myCursor = NULL; - - SetCursor(myCursor); -} - -bool Win32Window::PeekMessages() -{ - // We update the window only if we own it - if (!myCallback) - { - MSG Message; - while (PeekMessage(&Message, myHandle, 0, 0, PM_REMOVE)) - { - TranslateMessage(&Message); - DispatchMessage(&Message); - } - } - return true; // I don't know why this is bool... -} - -void Win32Window::Update() -{ - // We just check all of our events here - // TODO - PeekMessages(); - eventHandler->Update(); - updateDim(); -} - -bool Win32Window::MakeCurrent() -{ - if (myDeviceContext && myGLContext && (wglGetCurrentContext() != myGLContext)) - { - wglMakeCurrent(myDeviceContext, myGLContext); - return true; - } - else - return false; -} - -void Win32Window::RegisterWindowClass() -{ - WNDCLASS WindowClass; - myhInstance = GetModuleHandle(NULL); - WindowClass.style = CS_OWNDC; - WindowClass.lpfnWndProc = &Win32Window::GlobalOnEvent; - WindowClass.cbClsExtra = 0; - WindowClass.cbWndExtra = 0; - WindowClass.hInstance = myhInstance; - WindowClass.hIcon = NULL; - WindowClass.hCursor = 0; - WindowClass.hbrBackground = 0; - WindowClass.lpszMenuName = NULL; - WindowClass.lpszClassName = ourClassName; - if (!RegisterClass(&WindowClass)) - ERROR_LOG("Failed To Register The Window Class\n"); -} - -void Win32Window::SwitchToFullscreen(const VideoMode& Mode) -{ - DEVMODE DevMode; - DevMode.dmSize = sizeof(DEVMODE); - DevMode.dmPelsWidth = Mode.Width; - DevMode.dmPelsHeight = Mode.Height; - DevMode.dmBitsPerPel = Mode.BitsPerPixel; - DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; - - // Apply fullscreen mode - if (ChangeDisplaySettings(&DevMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - { - ERROR_LOG("Failed to change display mode for fullscreen\n"); - return; - } - - // Change window style (no border, no titlebar, ...) - SetWindowLong(myHandle, GWL_STYLE, WS_POPUP); - SetWindowLong(myHandle, GWL_EXSTYLE, WS_EX_APPWINDOW); - - // And resize it so that it fits the entire screen - SetWindowPos(myHandle, HWND_TOP, 0, 0, Mode.Width, Mode.Height, SWP_FRAMECHANGED); - ShowWindow(myHandle, SW_SHOW); - - // Set "this" as the current fullscreen window - ourFullscreenWindow = this; - - // SetPixelFormat can fail (really ?) if window style doesn't contain these flags - long Style = GetWindowLong(myHandle, GWL_STYLE); - SetWindowLong(myHandle, GWL_STYLE, Style | WS_CLIPCHILDREN | WS_CLIPSIBLINGS); -} - -//VideoMode Win32Window::GetSupportedVideoModes(std::vector& Modes) -//{ -// // First, clear array to fill -// Modes.clear(); -// -// // Enumerate all available video modes for primary display adapter -// DEVMODE Win32Mode; -// Win32Mode.dmSize = sizeof(DEVMODE); -// for (int Count = 0; EnumDisplaySettings(NULL, Count, &Win32Mode); ++Count) -// { -// // Convert to sfVideoMode -// VideoMode Mode(Win32Mode.dmPelsWidth, Win32Mode.dmPelsHeight, Win32Mode.dmBitsPerPel); -// -// // Add it only if it is not already in the array -// if (std::find(Modes.begin(), Modes.end(), Mode) == Modes.end()) -// Modes.push_back(Mode); -// } -//} - -void Win32Window::CreateContext(VideoMode& Mode) -{ - // TESTING - Mode.DepthBits = 24; - Mode.StencilBits = 8; - //Mode.AntialiasingLevel = 4; - - // Get the device context attached to the window - myDeviceContext = GetDC(myHandle); - if (myDeviceContext == NULL) - { - ERROR_LOG("Failed to get device context of window -- cannot create OpenGL context\n"); - return; - } - - // Let's find a suitable pixel format -- first try with antialiasing - int BestFormat = 0; - if (Mode.AntialiasingLevel > 0) - { - // Get the wglChoosePixelFormatARB function (it is an extension) - PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB = reinterpret_cast(wglGetProcAddress("wglChoosePixelFormatARB")); - - // Define the basic attributes we want for our window - int IntAttributes[] = - { - WGL_DRAW_TO_WINDOW_ARB, GL_TRUE, - WGL_SUPPORT_OPENGL_ARB, GL_TRUE, - WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB, - WGL_DOUBLE_BUFFER_ARB, GL_TRUE, - WGL_SAMPLE_BUFFERS_ARB, (Mode.AntialiasingLevel ? GL_TRUE : GL_FALSE), - WGL_SAMPLES_ARB, Mode.AntialiasingLevel, - 0, 0 - }; - - // Let's check how many formats are supporting our requirements - int Formats[128]; - UINT NbFormats; - float FloatAttributes[] = {0, 0}; - bool IsValid = wglChoosePixelFormatARB(myDeviceContext, IntAttributes, FloatAttributes, sizeof(Formats) / sizeof(*Formats), Formats, &NbFormats) != 0; - if (!IsValid || (NbFormats == 0)) - { - if (Mode.AntialiasingLevel > 2) - { - // No format matching our needs : reduce the multisampling level - char errMsg[256]; - sprintf(errMsg, "Failed to find a pixel format supporting %u antialiasing levels ; trying with 2 levels\n", Mode.AntialiasingLevel); - ERROR_LOG(errMsg); - - Mode.AntialiasingLevel = IntAttributes[1] = 2; - IsValid = wglChoosePixelFormatARB(myDeviceContext, IntAttributes, FloatAttributes, sizeof(Formats) / sizeof(*Formats), Formats, &NbFormats) != 0; - } - - if (!IsValid || (NbFormats == 0)) - { - // Cannot find any pixel format supporting multisampling ; disabling antialiasing - ERROR_LOG("Failed to find a pixel format supporting antialiasing ; antialiasing will be disabled\n"); - Mode.AntialiasingLevel = 0; - } - } - - // Get the best format among the returned ones - if (IsValid && (NbFormats > 0)) - { - int BestScore = 0xFFFF; - for (UINT i = 0; i < NbFormats; ++i) - { - // Get the current format's attributes - PIXELFORMATDESCRIPTOR Attribs; - Attribs.nSize = sizeof(PIXELFORMATDESCRIPTOR); - Attribs.nVersion = 1; - DescribePixelFormat(myDeviceContext, Formats[i], sizeof(PIXELFORMATDESCRIPTOR), &Attribs); - - // Evaluate the current configuration - int Color = Attribs.cRedBits + Attribs.cGreenBits + Attribs.cBlueBits + Attribs.cAlphaBits; - int Score = abs(static_cast(Mode.BitsPerPixel - Color)) + // The EvaluateConfig function - abs(static_cast(Mode.DepthBits - Attribs.cDepthBits)) + - abs(static_cast(Mode.StencilBits - Attribs.cStencilBits)); - - // Keep it if it's better than the current best - if (Score < BestScore) - { - BestScore = Score; - BestFormat = Formats[i]; - } - } - } - } - - // Find a pixel format with no antialiasing, if not needed or not supported - if (BestFormat == 0) - { - // Setup a pixel format descriptor from the rendering settings - PIXELFORMATDESCRIPTOR PixelDescriptor; - ZeroMemory(&PixelDescriptor, sizeof(PIXELFORMATDESCRIPTOR)); - PixelDescriptor.nSize = sizeof(PIXELFORMATDESCRIPTOR); - PixelDescriptor.nVersion = 1; - PixelDescriptor.iLayerType = PFD_MAIN_PLANE; - PixelDescriptor.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; - PixelDescriptor.iPixelType = PFD_TYPE_RGBA; - PixelDescriptor.cColorBits = static_cast(Mode.BitsPerPixel); - PixelDescriptor.cDepthBits = static_cast(Mode.DepthBits); - PixelDescriptor.cStencilBits = static_cast(Mode.StencilBits); - - // Get the pixel format that best matches our requirements - BestFormat = ChoosePixelFormat(myDeviceContext, &PixelDescriptor); - if (BestFormat == 0) - { - ERROR_LOG("Failed to find a suitable pixel format for device context -- cannot create OpenGL context\n"); - return; - } - } - - // Extract the depth and stencil bits from the chosen format - PIXELFORMATDESCRIPTOR ActualFormat; - ActualFormat.nSize = sizeof(PIXELFORMATDESCRIPTOR); - ActualFormat.nVersion = 1; - DescribePixelFormat(myDeviceContext, BestFormat, sizeof(PIXELFORMATDESCRIPTOR), &ActualFormat); - Mode.DepthBits = ActualFormat.cDepthBits; - Mode.StencilBits = ActualFormat.cStencilBits; - - // Set the chosen pixel format - if (!SetPixelFormat(myDeviceContext, BestFormat, &ActualFormat)) - { - ERROR_LOG("Failed to set pixel format for device context -- cannot create OpenGL context\n"); - return; - } - - // Create the OpenGL context from the device context - myGLContext = wglCreateContext(myDeviceContext); - if (myGLContext == NULL) - { - ERROR_LOG("Failed to create an OpenGL context for this window\n"); - return; - } - - // Share display lists with other contexts - HGLRC CurrentContext = wglGetCurrentContext(); - if (CurrentContext) - wglShareLists(CurrentContext, myGLContext); - - // Activate the context - MakeCurrent(); - - // Enable multisampling - if (Mode.AntialiasingLevel > 0) - glEnable(GL_MULTISAMPLE_ARB); -} - -void Win32Window::Cleanup() -{ - // Restore the previous video mode (in case we were running in fullscreen) - if (ourFullscreenWindow == this) - { - ChangeDisplaySettings(NULL, 0); - ourFullscreenWindow = NULL; - } - - // Unhide the mouse cursor (in case it was hidden) - ShowMouseCursor(true); - //GetProperty(OGL_HIDECURSOR) - - // Destroy the OpenGL context - if (myGLContext) - { - // Unbind the context before destroying it - //SetNotActive(); - - wglDeleteContext(myGLContext); - myGLContext = NULL; - } - if (myDeviceContext) - { - ReleaseDC(myHandle, myDeviceContext); - myDeviceContext = NULL; - } -} - - -/// Process a Win32 Event - -void Win32Window::ProcessEvent(UINT Message, WPARAM WParam, LPARAM LParam) -{ - // Don't process any message until window is created - if (myHandle == NULL) - return; - - switch (Message) - { - // Destroy Event - case WM_DESTROY : - { - // Here we must cleanup resources ! - Cleanup(); - break; - } - - // Set cursor Event - case WM_SETCURSOR : - { - // The mouse has moved, if the cursor is in our window we must refresh the cursor - if (LOWORD(LParam) == HTCLIENT) - SetCursor(myCursor); - break; - } - case WM_CLOSE : - { - sf::Event Evt; - Evt.Type = sf::Event::Closed; - eventHandler->addEvent(&Evt); - break; - } - - // Resize Event - case WM_SIZE : - { - // Update window size - RECT Rect; - GetClientRect(myHandle, &Rect); - SetWinSize(Rect.right - Rect.left, Rect.bottom - Rect.top); - - sf::Event Evt; - Evt.Type = sf::Event::Resized; - Evt.Size.Width = GetXwin(); - Evt.Size.Height = GetYwin(); - eventHandler->addEvent(&Evt); - break; - } - // Gain focus Event - case WM_SETFOCUS : - { - sf::Event Evt; - Evt.Type = sf::Event::GainedFocus; - eventHandler->addEvent(&Evt); - break; - } - - // Lost focus Event - case WM_KILLFOCUS : - { - sf::Event Evt; - Evt.Type = sf::Event::LostFocus; - eventHandler->addEvent(&Evt); - break; - } - - // Text Event - case WM_CHAR : - { - sf::Event Evt; - Evt.Type = sf::Event::TextEntered; - Evt.Text.Unicode = static_cast(WParam); - eventHandler->addEvent(&Evt); - break; - } - // Keydown Event - case WM_KEYDOWN : - case WM_SYSKEYDOWN : - { - if (myKeyRepeatEnabled || ((LParam & (1 << 30)) == 0)) - { - sf::Event Evt; - Evt.Type = sf::Event::KeyPressed; - Evt.Key.Code = (WParam == VK_SHIFT) ? GetShiftState(true) : VirtualKeyCodeToSF(WParam, LParam); - Evt.Key.Alt = HIWORD(GetAsyncKeyState(VK_MENU)) != 0; - Evt.Key.Control = HIWORD(GetAsyncKeyState(VK_CONTROL)) != 0; - Evt.Key.Shift = HIWORD(GetAsyncKeyState(VK_SHIFT)) != 0; - eventHandler->addEvent(&Evt); - } - break; - } - - // Keyup Event - case WM_KEYUP : - case WM_SYSKEYUP : - { - sf::Event Evt; - Evt.Type = sf::Event::KeyReleased; - Evt.Key.Code = (WParam == VK_SHIFT) ? GetShiftState(false) : VirtualKeyCodeToSF(WParam, LParam); - Evt.Key.Alt = HIWORD(GetAsyncKeyState(VK_MENU)) != 0; - Evt.Key.Control = HIWORD(GetAsyncKeyState(VK_CONTROL)) != 0; - Evt.Key.Shift = HIWORD(GetAsyncKeyState(VK_SHIFT)) != 0; - eventHandler->addEvent(&Evt); - break; - } - - // Mouse wheel Event - case WM_MOUSEWHEEL : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseWheelMoved; - Evt.MouseWheel.Delta = static_cast(HIWORD(WParam)) / 120; - eventHandler->addEvent(&Evt); - break; - } - - // Mouse left button down Event - case WM_LBUTTONDOWN : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonPressed; - Evt.MouseButton.Button = sf::Mouse::Left; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse left button up Event - case WM_LBUTTONUP : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonReleased; - Evt.MouseButton.Button = sf::Mouse::Left; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse right button down Event - case WM_RBUTTONDOWN : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonPressed; - Evt.MouseButton.Button = sf::Mouse::Right; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse right button up Event - case WM_RBUTTONUP : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonReleased; - Evt.MouseButton.Button = sf::Mouse::Right; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse wheel button down Event - case WM_MBUTTONDOWN : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonPressed; - Evt.MouseButton.Button = sf::Mouse::Middle; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse wheel button up Event - case WM_MBUTTONUP : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonReleased; - Evt.MouseButton.Button = sf::Mouse::Middle; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse X button down Event - case WM_XBUTTONDOWN : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonPressed; - Evt.MouseButton.Button = HIWORD(WParam) == XBUTTON1 ? sf::Mouse::XButton1 : sf::Mouse::XButton2; - Evt.MouseButton.X = LOWORD(LParam); - Evt.MouseButton.Y = HIWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse X button up Event - case WM_XBUTTONUP : - { - sf::Event Evt; - Evt.Type = sf::Event::MouseButtonReleased; - Evt.MouseButton.Button = HIWORD(WParam) == XBUTTON1 ? sf::Mouse::XButton1 : sf::Mouse::XButton2; - Evt.MouseButton.X = LOWORD(LParam); - eventHandler->addEvent(&Evt); - break; - } - - // Mouse move Event - case WM_MOUSEMOVE : - { - // Check if we need to generate a MouseEntered Event - if (!myIsCursorIn) - { - TRACKMOUSEEVENT MouseEvent; - MouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); - MouseEvent.hwndTrack = myHandle; - MouseEvent.dwFlags = TME_LEAVE; - TrackMouseEvent(&MouseEvent); - - myIsCursorIn = true; - - sf::Event Evt; - Evt.Type = sf::Event::MouseEntered; - eventHandler->addEvent(&Evt); - } - - sf::Event Evt; - Evt.Type = sf::Event::MouseMoved; - Evt.MouseMove.X = LOWORD(LParam); - Evt.MouseMove.Y = HIWORD(LParam); // (shuffle2) Added this, check to see if it's good - eventHandler->addEvent(&Evt); - break; - } - - // Mouse leave Event - case WM_MOUSELEAVE : - { - myIsCursorIn = false; - - sf::Event Evt; - Evt.Type = sf::Event::MouseLeft; - eventHandler->addEvent(&Evt); - break; - } - } -} - - -/// Check the state of the shift keys on a key sf::Event, -/// and return the corresponding SF key code - -sf::Key::Code Win32Window::GetShiftState(bool KeyDown) -{ - static bool LShiftPrevDown = false; - static bool RShiftPrevDown = false; - - bool LShiftDown = (HIWORD(GetAsyncKeyState(VK_LSHIFT)) != 0); - bool RShiftDown = (HIWORD(GetAsyncKeyState(VK_RSHIFT)) != 0); - - sf::Key::Code Code = sf::Key::Code(0); - if (KeyDown) - { - if (!LShiftPrevDown && LShiftDown) Code = sf::Key::LShift; - else if (!RShiftPrevDown && RShiftDown) Code = sf::Key::RShift; - } - else - { - if (LShiftPrevDown && !LShiftDown) Code = sf::Key::LShift; - else if (RShiftPrevDown && !RShiftDown) Code = sf::Key::RShift; - } - - LShiftPrevDown = LShiftDown; - RShiftPrevDown = RShiftDown; - - return Code; -} - - -/// Convert a Win32 virtual key code to a SFML key code - -sf::Key::Code Win32Window::VirtualKeyCodeToSF(WPARAM VirtualKey, LPARAM Flags) -{ - switch (VirtualKey) - { - // VK_SHIFT is handled by the GetShiftState function - case VK_MENU : return (Flags & (1 << 24)) ? sf::Key::RAlt : sf::Key::LAlt; - case VK_CONTROL : return (Flags & (1 << 24)) ? sf::Key::RControl : sf::Key::LControl; - case VK_LWIN : return sf::Key::LSystem; - case VK_RWIN : return sf::Key::RSystem; - case VK_APPS : return sf::Key::Menu; - case VK_OEM_1 : return sf::Key::SemiColon; - case VK_OEM_2 : return sf::Key::Slash; - case VK_OEM_PLUS : return sf::Key::Equal; - case VK_OEM_MINUS : return sf::Key::Dash; - case VK_OEM_4 : return sf::Key::LBracket; - case VK_OEM_6 : return sf::Key::RBracket; - case VK_OEM_COMMA : return sf::Key::Comma; - case VK_OEM_PERIOD : return sf::Key::Period; - case VK_OEM_7 : return sf::Key::Quote; - case VK_OEM_5 : return sf::Key::BackSlash; - case VK_OEM_3 : return sf::Key::Tilde; - case VK_ESCAPE : return sf::Key::Escape; - case VK_SPACE : return sf::Key::Space; - case VK_RETURN : return sf::Key::Return; - case VK_BACK : return sf::Key::Back; - case VK_TAB : return sf::Key::Tab; - case VK_PRIOR : return sf::Key::PageUp; - case VK_NEXT : return sf::Key::PageDown; - case VK_END : return sf::Key::End; - case VK_HOME : return sf::Key::Home; - case VK_INSERT : return sf::Key::Insert; - case VK_DELETE : return sf::Key::Delete; - case VK_ADD : return sf::Key::Add; - case VK_SUBTRACT : return sf::Key::Subtract; - case VK_MULTIPLY : return sf::Key::Multiply; - case VK_DIVIDE : return sf::Key::Divide; - case VK_PAUSE : return sf::Key::Pause; - case VK_F1 : return sf::Key::F1; - case VK_F2 : return sf::Key::F2; - case VK_F3 : return sf::Key::F3; - case VK_F4 : return sf::Key::F4; - case VK_F5 : return sf::Key::F5; - case VK_F6 : return sf::Key::F6; - case VK_F7 : return sf::Key::F7; - case VK_F8 : return sf::Key::F8; - case VK_F9 : return sf::Key::F9; - case VK_F10 : return sf::Key::F10; - case VK_F11 : return sf::Key::F11; - case VK_F12 : return sf::Key::F12; - case VK_F13 : return sf::Key::F13; - case VK_F14 : return sf::Key::F14; - case VK_F15 : return sf::Key::F15; - case VK_LEFT : return sf::Key::Left; - case VK_RIGHT : return sf::Key::Right; - case VK_UP : return sf::Key::Up; - case VK_DOWN : return sf::Key::Down; - case VK_NUMPAD0 : return sf::Key::Numpad0; - case VK_NUMPAD1 : return sf::Key::Numpad1; - case VK_NUMPAD2 : return sf::Key::Numpad2; - case VK_NUMPAD3 : return sf::Key::Numpad3; - case VK_NUMPAD4 : return sf::Key::Numpad4; - case VK_NUMPAD5 : return sf::Key::Numpad5; - case VK_NUMPAD6 : return sf::Key::Numpad6; - case VK_NUMPAD7 : return sf::Key::Numpad7; - case VK_NUMPAD8 : return sf::Key::Numpad8; - case VK_NUMPAD9 : return sf::Key::Numpad9; - case 'A' : return sf::Key::A; - case 'Z' : return sf::Key::Z; - case 'E' : return sf::Key::E; - case 'R' : return sf::Key::R; - case 'T' : return sf::Key::T; - case 'Y' : return sf::Key::Y; - case 'U' : return sf::Key::U; - case 'I' : return sf::Key::I; - case 'O' : return sf::Key::O; - case 'P' : return sf::Key::P; - case 'Q' : return sf::Key::Q; - case 'S' : return sf::Key::S; - case 'D' : return sf::Key::D; - case 'F' : return sf::Key::F; - case 'G' : return sf::Key::G; - case 'H' : return sf::Key::H; - case 'J' : return sf::Key::J; - case 'K' : return sf::Key::K; - case 'L' : return sf::Key::L; - case 'M' : return sf::Key::M; - case 'W' : return sf::Key::W; - case 'X' : return sf::Key::X; - case 'C' : return sf::Key::C; - case 'V' : return sf::Key::V; - case 'B' : return sf::Key::B; - case 'N' : return sf::Key::N; - case '0' : return sf::Key::Num0; - case '1' : return sf::Key::Num1; - case '2' : return sf::Key::Num2; - case '3' : return sf::Key::Num3; - case '4' : return sf::Key::Num4; - case '5' : return sf::Key::Num5; - case '6' : return sf::Key::Num6; - case '7' : return sf::Key::Num7; - case '8' : return sf::Key::Num8; - case '9' : return sf::Key::Num9; - } - - return sf::Key::Code(0); -} - - -/// Win32 Callback for the window class - -LRESULT CALLBACK Win32Window::GlobalOnEvent(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam) -{ - // Associate handle and Window instance when the creation message is received - if (Message == WM_CREATE) - { - // Get Win32Window instance (it was passed as the last argument of CreateWindow) - long This = reinterpret_cast(reinterpret_cast(LParam)->lpCreateParams); - - // Set as the "user data" parameter of the window - SetWindowLongPtr(Handle, GWLP_USERDATA, This); - } - - // Get the GLWindow instance corresponding to the window handle - Win32Window* Window = reinterpret_cast(GetWindowLongPtr(Handle, GWLP_USERDATA)); - - // Forward the event to the appropriate function - if (Window) - { - Window->ProcessEvent(Message, WParam, LParam); - - if (Window->myCallback) - return CallWindowProc(reinterpret_cast(Window->myCallback), Handle, Message, WParam, LParam); - } - - // We don't forward the WM_CLOSE message to prevent the OS from automatically destroying the window - if (Message == WM_CLOSE) - return 0; - - return DefWindowProc(Handle, Message, WParam, LParam); -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.h b/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.h deleted file mode 100644 index 423ffe34a7..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/Win32Window.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _WIN32WINDOW_H -#define _WIN32WINDOW_H - -#include "GLWindow.h" - -#ifdef _WIN32 -class Win32Window : public GLWindow -{ -public: - virtual void SwapBuffers(); - virtual void SetWindowText(const char *text); - virtual bool PeekMessages(); - virtual void Update(); - virtual bool MakeCurrent(); - HWND GetWnd(){return myHandle;}; - HWND GetParentWnd(){return myParent;}; - - static bool valid() { return true; } - ~Win32Window(); - Win32Window(); - static sf::Key::Code VirtualKeyCodeToSF(WPARAM VirtualKey, LPARAM Flags); - static sf::Key::Code GetShiftState(bool KeyDown); - -private: - struct VideoMode - { - unsigned int Width; - unsigned int Height; - unsigned int BitsPerPixel; - unsigned int DepthBits; - unsigned int StencilBits; - unsigned int AntialiasingLevel; - }; - - virtual void ShowMouseCursor(bool Show); - void RegisterWindowClass(); - void SwitchToFullscreen(const VideoMode& Mode); - void CreateContext(VideoMode& Mode); - void Cleanup(); - void ProcessEvent(UINT Message, WPARAM WParam, LPARAM LParam); - static LRESULT CALLBACK GlobalOnEvent(HWND Handle, UINT Message, WPARAM WParam, LPARAM LParam); - - // Static member data - static unsigned int ourWindowCount; - static const char* ourClassName; - static Win32Window* ourFullscreenWindow; - - // Member data - HWND myHandle; - HINSTANCE myhInstance; - HWND myParent; // Possibly not wanted here - long myCallback; - HCURSOR myCursor; - HICON myIcon; - bool myKeyRepeatEnabled; - bool myIsCursorIn; - HDC myDeviceContext; - HGLRC myGLContext; -}; - -#else - -class Win32Window : public GLWindow -{ -public: - Win32Window() {} -}; - -#endif //_WIN32 -#endif //_WIN32WINDOW_H diff --git a/Source/Plugins/Plugin_VideoOGL/Src/X11Window.cpp b/Source/Plugins/Plugin_VideoOGL/Src/X11Window.cpp deleted file mode 100644 index a44ecb884c..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/X11Window.cpp +++ /dev/null @@ -1,392 +0,0 @@ -#include "X11Window.h" - -X11Window::X11Window() : GLWindow() { - - XVisualInfo *vi; - Colormap cmap; - int dpyWidth, dpyHeight; - int glxMajorVersion, glxMinorVersion; - int vidModeMajorVersion, vidModeMinorVersion; - Atom wmDelete; - - // attributes for a single buffered visual in RGBA format with at least - // 8 bits per color and a 24 bit depth buffer - int attrListSgl[] = {GLX_RGBA, GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, - GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, - None}; - - // attributes for a double buffered visual in RGBA format with at least - // 8 bits per color and a 24 bit depth buffer - int attrListDbl[] = { GLX_RGBA, GLX_DOUBLEBUFFER, - GLX_RED_SIZE, 8, - GLX_GREEN_SIZE, 8, - GLX_BLUE_SIZE, 8, - GLX_DEPTH_SIZE, 24, - GLX_SAMPLE_BUFFERS_ARB, - g_Config.iMultisampleMode, - GLX_SAMPLES_ARB, 1, None }; - dpy = XOpenDisplay(0); - g_VideoInitialize.pWindowHandle = (HWND)dpy; - screen = DefaultScreen(dpy); - - fs = g_Config.bFullscreen; //Set to setting in Options - - /* get an appropriate visual */ - vi = glXChooseVisual(dpy, screen, attrListDbl); - if (vi == NULL) { - vi = glXChooseVisual(dpy, screen, attrListSgl); - doubleBuffered = False; - ERROR_LOG("Only Singlebuffered Visual!\n"); - } else { - doubleBuffered = True; - NOTICE_LOG("Got Doublebuffered Visual!\n"); - } - - glXQueryVersion(dpy, &glxMajorVersion, &glxMinorVersion); - NOTICE_LOG("glX-Version %d.%d\n", glxMajorVersion, glxMinorVersion); - /* create a GLX context */ - ctx = glXCreateContext(dpy, vi, 0, GL_TRUE); - if(!ctx) { - ERROR_LOG("Couldn't Create GLX context.Quit"); - exit(0); // TODO: Don't bring down entire Emu - } - - /* create a color map */ - cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), - vi->visual, AllocNone); - attr.colormap = cmap; - attr.border_pixel = 0; - - XkbSetDetectableAutoRepeat(dpy, True, NULL); - - // get a connection - XF86VidModeQueryVersion(dpy, &vidModeMajorVersion, &vidModeMinorVersion); - - if (fs) { - - XF86VidModeModeInfo **modes = NULL; - int modeNum = 0; - int bestMode = 0; - - // set best mode to current - bestMode = 0; - NOTICE_LOG("XF86VidModeExtension-Version %d.%d\n", vidModeMajorVersion, vidModeMinorVersion); - XF86VidModeGetAllModeLines(dpy, screen, &modeNum, &modes); - - if (modeNum > 0 && modes != NULL) { - /* save desktop-resolution before switching modes */ - deskMode = *modes[0]; - /* look for mode with requested resolution */ - for (int i = 0; i < modeNum; i++) { - if ((modes[i]->hdisplay == GetXwin()) && - (modes[i]->vdisplay == GetYwin())) { - bestMode = i; - } - } - - XF86VidModeSwitchToMode(dpy, screen, modes[bestMode]); - XF86VidModeSetViewPort(dpy, screen, 0, 0); - dpyWidth = modes[bestMode]->hdisplay; - dpyHeight = modes[bestMode]->vdisplay; - NOTICE_LOG("Resolution %dx%d\n", dpyWidth, dpyHeight); - XFree(modes); - - /* create a fullscreen window */ - attr.override_redirect = True; - attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | - KeyReleaseMask | ButtonReleaseMask | StructureNotifyMask; - win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, - dpyWidth, dpyHeight, 0, vi->depth, InputOutput, - vi->visual, CWBorderPixel | CWColormap | - CWEventMask | CWOverrideRedirect, &attr); - XWarpPointer(dpy, None, win, 0, 0, 0, 0, 0, 0); - XMapRaised(dpy, win); - XGrabKeyboard(dpy, win, True, GrabModeAsync, - GrabModeAsync, CurrentTime); - XGrabPointer(dpy, win, True, ButtonPressMask, - GrabModeAsync, GrabModeAsync, win, None, CurrentTime); - } - else { - ERROR_LOG("Failed to start fullscreen. If you received the \n" - "\"XFree86-VidModeExtension\" extension is missing, add\n" - "Load \"extmod\"\n" - "to your X configuration file (under the Module Section)\n"); - fs = 0; - } - } - - if (!fs) { - - // create a window in window mode - attr.event_mask = ExposureMask | KeyPressMask | ButtonPressMask | - KeyReleaseMask | ButtonReleaseMask | - StructureNotifyMask | ResizeRedirectMask; - win = XCreateWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, GetXwin(), - GetYwin(), 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap | CWEventMask, &attr); - // only set window title and handle wm_delete_events if in windowed mode - wmDelete = XInternAtom(dpy, "WM_DELETE_WINDOW", True); - XSetWMProtocols(dpy, win, &wmDelete, 1); - XSetStandardProperties(dpy, win, "GPU", - "GPU", None, NULL, 0, NULL); - XMapRaised(dpy, win); - } -} - -X11Window::~X11Window() { - if (ctx) { - if (!glXMakeCurrent(dpy, None, NULL)) { - ERROR_LOG("Could not release drawing context.\n"); - } - XUnmapWindow(dpy, win); - glXDestroyContext(dpy, ctx); - XCloseDisplay(dpy); - ctx = NULL; - } - /* switch back to original desktop resolution if we were in fs */ - if (dpy != NULL) { - if (fs) { - XF86VidModeSwitchToMode(dpy, screen, &deskMode); - XF86VidModeSetViewPort(dpy, screen, 0, 0); - } - } -} - -void X11Window::SwapBuffers() { - glXSwapBuffers(dpy, win); -} - -void X11Window::SetWindowText(const char *text) { - /** - * Tell X to ask the window manager to set the window title. (X - * itself doesn't provide window title functionality.) - */ - XStoreName(dpy, win, text); -} - -bool X11Window::PeekMessages() { - // TODO: implement - return false; -} - -// Taken from sfml code -void X11Window::ProcessEvent(XEvent WinEvent) { - switch (WinEvent.type) { - - case KeyPress : - { - // Get the keysym of the key that has been pressed - static XComposeStatus KeyboardStatus; - char Buffer[32]; - KeySym Sym; - XLookupString(&WinEvent.xkey, Buffer, sizeof(Buffer), &Sym, &KeyboardStatus); - - // Fill the event parameters - sf::Event Evt; - Evt.Type = sf::Event::KeyPressed; - Evt.Key.Code = KeysymToSF(Sym); - Evt.Key.Alt = WinEvent.xkey.state & Mod1Mask; - Evt.Key.Control = WinEvent.xkey.state & ControlMask; - Evt.Key.Shift = WinEvent.xkey.state & ShiftMask; - eventHandler->addEvent(&Evt); - break; - } - // Key up event - case KeyRelease : - { - // Get the keysym of the key that has been pressed - char Buffer[32]; - KeySym Sym; - XLookupString(&WinEvent.xkey, Buffer, 32, &Sym, NULL); - - // Fill the event parameters - sf::Event Evt; - Evt.Type = sf::Event::KeyReleased; - Evt.Key.Code = KeysymToSF(Sym); - Evt.Key.Alt = WinEvent.xkey.state & Mod1Mask; - Evt.Key.Control = WinEvent.xkey.state & ControlMask; - Evt.Key.Shift = WinEvent.xkey.state & ShiftMask; - eventHandler->addEvent(&Evt); - break; - } - } -} - -void X11Window::Update() { - // We just check all of our events here - XEvent event; - // KeySym key; - // int x,y; - // u32 w,h,depth; - - int num_events; - for (num_events = XPending(dpy);num_events > 0;num_events--) { - XNextEvent(dpy, &event); - ProcessEvent(event); - /* case ButtonPress: - case ButtonRelease: - XPutBackEvent(dpy, &event); - break; - case ConfigureNotify: - Window winDummy; - unsigned int borderDummy; - XGetGeometry(dpy, win, &winDummy, &x, &y, - &w, &h, &borderDummy, &depth); - SetSize(w, h); - break; - case ClientMessage: //TODO: We aren't reading this correctly, It could be anything, highest chance is that it's a close event though - Video_Shutdown(); // Calling from here since returning false does nothing - return; - break; - default: - //TODO: Should we put the event back if we don't handle it? - // I think we handle all the needed ones, the rest shouldn't matter - // But to be safe, let's but them back anyway - //XPutBackEvent(dpy, &event); - break; - }*/ - } - - eventHandler->Update(); - updateDim(); -} - -bool X11Window::MakeCurrent() { - - Window winDummy; - unsigned int borderDummy; - int x,y; - u32 w,h,depth; - // connect the glx-context to the window - glXMakeCurrent(dpy, win, ctx); - XGetGeometry(dpy, win, &winDummy, &x, &y, - &w, &h, &borderDummy, &depth); - - NOTICE_LOG("GLWin Depth %d", depth); - if (glXIsDirect(dpy, ctx)) { - ERROR_LOG("you have Direct Rendering!"); - } else { - NOTICE_LOG("no Direct Rendering possible!"); - } - - // better for pad plugin key input (thc) - XSelectInput(dpy, win, ExposureMask | KeyPressMask | ButtonPressMask | - KeyReleaseMask | ButtonReleaseMask | StructureNotifyMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask); - - return true; -} - -// Taken from SF code -sf::Key::Code X11Window::KeysymToSF(KeySym Sym) { - // First convert to uppercase (to avoid dealing with two different keysyms for the same key) - KeySym Lower, Key; - XConvertCase(Sym, &Lower, &Key); - - switch (Key) - { - case XK_Shift_L : return sf::Key::LShift; - case XK_Shift_R : return sf::Key::RShift; - case XK_Control_L : return sf::Key::LControl; - case XK_Control_R : return sf::Key::RControl; - case XK_Alt_L : return sf::Key::LAlt; - case XK_Alt_R : return sf::Key::RAlt; - case XK_Super_L : return sf::Key::LSystem; - case XK_Super_R : return sf::Key::RSystem; - case XK_Menu : return sf::Key::Menu; - case XK_Escape : return sf::Key::Escape; - case XK_semicolon : return sf::Key::SemiColon; - case XK_slash : return sf::Key::Slash; - case XK_equal : return sf::Key::Equal; - case XK_minus : return sf::Key::Dash; - case XK_bracketleft : return sf::Key::LBracket; - case XK_bracketright : return sf::Key::RBracket; - case XK_comma : return sf::Key::Comma; - case XK_period : return sf::Key::Period; - case XK_dead_acute : return sf::Key::Quote; - case XK_backslash : return sf::Key::BackSlash; - case XK_dead_grave : return sf::Key::Tilde; - case XK_space : return sf::Key::Space; - case XK_Return : return sf::Key::Return; - case XK_KP_Enter : return sf::Key::Return; - case XK_BackSpace : return sf::Key::Back; - case XK_Tab : return sf::Key::Tab; - case XK_Prior : return sf::Key::PageUp; - case XK_Next : return sf::Key::PageDown; - case XK_End : return sf::Key::End; - case XK_Home : return sf::Key::Home; - case XK_Insert : return sf::Key::Insert; - case XK_Delete : return sf::Key::Delete; - case XK_KP_Add : return sf::Key::Add; - case XK_KP_Subtract : return sf::Key::Subtract; - case XK_KP_Multiply : return sf::Key::Multiply; - case XK_KP_Divide : return sf::Key::Divide; - case XK_Pause : return sf::Key::Pause; - case XK_F1 : return sf::Key::F1; - case XK_F2 : return sf::Key::F2; - case XK_F3 : return sf::Key::F3; - case XK_F4 : return sf::Key::F4; - case XK_F5 : return sf::Key::F5; - case XK_F6 : return sf::Key::F6; - case XK_F7 : return sf::Key::F7; - case XK_F8 : return sf::Key::F8; - case XK_F9 : return sf::Key::F9; - case XK_F10 : return sf::Key::F10; - case XK_F11 : return sf::Key::F11; - case XK_F12 : return sf::Key::F12; - case XK_F13 : return sf::Key::F13; - case XK_F14 : return sf::Key::F14; - case XK_F15 : return sf::Key::F15; - case XK_Left : return sf::Key::Left; - case XK_Right : return sf::Key::Right; - case XK_Up : return sf::Key::Up; - case XK_Down : return sf::Key::Down; - case XK_KP_0 : return sf::Key::Numpad0; - case XK_KP_1 : return sf::Key::Numpad1; - case XK_KP_2 : return sf::Key::Numpad2; - case XK_KP_3 : return sf::Key::Numpad3; - case XK_KP_4 : return sf::Key::Numpad4; - case XK_KP_5 : return sf::Key::Numpad5; - case XK_KP_6 : return sf::Key::Numpad6; - case XK_KP_7 : return sf::Key::Numpad7; - case XK_KP_8 : return sf::Key::Numpad8; - case XK_Z : return sf::Key::Z; - case XK_E : return sf::Key::E; - case XK_R : return sf::Key::R; - case XK_T : return sf::Key::T; - case XK_Y : return sf::Key::Y; - case XK_U : return sf::Key::U; - case XK_I : return sf::Key::I; - case XK_O : return sf::Key::O; - case XK_P : return sf::Key::P; - case XK_Q : return sf::Key::Q; - case XK_S : return sf::Key::S; - case XK_D : return sf::Key::D; - case XK_F : return sf::Key::F; - case XK_G : return sf::Key::G; - case XK_H : return sf::Key::H; - case XK_J : return sf::Key::J; - case XK_K : return sf::Key::K; - case XK_L : return sf::Key::L; - case XK_M : return sf::Key::M; - case XK_W : return sf::Key::W; - case XK_X : return sf::Key::X; - case XK_C : return sf::Key::C; - case XK_V : return sf::Key::V; - case XK_B : return sf::Key::B; - case XK_N : return sf::Key::N; - case XK_0 : return sf::Key::Num0; - case XK_1 : return sf::Key::Num1; - case XK_2 : return sf::Key::Num2; - case XK_3 : return sf::Key::Num3; - case XK_4 : return sf::Key::Num4; - case XK_5 : return sf::Key::Num5; - case XK_6 : return sf::Key::Num6; - case XK_7 : return sf::Key::Num7; - case XK_8 : return sf::Key::Num8; - case XK_9 : return sf::Key::Num9; - } - return sf::Key::Code(0); -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/X11Window.h b/Source/Plugins/Plugin_VideoOGL/Src/X11Window.h deleted file mode 100644 index 46c5bb8f79..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/X11Window.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _X11WINDOW_H -#define _X11WINDOW_H - -#include "GLWindow.h" -#if defined HAVE_X11 && HAVE_X11 -#include -#include - -#include -#include -#include - -#include -#include - -class X11Window : public GLWindow -{ -public: - int screen; - Window win; - Display *dpy; - GLXContext ctx; - XSetWindowAttributes attr; - Bool fs; - Bool doubleBuffered; - XF86VidModeModeInfo deskMode; - - virtual void SwapBuffers(); - virtual void SetWindowText(const char *text); - virtual bool PeekMessages(); - virtual void Update(); - virtual bool MakeCurrent(); - - static bool valid() { return true; } - ~X11Window(); - X11Window(); - static sf::Key::Code KeysymToSF(KeySym Sym); -private: - void ProcessEvent(XEvent WinEvent); - -}; -#else -class X11Window : public GLWindow -{ -public: - X11Window() {} -}; -#endif -#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp index 486ba4a185..4c5cdfcf8b 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/main.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/main.cpp @@ -22,29 +22,29 @@ 1.1 Display settings -Internal and fullscreen resolution: Since the only internal resolutions allowed are also -fullscreen resolution allowed by the system there is only need for one resolution setting -that applies to both the internal resolution and the fullscreen resolution. -- Apparently no, someone else doesn't agree +Internal and fullscreen resolution: Since the only internal resolutions allowed +are also fullscreen resolution allowed by the system there is only need for one +resolution setting that applies to both the internal resolution and the +fullscreen resolution. - Apparently no, someone else doesn't agree -Todo: Make the internal resolution option apply instantly, currently only the native and 2x option -applies instantly. To do this we need to be able to change the reinitialize FramebufferManager:Init() -while a game is running. +Todo: Make the internal resolution option apply instantly, currently only the +native and 2x option applies instantly. To do this we need to be able to change +the reinitialize FramebufferManager:Init() while a game is running. 1.2 Screenshots -The screenshots should be taken from the internal representation of the picture regardless of -what the current window size is. Since AA and wireframe is applied together with the picture resizing -this rule is not currently applied to AA or wireframe pictures, they are instead taken from whatever -the window size is. +The screenshots should be taken from the internal representation of the picture +regardless of what the current window size is. Since AA and wireframe is +applied together with the picture resizing this rule is not currently applied +to AA or wireframe pictures, they are instead taken from whatever the window +size is. -Todo: Render AA and wireframe to a separate picture used for the screenshot in addition to the one -for display. +Todo: Render AA and wireframe to a separate picture used for the screenshot in +addition to the one for display. 1.3 AA - Make AA apply instantly during gameplay if possible */ @@ -115,12 +115,10 @@ void GetDllInfo (PLUGIN_INFO* _PluginInfo) _PluginInfo->Type = PLUGIN_TYPE_VIDEO; #ifdef DEBUGFAST sprintf(_PluginInfo->Name, "Dolphin OpenGL (DebugFast)"); -#else -#ifndef _DEBUG - sprintf(_PluginInfo->Name, "Dolphin OpenGL"); -#else +#elif defined _DEBUG sprintf(_PluginInfo->Name, "Dolphin OpenGL (Debug)"); -#endif +#else + sprintf(_PluginInfo->Name, "Dolphin OpenGL"); #endif } @@ -151,39 +149,21 @@ wxWindow* GetParentedWxWindow(HWND Parent) } #endif -#if defined(HAVE_WX) && HAVE_WX void DllDebugger(HWND _hParent, bool Show) { - if (Show) - { +#if defined(HAVE_WX) && HAVE_WX + if (Show) { if (!m_DebuggerFrame) m_DebuggerFrame = new GFXDebuggerOGL(NULL); - //m_DebuggerFrame = new GFXDebuggerOGL(GetParentedWxWindow(_hParent)); m_DebuggerFrame->Show(); - } - else - { + } else { if (m_DebuggerFrame) m_DebuggerFrame->Hide(); } -} -#else -void DllDebugger(HWND _hParent, bool Show) { } #endif +} -void DllConfig(HWND _hParent) -{ -#if defined(HAVE_WX) && HAVE_WX - //if (!m_ConfigFrame) -if (allowConfigShow) // Prevent user to show more than 1 config window at same time -{ - m_ConfigFrame = new GFXConfigDialogOGL(GetParentedWxWindow(_hParent)); - - //else if (!m_ConfigFrame->GetParent()->IsShown()) - // m_ConfigFrame->Close(true); - -#if defined(_WIN32) - - +#ifdef _WIN32 +void Win32AddResolutions() { // Search for avaliable resolutions DWORD iModeNum = 0; @@ -199,7 +179,8 @@ if (allowConfigShow) // Prevent user to show more than 1 config window at same t char szBuffer[100]; sprintf(szBuffer, "%dx%d", dmi.dmPelsWidth, dmi.dmPelsHeight); std::string strBuffer(szBuffer); - // Create a check loop to check every pointer of resolutions to see if the res is added or not + // Create a check loop to check every pointer of resolutions to see if + // the res is added or not int b = 0; bool resFound = false; while (b < i && !resFound) @@ -209,7 +190,8 @@ if (allowConfigShow) // Prevent user to show more than 1 config window at same t b++; } // Add the resolution - if (!resFound && i < 100) // don't want to overflow resos array. not likely to happen, but you never know. + if (!resFound && i < 100) // don't want to overflow resos array. not + // likely to happen, but you never know. { resos.push_back(strBuffer); i++; @@ -218,11 +200,11 @@ if (allowConfigShow) // Prevent user to show more than 1 config window at same t } ZeroMemory(&dmi, sizeof(dmi)); } - -#elif defined(HAVE_X11) && HAVE_X11 && defined(HAVE_XXF86VM) && HAVE_XXF86VM - - int glxMajorVersion, glxMinorVersion; - int vidModeMajorVersion, vidModeMinorVersion; +} +#elif defined(HAVE_X11) && HAVE_X11 && defined(HAVE_XXF86VM) && HAVE_XXF86VM +void X11AddResolutions() { + int glxMajorVersion, glxMinorVersion; + int vidModeMajorVersion, vidModeMinorVersion; GLWin.dpy = XOpenDisplay(0); glXQueryVersion(GLWin.dpy, &glxMajorVersion, &glxMinorVersion); XF86VidModeQueryVersion(GLWin.dpy, &vidModeMajorVersion, &vidModeMinorVersion); @@ -244,45 +226,47 @@ if (allowConfigShow) // Prevent user to show more than 1 config window at same t char temp[32]; sprintf(temp,"%dx%d", modes[i]->hdisplay, modes[i]->vdisplay); m_ConfigFrame->AddFSReso(temp); - m_ConfigFrame->AddWindowReso(temp);//Add same to Window ones, since they should be nearly all that's needed - px = modes[i]->hdisplay;//Used to remove repeating from different screen depths + m_ConfigFrame->AddWindowReso(temp);//Add same to Window ones, + //since they should be + //nearly all that's needed + px = modes[i]->hdisplay;//Used to remove repeating from + //different screen depths py = modes[i]->vdisplay; } } } XFree(modes); - +} #elif defined(HAVE_COCOA) && HAVE_COCOA - +void CocaAddResolutions() { + CFArrayRef modes; CFRange range; CFDictionaryRef modesDict; CFNumberRef modeValue; - + int modeWidth; int modeHeight; int modeBpp; int modeIndex; int px = 0, py = 0; - - + + modes = CGDisplayAvailableModes(CGMainDisplayID()); - + range.location = 0; range.length = CFArrayGetCount(modes); - - for (modeIndex=0; modeIndexAddFSReso(temp); @@ -291,27 +275,34 @@ if (allowConfigShow) // Prevent user to show more than 1 config window at same t py = modeHeight; } } +} +#endif + +void DllConfig(HWND _hParent) +{ +#if defined(HAVE_WX) && HAVE_WX +// Prevent user to show more than 1 config window at same time + if (allowConfigShow) { + m_ConfigFrame = new GFXConfigDialogOGL(GetParentedWxWindow(_hParent)); + +#if defined(_WIN32) + Win32AddResolutions(); +#elif defined(HAVE_X11) && HAVE_X11 && defined(HAVE_XXF86VM) && HAVE_XXF86VM + X11AddResolutions(); +#elif defined(HAVE_COCOA) && HAVE_COCOA + CocaAddResolutions(); #endif - // Check if at least one resolution was found. If we don't and the resolution array is empty // CreateGUIControls() will crash because the array is empty. - if (m_ConfigFrame->arrayStringFor_FullscreenCB.size() == 0) - { + if (m_ConfigFrame->arrayStringFor_FullscreenCB.size() == 0) { m_ConfigFrame->AddFSReso(""); m_ConfigFrame->AddWindowReso(""); } - - // Only allow one open at a time - //if (!m_ConfigFrame->IsShown()) - //{ - - allowConfigShow = false; - m_ConfigFrame->CreateGUIControls(); - allowConfigShow = m_ConfigFrame->ShowModal() == 1 ? true : false; -} - //} - //else - // m_ConfigFrame->Hide(); + + allowConfigShow = false; + m_ConfigFrame->CreateGUIControls(); + allowConfigShow = m_ConfigFrame->ShowModal() == 1 ? true : false; + } #endif } @@ -319,10 +310,11 @@ void Initialize(void *init) { frameCount = 0; SVideoInitialize *_pVideoInitialize = (SVideoInitialize*)init; - g_VideoInitialize = *(_pVideoInitialize); // Create a shortcut to _pVideoInitialize that can also update it + // Create a shortcut to _pVideoInitialize that can also update it + g_VideoInitialize = *(_pVideoInitialize); InitXFBConvTables(); + g_Config.Load(); - g_Config.GameIniLoad(); #if defined(HAVE_WX) && HAVE_WX @@ -331,8 +323,7 @@ void Initialize(void *init) wxImage::AddHandler( new wxPNGHandler ); #endif - if (!OpenGL_Create(g_VideoInitialize, 640, 480)) // 640x480 will be the default if all else fails - { + if (!OpenGL_Create(g_VideoInitialize, 640, 480)) { g_VideoInitialize.pLog("Renderer::Create failed\n", TRUE); return; } diff --git a/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.cpp b/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.cpp deleted file mode 100644 index 0cd9e15e04..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.cpp +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (C) 2003 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 "Globals.h" -#include "IniFile.h" -#include "svnrev.h" -#include "Config.h" -#include "Render.h" -#include "nGLUtil.h" - -GLWindow *glWin = NULL; - -void OpenGL_SwapBuffers() -{ - glWin->SwapBuffers(); -} - -void OpenGL_SetWindowText(const char *text) -{ - glWin->SetWindowText(text); -} - -unsigned int Callback_PeekMessages() -{ - return glWin->PeekMessages(); -} - -void UpdateFPSDisplay(const char *text) -{ - char temp[512]; - sprintf(temp, "SVN R%s: GL: %s", SVN_REV_STR, text); - OpenGL_SetWindowText(temp); - -} - -// ======================================================================================= -// Create window. Called from main.cpp -bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int width, int height) -{ - g_VideoInitialize.pPeekMessages = &Callback_PeekMessages; - g_VideoInitialize.pUpdateFPSDisplay = &UpdateFPSDisplay; - - if (strncasecmp(g_Config.iBackend, "sdl", 10) == 0) - glWin = new SDLWindow(); - else if (strncasecmp(g_Config.iBackend, "x11", 10) == 0) - glWin = new X11Window(); - else if (strncasecmp(g_Config.iBackend, "wxgl", 10) == 0) - glWin = new WXGLWindow(); - else if (strncasecmp(g_Config.iBackend, "windows", 10) == 0) - glWin = new Win32Window(); - else - PanicAlert("Invalid backend %s", g_Config.iBackend); - - if (! glWin) - return false; - - glWin->SetEventHandler((EventHandler *)globals->eventHandler); - return true; -} - -bool OpenGL_MakeCurrent() -{ - return glWin->MakeCurrent(); -} - - -// ======================================================================================= -// Update window width, size and etc. Called from Render.cpp and XFB.cpp -// ---------------- -void OpenGL_Update() -{ - glWin->Update(); -} - - -// ======================================================================================= -// Close plugin -// ---------------- -void OpenGL_Shutdown() -{ - delete glWin; -} - -u32 OpenGL_GetWidth() { - return glWin->GetXwin(); -} - -u32 OpenGL_GetHeight() { - return glWin->GetYwin(); -} - -void OpenGL_SetSize(u32 width, u32 height) { - glWin->SetWinSize(width, height); -} - -int OpenGL_GetXoff() { - return glWin->GetXoff(); -} - -int OpenGL_GetYoff() { - return glWin->GetYoff(); -} - -float OpenGL_GetXmax() { - return glWin->GetXmax(); -} - -float OpenGL_GetYmax() { - return glWin->GetYmax(); -} - -void OpenGL_AddBackends(ConfigDialog *frame) { - if(SDLWindow::valid()) - frame->AddRenderBackend("SDL"); - if(X11Window::valid()) - frame->AddRenderBackend("X11"); - if(WXGLWindow::valid()) - frame->AddRenderBackend("WXGL"); - if(Win32Window::valid()) - frame->AddRenderBackend("Windows"); // Not "Win32" because retarded people will ask where "win64" is... -} - -void OpenGL_AddResolutions(ConfigDialog *frame) { - // TODO get resolution iter -} diff --git a/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.h b/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.h deleted file mode 100644 index 46ed6906ce..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/nGLUtil.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (C) 2003 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 _NGLINIT_H -#define _NGLINIT_H - -#include "Config.h" -#include "pluginspecs_video.h" -#include "GUI/ConfigDlg.h" -#include "GLWindow.h" -// backends -#include "SDLWindow.h" -#include "X11Window.h" -#include "WXGLWindow.h" -#include "Win32Window.h" - -#ifndef GL_DEPTH24_STENCIL8_EXT // allows FBOs to support stencils -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif - -#define GL_REPORT_ERROR() { err = glGetError(); if( err != GL_NO_ERROR ) { ERROR_LOG("%s:%d: gl error 0x%x\n", __FILE__, (int)__LINE__, err); HandleGLError(); } } - -#if defined(_DEBUG) || defined(DEBUGFAST) -#define GL_REPORT_ERRORD() { GLenum err = glGetError(); if( err != GL_NO_ERROR ) { ERROR_LOG("%s:%d: gl error 0x%x\n", __FILE__, (int)__LINE__, err); HandleGLError(); } } -#else -#define GL_REPORT_ERRORD() -#endif - -void OpenGL_AddBackends(ConfigDialog *frame); -void OpenGL_AddResolutions(ConfigDialog *frame); - -// TODO old interface removal -bool OpenGL_Create(SVideoInitialize &_VideoInitialize, int _width, int _height); -bool OpenGL_MakeCurrent(); -void OpenGL_SwapBuffers(); -void OpenGL_SetWindowText(const char *text); -void OpenGL_Shutdown(); -void OpenGL_Update(); -u32 OpenGL_GetWidth(); -u32 OpenGL_GetHeight(); -void OpenGL_SetSize(u32 width, u32 height); -int OpenGL_GetXoff(); -int OpenGL_GetYoff(); -float OpenGL_GetXmax(); -float OpenGL_GetYmax(); - -#endif diff --git a/Source/Plugins/Plugin_VideoOGL/Src/nmain.cpp b/Source/Plugins/Plugin_VideoOGL/Src/nmain.cpp deleted file mode 100644 index 2ce28acf0c..0000000000 --- a/Source/Plugins/Plugin_VideoOGL/Src/nmain.cpp +++ /dev/null @@ -1,300 +0,0 @@ -// Copyright (C) 2003 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 "Globals.h" - -#if defined(HAVE_WX) && HAVE_WX -#include "GUI/ConfigDlg.h" -#include "Debugger/Debugger.h" // for the CDebugger class -#endif - -#include "Config.h" -#include "LookUpTables.h" -#include "ImageWrite.h" -#include "Render.h" -#include "nGLUtil.h" -#include "Fifo.h" -#include "OpcodeDecoding.h" -#include "TextureMngr.h" -#include "BPStructs.h" -#include "VertexLoader.h" -#include "VertexLoaderManager.h" -#include "VertexManager.h" -#include "PixelShaderCache.h" -#include "PixelShaderManager.h" -#include "VertexShaderCache.h" -#include "VertexShaderManager.h" -#include "XFB.h" -#include "XFBConvert.h" -#include "TextureConverter.h" - -#include "VideoState.h" - -SVideoInitialize g_VideoInitialize; -PLUGIN_GLOBALS* globals; - - -// Nasty stuff which win32 needs for wxw - -#if defined(_WIN32) && defined(HAVE_WX) && HAVE_WX -HINSTANCE g_hInstance; - -class wxDLLApp : public wxApp -{ - bool OnInit() - { - return true; - } -}; -IMPLEMENT_APP_NO_MAIN(wxDLLApp) - -WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst); - -BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle - DWORD dwReason, // reason called - LPVOID lpvReserved) // reserved -{ - switch (dwReason) - { - case DLL_PROCESS_ATTACH: - { // Use wxInitialize() if you don't want GUI instead of the following 12 lines - wxSetInstance((HINSTANCE)hinstDLL); - int argc = 0; - char **argv = NULL; - wxEntryStart(argc, argv); - if ( !wxTheApp || !wxTheApp->CallOnInit() ) - return FALSE; - } - break; - - case DLL_PROCESS_DETACH: - wxEntryCleanup(); // Use wxUninitialize() if you don't want GUI - break; - default: - break; - } - - g_hInstance = hinstDLL; - return TRUE; -} -#endif - - -/* Create debugging window. There's currently a strange crash that occurs whe a game is loaded - if the OpenGL plugin was loaded before. I'll try to fix that. Currently you may have to - clsoe the window if it has auto started, and then restart it after the dll has loaded - for the purpose of the game. At that point there is no need to use the same dll instance - as the one that is rendering the game. However, that could be done. */ - -#if defined(HAVE_WX) && HAVE_WX -CDebugger *m_frame; -void DllDebugger(HWND _hParent, bool Show) -{ - if(!m_frame && Show) - { - m_frame = new CDebugger(NULL); - m_frame->Show(); - } - else if (m_frame && !Show) - { - if(m_frame->Close()) - m_frame = NULL; - } -} - -void DoDllDebugger(){} -#else -void DllDebugger(HWND _hParent, bool Show) { } -void DoDllDebugger() { } -#endif - - -void GetDllInfo (PLUGIN_INFO* _PluginInfo) -{ - _PluginInfo->Version = 0x0100; - _PluginInfo->Type = PLUGIN_TYPE_VIDEO; -#ifdef DEBUGFAST - sprintf(_PluginInfo->Name, "Dolphin OpenGL (DebugFast)"); -#elif defined _DEBUG - sprintf(_PluginInfo->Name, "Dolphin OpenGL (Debug)"); -#else - sprintf(_PluginInfo->Name, "Dolphin OpenGL"); -#endif -} - -void SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals) { - globals = _pPluginGlobals; -} - -void DllConfig(HWND _hParent) -{ - wxWindow * win = new wxWindow(); -#ifdef _WIN32 - win->SetHWND((WXHWND)_hParent); - win->AdoptAttributesFromHWND(); -#endif - //win->Reparent(wxGetApp().GetTopWindow()); - ConfigDialog *frame = new ConfigDialog(win); - OpenGL_AddBackends(frame); - OpenGL_AddResolutions(frame); - frame->ShowModal(); -} - -void Initialize(void *init) -{ - frameCount = 0; - SVideoInitialize *_pVideoInitialize = (SVideoInitialize*)init; - g_VideoInitialize = *(_pVideoInitialize); // Create a shortcut to _pVideoInitialize that can also update it - - InitLUTs(); - InitXFBConvTables(); - g_Config.Load(); - - if (!OpenGL_Create(g_VideoInitialize, 640, 480)) { //640x480 will be the default if all else fails// - g_VideoInitialize.pLog("Renderer::Create failed\n", TRUE); - return; - } - _pVideoInitialize->pPeekMessages = g_VideoInitialize.pPeekMessages; - _pVideoInitialize->pUpdateFPSDisplay = g_VideoInitialize.pUpdateFPSDisplay; - _pVideoInitialize->pWindowHandle = g_VideoInitialize.pWindowHandle; - - Renderer::AddMessage("Dolphin OpenGL Video Plugin" ,5000); -} - -void DoState(unsigned char **ptr, int mode) { -#ifndef _WIN32 - OpenGL_MakeCurrent(); -#endif - // Clear all caches that touch RAM - TextureMngr::Invalidate(); - // DisplayListManager::Invalidate(); - - VertexLoaderManager::MarkAllDirty(); - - PointerWrap p(ptr, mode); - VideoCommon_DoState(p); - - // Refresh state. - if (mode == PointerWrap::MODE_READ) - BPReload(); -} - -// This is called after Video_Initialize() from the Core -void Video_Prepare(void) -{ - OpenGL_MakeCurrent(); - if (!Renderer::Init()) { - g_VideoInitialize.pLog("Renderer::Create failed\n", TRUE); - PanicAlert("Can't create opengl renderer. You might be missing some required opengl extensions, check the logs for more info"); - exit(1); - } - - TextureMngr::Init(); - - BPInit(); - VertexManager::Init(); - Fifo_Init(); // must be done before OpcodeDecoder_Init() - OpcodeDecoder_Init(); - VertexShaderCache::Init(); - VertexShaderManager::Init(); - PixelShaderCache::Init(); - PixelShaderManager::Init(); - GL_REPORT_ERRORD(); - VertexLoaderManager::Init(); - TextureConverter::Init(); -} - -void Shutdown(void) -{ - TextureConverter::Shutdown(); - VertexLoaderManager::Shutdown(); - VertexShaderCache::Shutdown(); - VertexShaderManager::Shutdown(); - PixelShaderManager::Shutdown(); - PixelShaderCache::Shutdown(); - Fifo_Shutdown(); - VertexManager::Shutdown(); - TextureMngr::Shutdown(); - OpcodeDecoder_Shutdown(); - Renderer::Shutdown(); - OpenGL_Shutdown(); -} - -void Video_Stop(void) -{ - Fifo_Stop(); -} - -void Video_EnterLoop() -{ - Fifo_EnterLoop(g_VideoInitialize); -} - -bool ScreenShot(TCHAR *File) -{ - char str[64]; - int left = 200, top = 15; - sprintf(str, "Dolphin OpenGL"); - - Renderer::ResetGLState(); - Renderer::RenderText(str, left+1, top+1, 0xff000000); - Renderer::RenderText(str, left, top, 0xffc0ffff); - Renderer::RestoreGLState(); - - if (Renderer::SaveRenderTarget(File, 0)) { - char msg[255]; - sprintf(msg, "saved %s\n", File); - Renderer::AddMessage(msg, 500); - return true; - } - return false; -} - -unsigned int Video_Screenshot(TCHAR* _szFilename) -{ - if (ScreenShot(_szFilename)) - return TRUE; - - return FALSE; -} - -void Video_AddMessage(const char* pstr, u32 milliseconds) -{ - Renderer::AddMessage(pstr,milliseconds); -} - -void Video_UpdateXFB(u8* _pXFB, u32 _dwWidth, u32 _dwHeight, s32 _dwYOffset, bool scheduling) -{ - if(g_Config.bUseXFB && XFB_isInit()) - { - if (scheduling) // from CPU in DC without fifo&CP (some 2D homebrews) - { - XFB_SetUpdateArgs(_pXFB, _dwWidth, _dwHeight, _dwYOffset); - g_XFBUpdateRequested = TRUE; - } - else - { - if (_pXFB) // from CPU in SC mode - XFB_Draw(_pXFB, _dwWidth, _dwHeight, _dwYOffset); - else // from GP in DC without fifo&CP (some 2D homebrews) - { - XFB_Draw(); - g_XFBUpdateRequested = FALSE; - } - } - } -}