00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "xrb_gltexture.hpp"
00012
00013 #include "xrb_texture.hpp"
00014
00015 namespace Xrb
00016 {
00017
00018 GLTexture::GLTexture ()
00019 {
00020 m_handle = 0;
00021 }
00022
00023 GLTexture::~GLTexture ()
00024 {
00025 DeleteTexture();
00026 }
00027
00028 GLTexture *GLTexture::Create (std::string const &path)
00029 {
00030 GLTexture *retval = NULL;
00031
00032 Texture *texture = Texture::Create(path);
00033 if (texture == NULL)
00034 return retval;
00035
00036 retval = new GLTexture();
00037 retval->GenerateTexture(texture);
00038 delete texture;
00039
00040 return retval;
00041 }
00042
00043 GLTexture *GLTexture::Create (Texture *texture)
00044 {
00045 GLTexture *retval = NULL;
00046
00047 retval = new GLTexture();
00048 retval->GenerateTexture(texture);
00049
00050 return retval;
00051 }
00052
00053 void GLTexture::GenerateTexture (Texture *texture)
00054 {
00055 ASSERT1(texture != NULL);
00056
00057 m_size = texture->Size();
00058
00059 glActiveTexture(GL_TEXTURE0);
00060 glEnable(GL_TEXTURE_2D);
00061 glGenTextures(1, &m_handle);
00062 glBindTexture(GL_TEXTURE_2D, m_handle);
00063
00064
00065
00066
00067 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
00068 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
00069
00070
00071
00072 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00073 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
00074
00075
00076
00077
00078
00079
00080 glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
00081
00082 glTexImage2D(
00083 GL_TEXTURE_2D,
00084 0,
00085 GL_RGBA,
00086 texture->Width(),
00087 texture->Height(),
00088 0,
00089 GL_RGBA,
00090 GL_UNSIGNED_BYTE,
00091 texture->Data());
00092
00093
00094
00095 }
00096
00097 void GLTexture::DeleteTexture ()
00098 {
00099 ASSERT1(m_handle > 0);
00100 glDeleteTextures(1, &m_handle);
00101 }
00102
00103 }