Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
tile.cpp: Automatically upscale lower resolution texture
  • Loading branch information
SmallJoker authored and paramat committed Apr 25, 2016
1 parent 46da0e8 commit 31c1fca
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
1 change: 1 addition & 0 deletions doc/lua_api.txt
Expand Up @@ -243,6 +243,7 @@ Example:
default_dirt.png^default_grass_side.png

`default_grass_side.png` is overlayed over `default_dirt.png`.
The texture with the lower resolution will be automatically upscaled to the higher resolution texture.

### Texture grouping
Textures can be grouped together by enclosing them in `(` and `)`.
Expand Down
23 changes: 22 additions & 1 deletion src/client/tile.cpp
Expand Up @@ -1175,7 +1175,28 @@ bool TextureSource::generateImagePart(std::string part_of_name,
core::rect<s32>(pos_from, dim),
video::SColor(255,255,255,255),
NULL);*/
blit_with_alpha(image, baseimg, pos_from, pos_to, dim);

core::dimension2d<u32> dim_dst = baseimg->getDimension();
if (dim == dim_dst) {
blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
} else if (dim.Width * dim.Height < dim_dst.Width * dim_dst.Height) {
// Upscale overlying image
video::IImage* scaled_image = m_device->getVideoDriver()->
createImage(video::ECF_A8R8G8B8, dim_dst);
image->copyToScaling(scaled_image);

blit_with_alpha(scaled_image, baseimg, pos_from, pos_to, dim_dst);
scaled_image->drop();
} else {
// Upscale base image
video::IImage* scaled_base = m_device->getVideoDriver()->
createImage(video::ECF_A8R8G8B8, dim);
baseimg->copyToScaling(scaled_base);
baseimg->drop();
baseimg = scaled_base;

blit_with_alpha(image, baseimg, pos_from, pos_to, dim);
}
}
//cleanup
image->drop();
Expand Down

0 comments on commit 31c1fca

Please sign in to comment.