From 2636e834c25a42bb2dd01c3c61d075b666dee3bf Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sun, 25 Dec 2011 16:18:49 +0100 Subject: base: moved Image and Texture to more appropriate locations --- src/menu/texture.cpp | 114 +++++++++++++++++++++++++++++++++++++++ src/menu/texture.hpp | 91 +++++++++++++++++++++++++++++++ src/menu/texture_colorized.cpp | 32 +++++++++++ src/menu/texture_colorized.hpp | 52 ++++++++++++++++++ src/menu/texture_transparent.cpp | 32 +++++++++++ src/menu/texture_transparent.hpp | 53 ++++++++++++++++++ 6 files changed, 374 insertions(+) create mode 100644 src/menu/texture.cpp create mode 100644 src/menu/texture.hpp create mode 100644 src/menu/texture_colorized.cpp create mode 100644 src/menu/texture_colorized.hpp create mode 100644 src/menu/texture_transparent.cpp create mode 100644 src/menu/texture_transparent.hpp (limited to 'src/menu') diff --git a/src/menu/texture.cpp b/src/menu/texture.cpp new file mode 100644 index 00000000..cf24b9ce --- /dev/null +++ b/src/menu/texture.cpp @@ -0,0 +1,114 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "texture.hpp" + +namespace usdx +{ + log4cpp::Category& Texture::log = + log4cpp::Category::getInstance("usdx.base.texture"); + + Texture::Texture(boost::filesystem::wpath filename) : + filename(filename), texture(0), size(0, 0), rotation(0) + { + Image image(filename); + + size.set_width(image.get_surface()->w); + size.set_height(image.get_surface()->h); + + // // Check that the image dimensions are a power of 2 + // if ((image.get_surface()->w & (image.get_surface()->w - 1)) != 0 ) { + // LOG4CXX_ERROR(log, "" << filename << " has a width of " << image.get_surface()->w << " that is not a power of 2"); + // throw TextureSizeException(size); + // } + + // if ((image.get_surface()->h & (image.get_surface()->h - 1)) != 0 ) { + // LOG4CXX_ERROR(log, "" << filename << " has a height of " << image.get_surface()->h << " that is not a power of 2"); + // throw TextureSizeException(size); + // } + + + switch (image.get_surface()->format->BytesPerPixel) { + case 4: + if (image.get_surface()->format->Rmask == 0x000000ff) { + texture_format = GL_RGBA; + } + else { + texture_format = GL_BGRA; + } + + break; + + case 3: + if (image.get_surface()->format->Rmask == 0x000000ff) { + texture_format = GL_RGB; + } + else { + texture_format = GL_BGR; + } + + break; + + default: + log << log4cpp::Priority::ERROR << "'" << filename << + "' is not in true color! Could not handle that!"; + throw TextureColorDepthException(image.get_surface()->format->BytesPerPixel); + } + + // Have OpenGL generate a texture object handle for us + glGenTextures(1, &texture); + + // Bind the texture object + glBindTexture(GL_TEXTURE_2D, texture); + + // Set the texture's stretching properties + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + // Edit the texture object's image data using the information SDL_Surface gives us + glTexImage2D(GL_TEXTURE_2D, + 0, + image.get_surface()->format->BytesPerPixel, + image.get_surface()->w, + image.get_surface()->h, + 0, + texture_format, + GL_UNSIGNED_BYTE, + image.get_surface()->pixels); + } + + Texture::~Texture() + { + if (glIsTexture(texture)) { + glDeleteTextures(1, &texture); + } + } + + GLuint Texture::get_texture(void) const + { + return texture; + } +}; diff --git a/src/menu/texture.hpp b/src/menu/texture.hpp new file mode 100644 index 00000000..6e1ea640 --- /dev/null +++ b/src/menu/texture.hpp @@ -0,0 +1,91 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef TEXTURE_HPP +#define TEXTURE_HPP + +#include +#include +#include + +#include "utils/point_3d.hpp" +#include "utils/dimension.hpp" +#include "utils/rectangle.hpp" +#include "utils/image.hpp" +#include "drawable.hpp" + +namespace usdx +{ + class TextureLoadException + { + public: + TextureLoadException() {}; + virtual ~TextureLoadException() {}; + }; + + class TextureSizeException : public TextureLoadException + { + private: + Dimension size; + + public: + TextureSizeException(Dimension size) : size(size) { }; + virtual ~TextureSizeException() { }; + }; + + class TextureColorDepthException : public TextureLoadException + { + private: + unsigned int number_of_colors; + + public: + TextureColorDepthException(unsigned int number_of_colors) : number_of_colors(number_of_colors) {}; + virtual ~TextureColorDepthException() {}; + }; + + class Texture + { + private: + static log4cpp::Category& log; + + boost::filesystem::wpath filename; + + GLuint texture; + GLenum texture_format; + + Dimension size; + + float rotation; ///< radiant (0 - 2*pi) + + public: + Texture(boost::filesystem::wpath filename); + virtual ~Texture(); + + GLuint get_texture(void) const; + }; +}; + +#endif diff --git a/src/menu/texture_colorized.cpp b/src/menu/texture_colorized.cpp new file mode 100644 index 00000000..89e3ae54 --- /dev/null +++ b/src/menu/texture_colorized.cpp @@ -0,0 +1,32 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "texture_colorized.hpp" + +namespace usdx +{ + +}; diff --git a/src/menu/texture_colorized.hpp b/src/menu/texture_colorized.hpp new file mode 100644 index 00000000..56b06112 --- /dev/null +++ b/src/menu/texture_colorized.hpp @@ -0,0 +1,52 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef TEXTURE_COLORIZED_HPP +#define TEXTURE_COLORIZED_HPP + +#include "texture_transparent.hpp" +#include "utils/rgb_color.hpp" + +namespace usdx +{ + /** + * This class represents a texture like TextureTransparent but the hue + * value from the HSV color model is replaced with a different value. + * @see: TextureTransparent + */ + class TextureColorized : public TextureTransparent + { + private: + RgbColor color; + float intensity; + + public: + TextureColorized(); + virtual ~TextureColorized(); + }; +}; + +#endif diff --git a/src/menu/texture_transparent.cpp b/src/menu/texture_transparent.cpp new file mode 100644 index 00000000..77aa8a14 --- /dev/null +++ b/src/menu/texture_transparent.cpp @@ -0,0 +1,32 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include "texture_transparent.hpp" + +namespace usdx +{ + +}; diff --git a/src/menu/texture_transparent.hpp b/src/menu/texture_transparent.hpp new file mode 100644 index 00000000..dae69d44 --- /dev/null +++ b/src/menu/texture_transparent.hpp @@ -0,0 +1,53 @@ +/* + * UltraStar Deluxe - Karaoke Game + * + * UltraStar Deluxe is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#ifndef TEXTURE_TRANSPARENT_HPP +#define TEXTURE_TRANSPARENT_HPP + +#include "texture.hpp" + +namespace usdx +{ + /** + * This class represents a texture like TexturePlain but with the + * ability to set a alpha value to paint this texture transparent. + * @see: Texture + */ + class TextureTransparent : public Texture + { + private: + float alpha; + + public: + TextureTransparent(); + virtual ~TextureTransparent(); + + float get_alpha(void) const; + void set_alpha(float alpha); + }; +}; + +#endif -- cgit v1.2.3