|
From: Tapio V. <aa...@us...> - 2010-11-06 13:24:29
|
Module: performous
Branch: opengl2
Commit: 1e9ac7e1854b14778cfc5133c17a6f36ff9d66b9
Author: Tapio Vierros <tap...@gm...>
Date: Sat Nov 6 15:23:18 2010 +0200
Preparations for rendering everything to FBO; doesn't work yet though.
---
game/main.cc | 3 +--
game/screen.hh | 6 +++++-
game/screenmanager.cc | 13 ++++++++++++-
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/game/main.cc b/game/main.cc
index f8de5de..a5df358 100644
--- a/game/main.cc
+++ b/game/main.cc
@@ -178,8 +178,7 @@ void mainLoop(std::string const& songlist) {
try {
// Draw
window.blank();
- sm.getCurrentScreen()->draw();
- sm.drawNotifications();
+ sm.drawScreen();
prof("draw");
// Display (and wait until next frame)
window.swap();
diff --git a/game/screen.hh b/game/screen.hh
index 91b663c..b0c053c 100644
--- a/game/screen.hh
+++ b/game/screen.hh
@@ -5,6 +5,7 @@
#include "opengl_text.hh"
#include "video_driver.hh"
#include "dialog.hh"
+#include "fbo.hh"
#include <boost/ptr_container/ptr_map.hpp>
#include <boost/scoped_ptr.hpp>
#include <SDL.h>
@@ -46,6 +47,8 @@ class ScreenManager: public Singleton <ScreenManager> {
void activateScreen(std::string const& name);
/// Does actual switching of screens (if necessary)
void updateScreen();
+ /// Draws the current screen and possible transition effects
+ void drawScreen();
/// Returns pointer to current Screen
Screen* getCurrentScreen() { return currentScreen; };
/// Returns pointer to Screen for given name
@@ -65,7 +68,7 @@ class ScreenManager: public Singleton <ScreenManager> {
bool closeDialog();
/// Returns true if dialog is open
bool isDialogOpen() { return m_dialog; }
- /// Draw dialogs & flash messages in current screen
+ /// Draw dialogs & flash messages, called automatically by drawScreen
void drawNotifications();
/// Sets finished to true
@@ -75,6 +78,7 @@ class ScreenManager: public Singleton <ScreenManager> {
private:
Window& m_window;
+ FBO m_fbo;
bool m_finished;
typedef boost::ptr_map<std::string, Screen> screenmap_t;
screenmap_t screens;
diff --git a/game/screenmanager.cc b/game/screenmanager.cc
index 640a678..f0c721c 100644
--- a/game/screenmanager.cc
+++ b/game/screenmanager.cc
@@ -12,7 +12,7 @@
template<> ScreenManager* Singleton<ScreenManager>::ms_Singleton = NULL;
ScreenManager::ScreenManager(Window& _window):
- m_window(_window), m_finished(false), newScreen(), currentScreen(),
+ m_window(_window), m_fbo(), m_finished(false), newScreen(), currentScreen(),
m_timeToFadeIn(), m_timeToFadeOut(), m_timeToShow(), m_message(),
m_messagePopup(0.0, 1.0), m_textMessage(getThemePath("message_text.svg"), config["graphic/text_lod"].f())
@@ -41,6 +41,17 @@ Screen* ScreenManager::getScreen(std::string const& name) {
}
}
+void ScreenManager::drawScreen() {
+ // FIXME: Rendering using FBO doesn't work
+ {
+ //UseFBO fbo(m_fbo);
+ getCurrentScreen()->draw();
+ drawNotifications();
+ }
+ //m_fbo.getTexture().draw(Dimensions().fixedWidth(1.0));
+}
+
+
void ScreenManager::loading(std::string const& message, float progress) {
// TODO: Create a better one, this is quite ugly
flashMessage(message + " " + boost::lexical_cast<std::string>(int(round(progress*100))) + "%", 0.0f, 1.0f, 1.0f);
|