|
From: Tapio V. <aa...@us...> - 2010-11-08 22:24:39
|
Module: performous
Branch: opengl2
Commit: f044d768ca78479da8bbf55459ed7bcc4374ea2d
Author: Tapio Vierros <tap...@gm...>
Date: Sun Nov 7 23:22:28 2010 +0200
No more static Shaders.
---
game/3dobject.cc | 2 --
game/3dobject.hh | 3 ---
game/dancegraph.cc | 7 +++----
game/dancegraph.hh | 3 ---
game/glshader.cc | 13 -------------
game/glshader.hh | 4 ----
game/guitargraph.cc | 5 +++++
game/instrumentgraph.hh | 4 ++++
game/screen_intro.cc | 4 ++--
game/theme.cc | 5 ++---
game/theme.hh | 2 +-
game/video_driver.cc | 4 +---
game/video_driver.hh | 3 +--
13 files changed, 19 insertions(+), 40 deletions(-)
diff --git a/game/3dobject.cc b/game/3dobject.cc
index 0b0b1f6..c3b4418 100644
--- a/game/3dobject.cc
+++ b/game/3dobject.cc
@@ -24,8 +24,6 @@ namespace {
}
}
-boost::scoped_ptr<Shader> Object3d::shader;
-
/// Load a Wavefront .obj file and possibly scale it also
void Object3d::loadWavefrontObj(std::string filepath, float scale) {
int linenumber = 0;
diff --git a/game/3dobject.hh b/game/3dobject.hh
index 834cb28..ef99f11 100644
--- a/game/3dobject.hh
+++ b/game/3dobject.hh
@@ -70,7 +70,6 @@ class Object3d: boost::noncopyable {
glutil::PushMatrix pm;
glTranslatef(x, y, z); // Move to position
if (s != 1.0) glScalef(s,s,s); // Scale if needed
- UseShader objectShader(*shader); // Switch shader
if (m_texture) {
UseTexture tex(*m_texture);
drawVBO();
@@ -78,6 +77,4 @@ class Object3d: boost::noncopyable {
drawVBO();
}
}
-
- static boost::scoped_ptr<Shader> shader; ///< shader used for 3d objects
};
diff --git a/game/dancegraph.cc b/game/dancegraph.cc
index 2afc030..f37ed39 100644
--- a/game/dancegraph.cc
+++ b/game/dancegraph.cc
@@ -78,8 +78,6 @@ namespace {
}
-boost::scoped_ptr<Shader> DanceGraph::shader_note;
-
/// Constructor
DanceGraph::DanceGraph(Audio& audio, Song const& song):
InstrumentGraph(audio, song, input::DANCEPAD),
@@ -92,6 +90,7 @@ DanceGraph::DanceGraph(Audio& audio, Song const& song):
m_flow_direction(1),
m_insideStop()
{
+ m_shader_note.reset(new Shader(getThemePath("shaders/dancenote.vert"), getThemePath("shaders/dancenote.frag")));
// Initialize some arrays
for (size_t i = 0; i < max_panels; i++) {
m_activeNotes[i] = m_notes.end();
@@ -428,7 +427,7 @@ void DanceGraph::draw(double time) {
// Arrows on cursor
{
- UseShader us(*DanceGraph::shader_note);
+ UseShader us(*m_shader_note);
us().setUniform("clock", float(time))
.setUniform("noteType", 0)
.setUniform("scale", getScale());
@@ -491,7 +490,7 @@ void DanceGraph::drawNote(DanceNote& note, double time) {
double glow = note.hitAnim.get();
{
- UseShader us(*DanceGraph::shader_note);
+ UseShader us(*m_shader_note);
us().setUniform("hitAnim", float(glow))
.setUniform("clock", float(time))
.setUniform("scale", getScale());
diff --git a/game/dancegraph.hh b/game/dancegraph.hh
index f229462..5753703 100644
--- a/game/dancegraph.hh
+++ b/game/dancegraph.hh
@@ -37,9 +37,6 @@ class DanceGraph: public InstrumentGraph {
void changeTrack(int dir = 1);
void changeDifficulty(int dir = 1);
- // Shaders
- static boost::scoped_ptr<Shader> shader_note; /// note/arrow/mine etc. shader
-
private:
// Difficulty & mode selection
enum DanceStep { STEP_LEFT, STEP_DOWN, STEP_UP, STEP_RIGHT };
diff --git a/game/glshader.cc b/game/glshader.cc
index 0297beb..69f3928 100644
--- a/game/glshader.cc
+++ b/game/glshader.cc
@@ -1,10 +1,5 @@
#include "glshader.hh"
#include "glutil.hh"
-#include "video_driver.hh"
-#include "3dobject.hh"
-#include "theme.hh"
-#include "fs.hh"
-#include "dancegraph.hh"
#include <fstream>
#include <stdexcept>
@@ -129,11 +124,3 @@ GLint Shader::operator[](const std::string& uniform) {
it->second = glGetUniformLocation(program, uniform.c_str());
return it->second;
}
-
-
-void loadShaders() {
- Window::shader.reset(new Shader(getThemePath("shaders/core.vert"), getThemePath("shaders/core.frag"), true));
- Object3d::shader.reset(new Shader(getThemePath("shaders/3dobject.vert"), getThemePath("shaders/3dobject.frag")));
- ThemeIntro::shader.reset(new Shader(getThemePath("shaders/intro.vert"), getThemePath("shaders/intro.frag")));
- DanceGraph::shader_note.reset(new Shader(getThemePath("shaders/dancenote.vert"), getThemePath("shaders/dancenote.frag")));
-}
diff --git a/game/glshader.hh b/game/glshader.hh
index 2a4e890..73e0a11 100644
--- a/game/glshader.hh
+++ b/game/glshader.hh
@@ -88,7 +88,3 @@ struct UseShader {
Shader& m_shader;
GLint m_old;
};
-
-
-/** Load shaders. */
-void loadShaders();
diff --git a/game/guitargraph.cc b/game/guitargraph.cc
index ad04389..3ee2b9f 100644
--- a/game/guitargraph.cc
+++ b/game/guitargraph.cc
@@ -89,6 +89,7 @@ GuitarGraph::GuitarGraph(Audio& audio, Song const& song, bool drums, int number,
m_practHold(false),
m_whammy(0)
{
+ m_shader_note.reset(new Shader(getThemePath("shaders/3dobject.vert"), getThemePath("shaders/3dobject.frag")));
// Copy all tracks of supported types (either drums or non-drums) to m_instrumentTracks
for (InstrumentTracks::const_iterator it = m_song.instrumentTracks.begin(); it != m_song.instrumentTracks.end(); ++it) {
std::string index = it->first;
@@ -1039,6 +1040,7 @@ void GuitarGraph::drawNote(int fret, Color color, float tBeg, float tEnd, float
color.a = clamp(time2a(tBeg)*2.0f,0.0f,1.0f);
{
glutil::Color c(color);
+ UseShader us(*m_shader_note); // Switch shader
m_fretObj.draw(x, y, 0.0f);
}
y -= fretWid;
@@ -1077,12 +1079,14 @@ void GuitarGraph::drawNote(int fret, Color color, float tBeg, float tEnd, float
color.a = s;
{
glutil::Color c(color);
+ UseShader us(*m_shader_note); // Switch shader
m_fretObj.draw(x, yBeg, 0.0f, s);
}
} else {
color.a = clamp(time2a(tBeg)*2.0f,0.0f,1.0f);
{
glutil::Color c(color);
+ UseShader us(*m_shader_note); // Switch shader
m_fretObj.draw(x, yBeg, 0.0f);
}
}
@@ -1101,6 +1105,7 @@ void GuitarGraph::drawNote(int fret, Color color, float tBeg, float tEnd, float
if (m_use3d) { // 3D
float s = 1.0 - hitAnim;
glutil::Color c(Color(l, l, l, s));
+ UseShader us(*m_shader_note); // Switch shader
m_tappableObj.draw(x, yBeg, 0.0f, s);
} else { // 2D
glutil::Color c(Color(l, l, l));
diff --git a/game/instrumentgraph.hh b/game/instrumentgraph.hh
index 7b6fd77..0c6e050 100644
--- a/game/instrumentgraph.hh
+++ b/game/instrumentgraph.hh
@@ -13,6 +13,7 @@
#include "screen.hh"
#include "fs.hh"
#include "theme.hh"
+#include "glshader.hh"
/// Represents popup messages
@@ -135,6 +136,9 @@ class InstrumentGraph {
boost::scoped_ptr<SvgTxtThemeSimple> m_popupText;
boost::scoped_ptr<ThemeInstrumentMenu> m_menuTheme;
+ // Shaders
+ boost::scoped_ptr<Shader> m_shader_note;
+
// Dynamic stuff for join menu
ConfigItem m_selectedTrack; /// menu modifies this to select track
ConfigItem m_selectedDifficulty; /// menu modifies this to select difficulty
diff --git a/game/screen_intro.cc b/game/screen_intro.cc
index 283e95b..69b8947 100644
--- a/game/screen_intro.cc
+++ b/game/screen_intro.cc
@@ -114,9 +114,9 @@ void ScreenIntro::draw_menu_options() {
void ScreenIntro::draw() {
{
- UseShader s(*ThemeIntro::shader);
+ UseShader us(*theme->bg_shader);
float anim = std::abs((((SDL_GetTicks() % 10000) / 10000.f) - 0.5f) * 2.0f);
- s().setUniform("anim", anim);
+ us().setUniform("anim", anim);
theme->bg.draw();
}
if (m_menu.current().image) m_menu.current().image->draw();
diff --git a/game/theme.cc b/game/theme.cc
index b07051d..db4e086 100644
--- a/game/theme.cc
+++ b/game/theme.cc
@@ -44,8 +44,6 @@ ThemeAudioDevices::ThemeAudioDevices():
comment_bg(getThemePath("mainmenu_comment_bg.svg"))
{}
-boost::scoped_ptr<Shader> ThemeIntro::shader;
-
ThemeIntro::ThemeIntro():
Theme(getThemePath("intro_bg.svg")),
back_h(getThemePath("mainmenu_back_highlight.svg")),
@@ -54,7 +52,8 @@ ThemeIntro::ThemeIntro():
comment(getThemePath("mainmenu_comment.svg"), config["graphic/text_lod"].f()),
short_comment(getThemePath("mainmenu_short_comment.svg"), config["graphic/text_lod"].f()),
comment_bg(getThemePath("mainmenu_comment_bg.svg")),
- short_comment_bg(getThemePath("mainmenu_scomment_bg.svg"))
+ short_comment_bg(getThemePath("mainmenu_scomment_bg.svg")),
+ bg_shader(new Shader(getThemePath("shaders/intro.vert"), getThemePath("shaders/intro.frag")))
{
back_h.dimensions.fixedHeight(0.08f);
}
diff --git a/game/theme.hh b/game/theme.hh
index ac9bd48..e386564 100644
--- a/game/theme.hh
+++ b/game/theme.hh
@@ -95,7 +95,7 @@ public:
/// configuration comment background (short tip)
Surface short_comment_bg;
/// Custom background shader
- static boost::scoped_ptr<Shader> shader;
+ boost::scoped_ptr<Shader> bg_shader;
};
/// theme for instrument menu
diff --git a/game/video_driver.cc b/game/video_driver.cc
index 91bdb1e..c501639 100644
--- a/game/video_driver.cc
+++ b/game/video_driver.cc
@@ -36,8 +36,6 @@ namespace {
unsigned int screenW() { return s_width; }
unsigned int screenH() { return s_height; }
-boost::scoped_ptr<Shader> Window::shader;
-
Window::Window(unsigned int width, unsigned int height, bool fs): m_windowW(width), m_windowH(height), m_fullscreen(fs) {
std::atexit(SDL_Quit);
if( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) == -1 ) throw std::runtime_error("SDL_Init failed");
@@ -63,7 +61,7 @@ Window::Window(unsigned int width, unsigned int height, bool fs): m_windowW(widt
//std::clog << "video/info: GL_EXTENSIONS: " << glGetString(GL_EXTENSIONS) << std::endl;
input::SDL::init(); // Joysticks etc.
- loadShaders(); // Shaders
+ m_shader.reset(new Shader(getThemePath("shaders/core.vert"), getThemePath("shaders/core.frag"), true));
}
Window::~Window() { }
diff --git a/game/video_driver.hh b/game/video_driver.hh
index 3dc3033..79c24c9 100644
--- a/game/video_driver.hh
+++ b/game/video_driver.hh
@@ -39,12 +39,11 @@ class Window {
/// take a screenshot
void screenshot();
- static boost::scoped_ptr<Shader> shader; ///< core shader used for general drawing
-
private:
SDL_Surface* screen;
unsigned int m_windowW, m_windowH;
unsigned int m_fsW, m_fsH;
bool m_fullscreen;
+ boost::scoped_ptr<Shader> m_shader; ///< core shader used for general drawing
};
|