//! 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; // } }