Commit fb5f9235 authored by wind2009's avatar wind2009

Merge remote-tracking branch 'mercury/patch-image-resize' into develop

parents 24930e8a 786e3cf2
...@@ -120,10 +120,12 @@ void ImageManager::ResizeTexture() { ...@@ -120,10 +120,12 @@ void ImageManager::ResizeTexture() {
void ImageManager::resizeImage(irr::video::IImage* src, irr::video::IImage* dest, bool use_threading) { void ImageManager::resizeImage(irr::video::IImage* src, irr::video::IImage* dest, bool use_threading) {
imageResizer.resize(src, dest, use_threading); imageResizer.resize(src, dest, use_threading);
} }
/** Convert image to texture, resizing if needed. /**
* Convert image to texture, resizing if needed.
* @param name Texture name (Irrlicht texture key). * @param name Texture name (Irrlicht texture key).
* @param srcimg Source image; will be dropped by this function. * @param srcimg Source image; will be dropped by this function.
* @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`). */ * @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`).
*/
irr::video::ITexture* ImageManager::addTexture(const char* name, irr::video::IImage* srcimg, irr::s32 width, irr::s32 height) { irr::video::ITexture* ImageManager::addTexture(const char* name, irr::video::IImage* srcimg, irr::s32 width, irr::s32 height) {
if(srcimg == nullptr) if(srcimg == nullptr)
return nullptr; return nullptr;
...@@ -139,8 +141,10 @@ irr::video::ITexture* ImageManager::addTexture(const char* name, irr::video::IIm ...@@ -139,8 +141,10 @@ irr::video::ITexture* ImageManager::addTexture(const char* name, irr::video::IIm
srcimg->drop(); srcimg->drop();
return texture; return texture;
} }
/** Load image from file and convert to texture. /**
* @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`). */ * Load image from file and convert to texture.
* @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`).
*/
irr::video::ITexture* ImageManager::GetTextureFromFile(const char* file, irr::s32 width, irr::s32 height) { irr::video::ITexture* ImageManager::GetTextureFromFile(const char* file, irr::s32 width, irr::s32 height) {
irr::video::IImage* img = driver->createImageFromFile(file); irr::video::IImage* img = driver->createImageFromFile(file);
if(img == nullptr) { if(img == nullptr) {
...@@ -150,9 +154,11 @@ irr::video::ITexture* ImageManager::GetTextureFromFile(const char* file, irr::s3 ...@@ -150,9 +154,11 @@ irr::video::ITexture* ImageManager::GetTextureFromFile(const char* file, irr::s3
mysnprintf(name, "%s/%d_%d", file, width, height); mysnprintf(name, "%s/%d_%d", file, width, height);
return addTexture(name, img, width, height); return addTexture(name, img, width, height);
} }
/** Load card picture from `expansions` or `pics` folder. /**
* Load card picture from `expansions` or `pics` folder.
* Files in the expansions directory have priority, allowing custom pictures to be loaded without modifying the original files. * Files in the expansions directory have priority, allowing custom pictures to be loaded without modifying the original files.
* @return Image pointer. Must be dropped after use. */ * @return Image pointer. Must be dropped after use.
*/
irr::video::IImage* ImageManager::GetImage(int code) { irr::video::IImage* ImageManager::GetImage(int code) {
char file[256]; char file[256];
mysnprintf(file, "expansions/pics/%d.jpg", code); mysnprintf(file, "expansions/pics/%d.jpg", code);
...@@ -163,8 +169,10 @@ irr::video::IImage* ImageManager::GetImage(int code) { ...@@ -163,8 +169,10 @@ irr::video::IImage* ImageManager::GetImage(int code) {
} }
return img; return img;
} }
/** Load card picture. /**
* @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`). */ * Load card picture.
* @return Texture pointer. Remove via `driver->removeTexture` (do not `drop`).
*/
irr::video::ITexture* ImageManager::GetTexture(int code, irr::s32 width, irr::s32 height) { irr::video::ITexture* ImageManager::GetTexture(int code, irr::s32 width, irr::s32 height) {
irr::video::IImage* img = GetImage(code); irr::video::IImage* img = GetImage(code);
if(img == nullptr) { if(img == nullptr) {
...@@ -174,9 +182,11 @@ irr::video::ITexture* ImageManager::GetTexture(int code, irr::s32 width, irr::s3 ...@@ -174,9 +182,11 @@ irr::video::ITexture* ImageManager::GetTexture(int code, irr::s32 width, irr::s3
mysnprintf(name, "pics/%d/%d_%d", code, width, height); mysnprintf(name, "pics/%d/%d_%d", code, width, height);
return addTexture(name, img, width, height); return addTexture(name, img, width, height);
} }
/** Load managed card picture texture. /**
* Load managed card picture texture.
* @param fit Resize to fit scale if true. * @param fit Resize to fit scale if true.
* @return Texture pointer. Should NOT be removed nor dropped. */ * @return Texture pointer. Should NOT be removed nor dropped.
*/
irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) { irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) {
if(code == 0) if(code == 0)
return fit ? tUnknownFit : tUnknown; return fit ? tUnknownFit : tUnknown;
...@@ -200,18 +210,20 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) { ...@@ -200,18 +210,20 @@ irr::video::ITexture* ImageManager::GetTexture(int code, bool fit) {
else else
return fit ? tUnknownFit : tUnknown; return fit ? tUnknownFit : tUnknown;
} }
/** Load managed card picture texture with zoom. /**
* @return Texture pointer. Should NOT be removed nor dropped. */ * Load managed card picture texture with zoom.
* @return Texture pointer. Should NOT be removed nor dropped.
*/
irr::video::ITexture* ImageManager::GetBigPicture(int code, float zoom) { irr::video::ITexture* ImageManager::GetBigPicture(int code, float zoom) {
if(code == 0) if(code == 0)
return tUnknown; return tUnknownFit;
if(tBigPicture != nullptr) { if(tBigPicture != nullptr) {
driver->removeTexture(tBigPicture); driver->removeTexture(tBigPicture);
tBigPicture = nullptr; tBigPicture = nullptr;
} }
irr::video::IImage* img = GetImage(code); irr::video::IImage* img = GetImage(code);
if(img == nullptr) { if(img == nullptr) {
return tUnknown; return tUnknownFit;
} }
char name[256]; char name[256];
mysnprintf(name, "pics/%d/big", code); mysnprintf(name, "pics/%d/big", code);
...@@ -261,8 +273,10 @@ int ImageManager::LoadThumbThread() { ...@@ -261,8 +273,10 @@ int ImageManager::LoadThumbThread() {
} }
return 0; return 0;
} }
/** Load managed card thumbnail texture. /**
* @return Texture pointer. Should NOT be removed nor dropped. */ * Load managed card thumbnail texture.
* @return Texture pointer. Should NOT be removed nor dropped.
*/
irr::video::ITexture* ImageManager::GetTextureThumb(int code) { irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
if(code == 0) if(code == 0)
return tUnknownThumb; return tUnknownThumb;
...@@ -308,8 +322,10 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) { ...@@ -308,8 +322,10 @@ irr::video::ITexture* ImageManager::GetTextureThumb(int code) {
else else
return tUnknownThumb; return tUnknownThumb;
} }
/** Load managed duel field texture. /**
* @return Texture pointer. Should NOT be removed nor dropped. */ * Load managed duel field texture.
* @return Texture pointer. Should NOT be removed nor dropped.
*/
irr::video::ITexture* ImageManager::GetTextureField(int code) { irr::video::ITexture* ImageManager::GetTextureField(int code) {
if(code == 0) if(code == 0)
return nullptr; return nullptr;
......
...@@ -43,8 +43,10 @@ struct StbSamplerCache { ...@@ -43,8 +43,10 @@ struct StbSamplerCache {
} }
}; };
/** Scale image using stb_image_resize2. /**
* Returns true on success, false on failure or unsupported format. */ * Scale image using stb_image_resize2.
* Returns true on success, false on failure or unsupported format.
*/
bool ImageResizer::imageScaleSTB(irr::video::IImage* src, irr::video::IImage* dest) { bool ImageResizer::imageScaleSTB(irr::video::IImage* src, irr::video::IImage* dest) {
if(!src || !dest) if(!src || !dest)
return false; return false;
...@@ -111,8 +113,10 @@ bool ImageResizer::imageScaleSTB(irr::video::IImage* src, irr::video::IImage* de ...@@ -111,8 +113,10 @@ bool ImageResizer::imageScaleSTB(irr::video::IImage* src, irr::video::IImage* de
return ok != 0; return ok != 0;
} }
/** Scale image using nearest neighbor anti-aliasing. /**
* Function by Warr1024, from https://github.com/minetest/minetest/issues/2419, modified. */ * Scale image using nearest neighbor anti-aliasing.
* Function by Warr1024, from https://github.com/minetest/minetest/issues/2419, modified.
*/
void ImageResizer::imageScaleNNAA(irr::video::IImage* src, irr::video::IImage* dest, bool use_threading) { void ImageResizer::imageScaleNNAA(irr::video::IImage* src, irr::video::IImage* dest, bool use_threading) {
const auto& srcDim = src->getDimension(); const auto& srcDim = src->getDimension();
const auto& destDim = dest->getDimension(); const auto& destDim = dest->getDimension();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment