//! constructor for usual textures
COpenGLTexture::COpenGLTexture(ISGPImage* origImage, const String& name, COpenGLRenderDevice* renderdevice, bool bHasMipmaps)
	: ISGPTexture(name), 
	m_ColorFormat(SGPPF_A8R8G8B8), RenderDevice(renderdevice), m_Image(0), /*m_MipImage(0),*/
	OpenGLTextureID(0), InternalFormat(GL_RGBA), PixelFormat(GL_BGRA_EXT),
	PixelType(GL_UNSIGNED_BYTE), HasMipMaps(bHasMipmaps),
	MipMapLevels(0),
	IsRenderTarget(false), 	/*ReadOnlyLock(false),*/
	TextureTarget(GL_TEXTURE_2D),
	TextureMagFilter(TEXTURE_FILTER_MAG_BILINEAR), TextureMinFilter(TEXTURE_FILTER_MIN_BILINEAR),
	TextureBorderColor(0,0,0,0.0f),
	TextureAnisotropicFilter(1),
	TextureLODBias(0.0f),
	TextureMaxMipLevel(1000)
{
	TextureWrap[0] = TEXTURE_ADDRESS_REPEAT;
	TextureWrap[1] = TEXTURE_ADDRESS_REPEAT;
	TextureWrap[2] = TEXTURE_ADDRESS_REPEAT;

	if( origImage->IsDDSImage() )
	{
		updateDDSTexture(origImage);
		return;
	}

	getImageValues(origImage);

	glGenTextures(1, &OpenGLTextureID);

	if( (ImageSize.Width == TextureSize.Width) && (ImageSize.Height == TextureSize.Height) )
	{
		m_Image = RenderDevice->GetTextureManager()->createImage(m_ColorFormat, ImageSize);
		origImage->copyTo(m_Image, SDimension2D(0,0));
	}
	else
	{
		m_Image = RenderDevice->GetTextureManager()->createImage(m_ColorFormat, TextureSize);
		// scale texture
		origImage->copyToScaling(m_Image);
	}

	uploadTexture();
}
//! Constructor for usual textures
		COpenGLTexture::COpenGLTexture(IImage* origImage,
				const core::stringc& name, void* mipmapData,
				IVideoDriver* driver) :
				ITexture(name), Image(0), MipImage(0), TextureName(0), InternalFormat(
						GL_RGBA), PixelFormat(GL_BGRA_EXT), PixelType(
						GL_UNSIGNED_BYTE), HasMipMaps(false), ColorFormat(
						ECF_R8G8B8), Driver(driver), IsRenderTarget(false)
//FIXME
//AutomaticMipmapUpdate(false),
//ReadOnlyLock(false),
//KeepImage(true)
		{

			//TODO: refactor it
			//HasMipMaps = Driver->getTextureCreationFlag(ETCF_CREATE_MIP_MAPS);
			getImageValues(origImage);

			glGenTextures(1, &TextureName);

			if (ImageSize == TextureSize)
			{
				Image = createEmptyImage(ColorFormat, ImageSize);
				origImage->copyTo(Image);
			}
			else
			{
				Image = createEmptyImage(ColorFormat, TextureSize);
				// scale texture
				origImage->copyToScaling(Image);
			}

			uploadTexture(true, mipmapData);

			//FIXME
//			if (!KeepImage)
//			{
//				Image->drop();
//				Image = 0;
//			}
		}