00001 #include "texture2d.h"
00002 #include "../openglserver/openglserver.h"
00003 #include "../imageserver/image.h"
00004
00005 using namespace kerosin;
00006
00007 Texture2D::Texture2D(const boost::shared_ptr<TextureServer> &textureServer) : Texture(textureServer)
00008 {
00009 }
00010
00011 Texture2D::~Texture2D()
00012 {
00013 }
00014
00015 void Texture2D::Bind() const
00016 {
00017 if (mTexID != 0)
00018 {
00019 glBindTexture(GL_TEXTURE_2D, mTexID);
00020 }
00021 }
00022
00023 void Texture2D::Enable() const
00024 {
00025 glEnable(GL_TEXTURE_2D);
00026 }
00027
00028 void Texture2D::Disable() const
00029 {
00030 glDisable(GL_TEXTURE_2D);
00031 }
00032
00033 void Texture2D::Create(boost::shared_ptr<Image> &image)
00034 {
00035 mWidth = image->Width();
00036 mHeight = image->Height();
00037
00038 Acquire();
00039 Bind();
00040
00041 glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE );
00042 if(image->HasAlpha())
00043 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, mWidth, mHeight, 0, image->Format(), image->Type(), image->Data());
00044 else
00045 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, mWidth, mHeight, 0, image->Format(), image->Type(), image->Data());
00046
00047 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00048 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
00049 }
00050
00051 void Texture2D::Clamp() const
00052 {
00053 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00054 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00055 }
00056
00057 void Texture2D::ClampToEdge() const
00058 {
00059 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
00060 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
00061 }
00062
00063 void Texture2D::Repeat() const
00064 {
00065 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
00066 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
00067 }