// prepare values ImageSize, TextureSize, and ColorFormat based on image void COpenGLTexture::getImageValues(ISGPImage* image) { COpenGLConfig* pOpenGLConfig = COpenGLConfig::getInstance(); if (!image) { Logger::getCurrentLogger()->writeToLog(String("No image for OpenGL texture."), ELL_ERROR); return; } ImageSize = image->getDimension(); if ( !ImageSize.Width || !ImageSize.Height) { Logger::getCurrentLogger()->writeToLog(String("Invalid size of image for OpenGL Texture."), ELL_ERROR); return; } const float ratio = (float)ImageSize.Width/(float)ImageSize.Height; if ( (ImageSize.Width > pOpenGLConfig->MaxTextureSize) && (ratio >= 1.0f) ) { ImageSize.Width = pOpenGLConfig->MaxTextureSize; ImageSize.Height = (uint32)(pOpenGLConfig->MaxTextureSize/ratio); } else if (ImageSize.Height > pOpenGLConfig->MaxTextureSize) { ImageSize.Height = pOpenGLConfig->MaxTextureSize; ImageSize.Width = (uint32)(pOpenGLConfig->MaxTextureSize*ratio); } TextureSize = ImageSize.getOptimalSize( !RenderDevice->queryDriverFeature(SGPVDF_TEXTURE_NPOT) ); m_ColorFormat = getBestColorFormat(image->getColorFormat()); }
// prepare values ImageSize, TextureSize, and ColorFormat based on image void COpenGLTexture::getImageValues(IImage* image) { IRR_ASSERT(image); ImageSize = image->getDimension(); IRR_ASSERT(ImageSize.Width && ImageSize.Height); const f32 ratio = (f32) ImageSize.Width / (f32) ImageSize.Height; if ((ImageSize.Width > Driver->getMaxTextureSize().Width) && (ratio >= 1.0f)) { ImageSize.Width = Driver->getMaxTextureSize().Width; ImageSize.Height = (u32) (Driver->getMaxTextureSize().Height / ratio); } else if (ImageSize.Height > Driver->getMaxTextureSize().Height) { ImageSize.Height = Driver->getMaxTextureSize().Height; ImageSize.Width = (u32) (Driver->getMaxTextureSize().Width * ratio); } TextureSize = ImageSize.getOptimalSize( !SharedOpenGLExtensionHandler::getInstance().queryFeature( EVDF_TEXTURE_NPOT)); ColorFormat = getBestColorFormat(image->getColorFormat()); }
void CD3D9Texture::getImageValues(const IImage* image) { OriginalColorFormat = image->getColorFormat(); ColorFormat = getBestColorFormat(OriginalColorFormat); InternalFormat = Driver->getD3DFormatFromColorFormat(ColorFormat); if (IImage::isCompressedFormat(image->getColorFormat())) { AutoGenerateMipMaps = false; } OriginalSize = image->getDimension(); Size = OriginalSize; if (Size.Width == 0 || Size.Height == 0) { os::Printer::log("Invalid size of image for texture.", ELL_ERROR); return; } const f32 ratio = (f32)Size.Width / (f32)Size.Height; if ((Size.Width > Driver->Caps.MaxTextureWidth) && (ratio >= 1.f)) { Size.Width = Driver->Caps.MaxTextureWidth; Size.Height = (u32)(Driver->Caps.MaxTextureWidth / ratio); } else if (Size.Height > Driver->Caps.MaxTextureHeight) { Size.Height = Driver->Caps.MaxTextureHeight; Size.Width = (u32)(Driver->Caps.MaxTextureHeight * ratio); } bool needSquare = (!Driver->queryFeature(EVDF_TEXTURE_NSQUARE) || Type == ETT_CUBEMAP); Size = Size.getOptimalSize(!Driver->queryFeature(EVDF_TEXTURE_NPOT), needSquare, true, Driver->Caps.MaxTextureWidth); Pitch = Size.Width * IImage::getBitsPerPixelFromFormat(ColorFormat) / 8; }