2008-12-18 10:30:20 +00:00
|
|
|
#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();
|
2008-12-22 22:24:59 +00:00
|
|
|
if (!surface) {
|
|
|
|
PanicAlert("Can't ge t surface to update");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2009-01-06 20:54:47 +00:00
|
|
|
// SetSize(surface->w, surface->h);
|
|
|
|
updateDim();
|
2008-12-22 22:24:59 +00:00
|
|
|
|
2008-12-18 10:30:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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) {
|
2008-12-21 21:02:43 +00:00
|
|
|
PanicAlert("Couldn't get video info");
|
2008-12-18 10:30:20 +00:00
|
|
|
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?
|
2009-01-06 20:54:47 +00:00
|
|
|
SDL_Surface *screen = SDL_SetVideoMode(GetXwin(), GetYwin(),
|
2008-12-18 10:30:20 +00:00
|
|
|
0, videoFlags);
|
|
|
|
if (!screen) {
|
2008-12-21 21:02:43 +00:00
|
|
|
PanicAlert("Couldn't set video mode");
|
2008-12-18 10:30:20 +00:00
|
|
|
SDL_Quit();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
SDLWindow::~SDLWindow() {
|
|
|
|
SDL_Quit();
|
|
|
|
}
|
|
|
|
|
2009-01-06 20:54:47 +00:00
|
|
|
SDLWindow::SDLWindow() : GLWindow() {
|
2008-12-18 10:30:20 +00:00
|
|
|
|
|
|
|
//init sdl video
|
|
|
|
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
|
2008-12-22 10:47:37 +00:00
|
|
|
PanicAlert("Failed to init SDL: %s", SDL_GetError());
|
2008-12-18 10:30:20 +00:00
|
|
|
SDL_Quit();
|
|
|
|
// return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
//setup ogl to use double buffering
|
|
|
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
|
|
|
|
}
|