From 708384a6b1fca22c6352deb79e52422266dc307e Mon Sep 17 00:00:00 2001 From: Bjørn Lindeijer Date: Mon, 18 Apr 2005 15:53:56 +0000 Subject: Ok, of course the biggest problem to solve with OpenGL integration is loading and rendering of images. --- src/being.cpp | 8 +++++--- src/graphics.cpp | 27 +++++++++++++++++++-------- src/gui/gui.cpp | 13 +++++++------ src/gui/gui.h | 2 -- src/gui/setup.cpp | 4 ++-- src/main.cpp | 51 +++++++++++++++++++++++++-------------------------- src/main.h | 1 + 7 files changed, 59 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/being.cpp b/src/being.cpp index d3e51a4d..70259cf3 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -137,8 +137,7 @@ void sort() { } Being::Being(): - speech_time(0), aspd(350), - damage(""), damage_time(0), + damage(""), id(0), job(0), x(0), y(0), destX(0), destY(0), direction(0), type(0), action(0), frame(0), @@ -149,7 +148,10 @@ Being::Being(): text_x(0), text_y(0), hair_style(1), hair_color(1), weapon(0), - showSpeech(false), showDamage(false) + speech_time(0), + damage_time(0), + showSpeech(false), showDamage(false), + aspd(350) { strcpy(name, ""); } diff --git a/src/graphics.cpp b/src/graphics.cpp index 88ba744a..e0763c29 100644 --- a/src/graphics.cpp +++ b/src/graphics.cpp @@ -32,6 +32,16 @@ SDL_Surface *screen; Graphics::Graphics(): mouseCursor(NULL) { + if (useOpenGL) { + // Setup OpenGL + glViewport(0, 0, 800, 600); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); + int gotDoubleBuffer; + SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &gotDoubleBuffer); + logger.log("Using OpenGL %s double buffering.", + (gotDoubleBuffer ? "with" : "without")); + } + #ifdef USE_OPENGL setTargetPlane(800, 600); #else @@ -125,12 +135,13 @@ void Graphics::updateScreen() SDL_GetMouseState(&mouseX, &mouseY); mouseCursor->draw(screen, mouseX - 5, mouseY - 2); -#ifdef USE_OPENGL - glFlush(); - glFinish(); - SDL_GL_SwapBuffers(); - glClear(GL_COLOR_BUFFER_BIT); -#else - SDL_Flip(screen); -#endif + if (useOpenGL) { + glFlush(); + glFinish(); + SDL_GL_SwapBuffers(); + glClear(GL_COLOR_BUFFER_BIT); + } + else { + SDL_Flip(screen); + } } diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 436a5a1a..6a57f214 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -45,12 +45,13 @@ Gui::Gui(Graphics *graphics) setInput(guiInput); // Set image loader -#ifndef USE_OPENGL - imageLoader = new gcn::SDLImageLoader(); -#else - hostImageLoader = new gcn::SDLImageLoader(); - imageLoader = new gcn::OpenGLImageLoader(hostImageLoader); -#endif + if (useOpenGL) { + hostImageLoader = new gcn::SDLImageLoader(); + imageLoader = new gcn::OpenGLImageLoader(hostImageLoader); + } + else { + imageLoader = new gcn::SDLImageLoader(); + } gcn::Image::setImageLoader(imageLoader); // Initialize top GUI widget diff --git a/src/gui/gui.h b/src/gui/gui.h index 66f7cb0f..f2d48c77 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -69,9 +69,7 @@ class Gui : public gcn::Gui, public gcn::MouseListener private: gcn::Gui *gui; /**< The GUI system */ -#ifdef USE_OPENGL gcn::ImageLoader *hostImageLoader; /**< For loading images in GL */ -#endif gcn::ImageLoader *imageLoader; /**< For loading images */ gcn::ImageFont *guiFont; /**< The global GUI font */ diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp index 87d4ef42..42b770f9 100644 --- a/src/gui/setup.cpp +++ b/src/gui/setup.cpp @@ -188,12 +188,12 @@ void Setup::action(const std::string &eventId) if (eventId == "sfx") { config.setValue("sfxVolume", (int)sfxSlider->getValue()); - sound.setSfxVolume(sfxSlider->getValue()); + sound.setSfxVolume((int)sfxSlider->getValue()); } else if (eventId == "music") { config.setValue("musicVolume", (int)musicSlider->getValue()); - sound.setMusicVolume(musicSlider->getValue()); + sound.setMusicVolume((int)musicSlider->getValue()); } else if (eventId == "guialpha") { diff --git a/src/main.cpp b/src/main.cpp index da90e701..9cbc2871 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -67,6 +67,7 @@ unsigned char state; unsigned char screen_mode; char *dir = NULL; int displayFlags, screenW, screenH, bitDepth; +bool useOpenGL = false; Sound sound; Music *bgm; @@ -170,6 +171,7 @@ void init_engine() config.setValue("host", "www.lindeijer.nl"); config.setValue("port", 6901); config.setValue("hwaccel", 0); + config.setValue("opengl", 0); config.setValue("screen", 0); config.setValue("sound", 1); config.setValue("guialpha", 0.8f); @@ -193,29 +195,36 @@ void init_engine() SDL_WM_SetCaption("The Mana World", NULL); +#ifdef USE_OPENGL + useOpenGL = true; +#else + useOpenGL = false; +#endif displayFlags = SDL_ANYFORMAT; if ((int)config.getValue("screen", 0) == 1) { displayFlags |= SDL_FULLSCREEN; } -#ifndef USE_OPENGL - if ((int)config.getValue("hwaccel", 0)) { - logger.log("Attempting to use hardware acceleration."); - displayFlags |= SDL_HWSURFACE | SDL_DOUBLEBUF; + + if (useOpenGL) { + displayFlags |= SDL_OPENGL; + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); } else { - displayFlags |= SDL_SWSURFACE; + if ((int)config.getValue("hwaccel", 0)) { + logger.log("Attempting to use hardware acceleration."); + displayFlags |= SDL_HWSURFACE | SDL_DOUBLEBUF; + } + else { + displayFlags |= SDL_SWSURFACE; + } } -#else - displayFlags |= SDL_OPENGL; - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); -#endif // TODO: the following variables should be loaded from config file - screenW = 800; - screenH = 600; - bitDepth = 16; + screenW = (int)config.getValue("screenwidth", 800); + screenH = (int)config.getValue("screenheight", 600); + bitDepth = (int)config.getValue("bitdepth", 16); SDL_WM_SetIcon(IMG_Load("data/icons/tmw-icon.png"), NULL); @@ -235,16 +244,6 @@ void init_engine() logger.log("Using video driver: unkown"); } -#ifdef USE_OPENGL - // Setup OpenGL - glViewport(0, 0, 800, 600); - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - int gotDoubleBuffer; - SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &gotDoubleBuffer); - logger.log("OpenGL is %s double buffering.", - (gotDoubleBuffer ? "using" : "not using")); -#endif - const SDL_VideoInfo *vi = SDL_GetVideoInfo(); logger.log("Possible to create hardware surfaces: %s", @@ -291,13 +290,13 @@ void init_engine() gui = new Gui(graphics); state = LOGIN; - // initialize sound-engine and start playing intro-theme /-kth5 + // Initialize sound engine try { if (config.getValue("sound", 0) == 1) { sound.init(); - } - sound.setSfxVolume(config.getValue("sfxVolume", 100)); - sound.setMusicVolume(config.getValue("musicVolume", 60)); + } + sound.setSfxVolume(config.getValue("sfxVolume", 100)); + sound.setMusicVolume(config.getValue("musicVolume", 60)); } catch (const char *err) { state = ERROR; diff --git a/src/main.h b/src/main.h index 8b77db97..d60e400a 100644 --- a/src/main.h +++ b/src/main.h @@ -103,5 +103,6 @@ extern Sound sound; extern Map *tiledMap; extern Logger logger; extern int screenW, screenH, bitDepth, displayFlags; +extern bool useOpenGL; #endif -- cgit v1.2.3-70-g09d2