diff options
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/render.cc | 18 | ||||
| -rw-r--r-- | src/render/text.cc | 90 | ||||
| -rw-r--r-- | src/render/text.h | 25 | ||||
| -rw-r--r-- | src/render/textures.cc | 21 | ||||
| -rw-r--r-- | src/render/textures.h | 13 | 
5 files changed, 132 insertions, 35 deletions
diff --git a/src/render/render.cc b/src/render/render.cc index 8c4f0fb..e602673 100644 --- a/src/render/render.cc +++ b/src/render/render.cc @@ -56,13 +56,11 @@ bool texture(const char *filename, size_t id)  void init()   { -	con_print << "Initializing renderer..." << std::endl; +	con_print << "^BInitializing renderer..." << std::endl; -	con_print << "  renderer   " << gl::renderer() << std::endl; -	con_print << "  vendor     " << gl::vendor() << std::endl; -	con_print << "  version    " << gl::version() << std::endl; - -	Textures::init(); +	con_print << "  renderer   ^B" << gl::renderer() << std::endl; +	con_print << "  vendor     ^B" << gl::vendor() << std::endl; +	con_print << "  version    ^B" << gl::version() << std::endl;  	// size of the vertex array in megabytes  	r_arraysize = core::Cvar::get("r_arraysize", 0.0f , core::Cvar::Archive); @@ -81,11 +79,17 @@ void init()  	r_wireframe = core::Cvar::get("r_wireframe", "0", core::Cvar::Archive);  	r_wireframe->set_info("[bool] render wireframe"); + +	Textures::init(); + +	Text::init();  }  void shutdown()  { -	con_print << "Shutting down renderer..." << std::endl; +	con_print << "^BShutting down renderer..." << std::endl; + +	Text::shutdown();  	Textures::shutdown(); diff --git a/src/render/text.cc b/src/render/text.cc index 668f4ec..7c1ae8e 100644 --- a/src/render/text.cc +++ b/src/render/text.cc @@ -1,18 +1,83 @@  /*     render/text.cc -   This file is part of the Osirion project and is distributed under  -   the terms of the GNU General Public License version 2  +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2  */ +#include "auxiliary/functions.h"  #include "render/text.h"  #include "render/textures.h"  #include "sys/sys.h" -namespace render { +namespace render +{  float Text::text_fontwidth = 16.0f;  float Text::text_fontheight = 24.0f; +math::Color * Text::base_color[10]; +math::Color * Text::core_color[26]; + +void Text::init() +{ +	// base colors +	// Black=0, Red=1, Green=2, Yellow=3, Blue=4, Cyan=5, Magenta=6, White=7 +	base_color[0] = new math::Color(0, 0, 0); +	base_color[1] = new math::Color(1, 0, 0); +	base_color[2] = new math::Color(0, 1, 0); +	base_color[3] = new math::Color(1, 1, 0); +	base_color[4] = new math::Color(0, 0, 1); +	base_color[5] = new math::Color(0, 1, 1); +	base_color[6] = new math::Color(1, 0, 1); +	base_color[7] = new math::Color(1, 1, 1); + +	for (size_t i=0; i< 26; i++) { +		core_color[i] = new math::Color(.7, .7, .7); +	} + +	// N - normal color  +	core_color[(size_t)('N'-'A')]->assign(.7, .7, .7); +	// D - Debug color +	core_color[(size_t)('D'-'A')]->assign(.6, .6, .6); +	// B - bold color +	core_color[(size_t)('B'-'A')]->assign(1, 1, 1); +	// W - warning color +	core_color[(size_t)('W'-'A')]->assign(1, 1, 0); +	// R - Error color +	core_color[(size_t)('R'-'A')]->assign(1, 0, 0); +	// F - Fancy color +	core_color[(size_t)('F'-'A')]->assign(0, 1, 0); +} + +void Text::shutdown() +{ +	for (size_t i=0; i< 7; i++) { +		delete base_color[i]; +		base_color[i] = 0; +	} + +	for (size_t i=0; i< 26; i++) { +		delete core_color[i]; +		core_color[i] = 0; +	} +} + +void Text::setcolor(const char color) +{ +	if (('A' <= color) && (color <= 'Z')) { +		gl::color(*core_color[(size_t) (color - 'A')]); +	}  + +	else if (('0' <= color) && (color <= '9')) { +		gl::color(*base_color[(size_t) (color - '0')]); +	} + +	else { +		gl::color(1, 1, 1); +	} + +} +  void Text::setfont(const char *texture, float width, float height)  {  	Textures::bind(texture, false); @@ -20,6 +85,7 @@ void Text::setfont(const char *texture, float width, float height)  	text_fontheight = height;  } +  void Text::draw(float x, float y, const char ascii)  {  	if (ascii != ' ') { @@ -28,9 +94,9 @@ void Text::draw(float x, float y, const char ascii)  		float frow = row * 0.0625f;  		float fcol = col * 0.0625f; -		 +  		gl::begin(gl::Quads); -		 +  		glTexCoord2f(fcol, frow);  		gl::vertex(x,y,1); @@ -52,13 +118,21 @@ void Text::draw(float x, float y, const char *text)  {  	const char *c = text;  	while (*c) { -		draw(x, y, *c); +		if (aux::is_base_color_code(c)) { +			c++; +			gl::color(*base_color[ (size_t)(*c - '0')]); +		} else if (aux::is_core_color_code(c)) { +			c++; +			gl::color(*core_color[ (size_t)(*c - 'A')]); +		} else { +			draw(x, y, *c); +			x += text_fontwidth; +		}  		c++; -		x += text_fontwidth;  	}  } -void Text::draw(float x, float y, std::stringstream & textstream)  +void Text::draw(float x, float y, std::stringstream & textstream)  {  	char line[MAXCMDSIZE];  	while (textstream.getline(line, MAXCMDSIZE-1)) { diff --git a/src/render/text.h b/src/render/text.h index 47d88fd..5cf18ea 100644 --- a/src/render/text.h +++ b/src/render/text.h @@ -1,7 +1,7 @@  /*     render/text.h -   This file is part of the Osirion project and is distributed under  -   the terms of the GNU General Public License version 2  +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2  */  #ifndef __INCLUDED_RENDER_TEXT_H__ @@ -10,10 +10,19 @@  #include <string>  #include <sstream> -namespace render { +#include "math/color.h" -class Text { +namespace render +{ + +class Text +{  public: + +	static void init(); + +	static void shutdown(); +  	/// draw a text string  	static void draw(float x, float y, const std::string & text); @@ -31,6 +40,9 @@ public:  	/// set the font  	static void setfont(const char *texture, float width, float height); +	 +	/// set the color +	static void setcolor(const char color);  	/// current font width  	static inline float fontwidth() { return text_fontwidth; } @@ -38,6 +50,11 @@ public:  	/// current font height  	static inline float fontheight() { return text_fontheight; } +	enum Color {Black=0, Red=1, Green=2, Yellow=3, Blue=4, Cyan=5, Magenta=6, White=7}; + +	static math::Color * base_color[10]; +	static math::Color * core_color[26]; +  private:  	static float text_fontwidth;  	static float text_fontheight; diff --git a/src/render/textures.cc b/src/render/textures.cc index 8dac3a3..cfd627c 100644 --- a/src/render/textures.cc +++ b/src/render/textures.cc @@ -1,7 +1,7 @@  /*     render/textures.cc -   This file is part of the Osirion project and is distributed under  -   the terms of the GNU General Public License version 2  +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2  */ @@ -13,7 +13,8 @@  #include "sys/sys.h"  #include "core/application.h" -namespace render { +namespace render +{  std::map<std::string, size_t> Textures::registry;  size_t Textures::index = 0; @@ -22,7 +23,7 @@ GLuint Textures::textures[MAXTEXTURES];  void Textures::init()  {  	clear(); -	con_print << "Loading textures..." << std::endl; +	con_print << "^BLoading textures..." << std::endl;  	// "no texture" bitmap  	load("textures/common/notex"); @@ -44,7 +45,7 @@ void Textures::init()  	// crosshairs  	load("bitmaps/crosshair"); -	 +  	// light flares  	load("bitmaps/fx/flare00");  	load("bitmaps/fx/flare01"); @@ -72,7 +73,7 @@ size_t Textures::load(std::string name, bool filter)  	if (it != registry.end())  		return (*it).second; -	// try the tga version  +	// try the tga version  	std::string filename(name);  	filename.append(".tga");  	Image *image = TGA::load(filename.c_str()); @@ -101,7 +102,7 @@ size_t Textures::load(std::string name, bool filter)  		texture_type = GL_RGB;  	gluBuild2DMipmaps(GL_TEXTURE_2D, image->channels(), -		image->width(), image->height(), texture_type, GL_UNSIGNED_BYTE, image->data()); +	                  image->width(), image->height(), texture_type, GL_UNSIGNED_BYTE, image->data());  	set_filter(filter); @@ -153,10 +154,10 @@ void Textures::set_filter(bool filter)  {  	if (filter) {  		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); -		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);	 +		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);  	} else {  		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); -		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);	 -	} +		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);  	}  } +} diff --git a/src/render/textures.h b/src/render/textures.h index 12873ef..43e312d 100644 --- a/src/render/textures.h +++ b/src/render/textures.h @@ -1,7 +1,7 @@  /*     render/textures.h -   This file is part of the Osirion project and is distributed under  -   the terms of the GNU General Public License version 2  +   This file is part of the Osirion project and is distributed under +   the terms of the GNU General Public License version 2  */  #ifndef __INCLUDED_RENDER_TEXTURES_H__ @@ -12,11 +12,12 @@  #include "render/gl.h" -namespace render { +namespace render +{  const size_t MAXTEXTURES = 256; -/// Texture managment  +/// Texture managment  class Textures  {  public: @@ -27,12 +28,12 @@ public:  	static void shutdown();  	/// Load a texture -	/** Returns 0 on failure, and the texture index on success  +	/** Returns 0 on failure, and the texture index on success  	 */  	static size_t load(std::string name, bool filter = true);  	/// bind a texture for OpenGL usage -	/** Returns 0 on failure, and the texture index on success  +	/** Returns 0 on failure, and the texture index on success  	 */  	static size_t bind(std::string name, bool filter = true);  | 
