2008-12-18 10:52:06 +00:00
|
|
|
#include "WXGLWindow.h"
|
|
|
|
|
|
|
|
void WXGLWindow::SwapBuffers() {
|
|
|
|
glCanvas->SwapBuffers();
|
|
|
|
}
|
|
|
|
|
|
|
|
void WXGLWindow::SetWindowText(const char *text) {
|
|
|
|
frame->SetTitle(wxString::FromAscii(text));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WXGLWindow::PeekMessages() {
|
|
|
|
// TODO implmenent
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void WXGLWindow::Update() {
|
|
|
|
float FactorW = 640.0f / (float)GetWidth();
|
|
|
|
float FactorH = 480.0f / (float)GetHeight();
|
|
|
|
float Max = (FactorW < FactorH) ? FactorH : FactorW;
|
|
|
|
//AR = (float)nBackbufferWidth / (float)nBackbufferHeight;
|
|
|
|
|
2008-12-21 21:02:43 +00:00
|
|
|
if(g_Config.bStretchToFit) {
|
|
|
|
SetMax(1,1);
|
2008-12-20 22:18:52 +00:00
|
|
|
SetOffset(0,0);
|
2008-12-18 10:52:06 +00:00
|
|
|
} else {
|
2008-12-21 21:02:43 +00:00
|
|
|
SetMax(1.0f / Max, 1.0f / Max);
|
|
|
|
SetOffset((int)((GetWidth() - (640 * GetXmax())) / 2),
|
|
|
|
(int)((GetHeight() - (480 * GetYmax())) / 2));
|
2008-12-18 10:52:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool WXGLWindow::MakeCurrent() {
|
|
|
|
glCanvas->SetCurrent(*glCtxt);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
WXGLWindow::~WXGLWindow() {
|
|
|
|
delete glCanvas;
|
|
|
|
delete frame;
|
|
|
|
}
|
|
|
|
|
|
|
|
WXGLWindow::WXGLWindow(int _iwidth, int _iheight) {
|
|
|
|
int _twidth, _theight;
|
|
|
|
if(g_Config.bFullscreen) {
|
|
|
|
if(strlen(g_Config.iFSResolution) > 1) {
|
|
|
|
sscanf(g_Config.iFSResolution, "%dx%d", &_twidth, &_theight);
|
|
|
|
} else {// No full screen reso set, fall back to default reso
|
|
|
|
_twidth = _iwidth;
|
|
|
|
_theight = _iheight;
|
|
|
|
}
|
|
|
|
} else {// Going Windowed
|
|
|
|
if(strlen(g_Config.iWindowedRes) > 1) {
|
|
|
|
sscanf(g_Config.iWindowedRes, "%dx%d", &_twidth, &_theight);
|
|
|
|
} else {// No Window reso set, fall back to default
|
|
|
|
_twidth = _iwidth;
|
|
|
|
_theight = _iheight;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SetSize(_iwidth, _theight);
|
|
|
|
|
|
|
|
float FactorW = 640.0f / (float)_twidth;
|
|
|
|
float FactorH = 480.0f / (float)_theight;
|
|
|
|
float Max = (FactorW < FactorH) ? FactorH : FactorW;
|
|
|
|
|
2008-12-21 21:02:43 +00:00
|
|
|
if(g_Config.bStretchToFit) {
|
|
|
|
SetMax(1.0f / FactorW, 1.0f / FactorH);
|
2008-12-20 22:18:52 +00:00
|
|
|
SetOffset(0,0);
|
2008-12-18 10:52:06 +00:00
|
|
|
} else {
|
2008-12-21 21:02:43 +00:00
|
|
|
SetMax(1.0f / Max, 1.0f / Max);
|
|
|
|
SetOffset((int)((_twidth - (640 * GetXmax())) / 2),
|
|
|
|
(int)((_theight - (480 * GetYmax())) / 2));
|
2008-12-18 10:52:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int args[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0};
|
|
|
|
|
|
|
|
wxSize size(GetWidth(), GetHeight());
|
|
|
|
if (!g_Config.renderToMainframe ||
|
|
|
|
g_VideoInitialize.pWindowHandle == NULL) {
|
|
|
|
frame = new wxFrame((wxWindow *)g_VideoInitialize.pWindowHandle,
|
|
|
|
-1, _("Dolphin"), wxPoint(0,0), size);
|
|
|
|
} else {
|
|
|
|
frame = new wxFrame((wxWindow *)NULL,
|
|
|
|
-1, _("Dolphin"), wxPoint(0,0), size);
|
|
|
|
}
|
|
|
|
glCanvas = new wxGLCanvas(frame, wxID_ANY, args,
|
|
|
|
wxPoint(0,0), size, wxSUNKEN_BORDER);
|
|
|
|
glCtxt = new wxGLContext(glCanvas);
|
|
|
|
|
|
|
|
frame->Show(TRUE);
|
|
|
|
glCanvas->Show(TRUE);
|
|
|
|
|
|
|
|
glCanvas->SetCurrent(*glCtxt);
|
|
|
|
}
|
|
|
|
|