nuclear@0: #include "texture.h" nuclear@0: #include "opengl.h" nuclear@0: nuclear@0: Texture::Texture() nuclear@0: { nuclear@0: tex = 0; nuclear@0: type = GL_TEXTURE_2D; nuclear@0: } nuclear@0: nuclear@0: Texture::~Texture() nuclear@0: { nuclear@0: destroy(); nuclear@0: } nuclear@0: nuclear@0: void Texture::create2d(int xsz, int ysz) nuclear@0: { nuclear@0: destroy(); nuclear@0: nuclear@0: type = GL_TEXTURE_2D; nuclear@0: img.create(xsz, ysz); nuclear@0: nuclear@0: if(!tex) { nuclear@0: glGenTextures(1, &tex); nuclear@0: } nuclear@0: glBindTexture(type, tex); nuclear@0: glTexParameteri(type, GL_TEXTURE_MIN_FILTER, GL_LINEAR); nuclear@0: glTexParameteri(type, GL_TEXTURE_MAG_FILTER, GL_LINEAR); nuclear@0: glTexImage2D(type, 0, GL_RGBA, xsz, ysz, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); nuclear@0: } nuclear@0: nuclear@0: void Texture::destroy() nuclear@0: { nuclear@0: if(tex) { nuclear@0: glDeleteTextures(1, &tex); nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: void Texture::set_image(const Image &img) nuclear@0: { nuclear@0: this->img = img; nuclear@0: create2d(img.get_width(), img.get_height()); nuclear@0: nuclear@0: glTexSubImage2D(type, 0, 0, 0, img.get_width(), img.get_height(), nuclear@0: GL_RGBA, GL_UNSIGNED_BYTE, img.get_pixels()); nuclear@0: } nuclear@0: nuclear@0: Image &Texture::get_image() nuclear@0: { nuclear@0: return img; nuclear@0: } nuclear@0: nuclear@0: const Image &Texture::get_image() const nuclear@0: { nuclear@0: return img; nuclear@0: } nuclear@0: nuclear@0: unsigned int Texture::get_texture_id() const nuclear@0: { nuclear@0: return tex; nuclear@0: } nuclear@0: nuclear@0: void Texture::bind(int tunit) const nuclear@0: { nuclear@0: glActiveTextureARB(GL_TEXTURE0_ARB + tunit); nuclear@0: glBindTexture(type, tex); nuclear@0: glActiveTextureARB(GL_TEXTURE0_ARB); nuclear@0: } nuclear@0: nuclear@0: bool Texture::load(const char *fname) nuclear@0: { nuclear@0: Image image; nuclear@0: if(!image.load(fname)) { nuclear@0: return false; nuclear@0: } nuclear@0: set_image(image); nuclear@0: return true; nuclear@0: }