forked from Mirrorlandia_minetest/minetest
Add an [opacity:<r> texture modifier. Makes the base image transparent according to the given ratio. r must be between 0 and 255. 0 means totally transparent. 255 means totally opaque. Useful for texture overlaying.
This commit is contained in:
parent
c4e77b406a
commit
f21dae6339
@ -292,6 +292,16 @@ Example:
|
|||||||
|
|
||||||
default_sandstone.png^[resize:16x16
|
default_sandstone.png^[resize:16x16
|
||||||
|
|
||||||
|
#### `[opacity:<r>`
|
||||||
|
Makes the base image transparent according to the given ratio.
|
||||||
|
r must be between 0 and 255.
|
||||||
|
0 means totally transparent.
|
||||||
|
255 means totally opaque.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
default_sandstone.png^[opacity:127
|
||||||
|
|
||||||
#### `[brighten`
|
#### `[brighten`
|
||||||
Brightens the texture.
|
Brightens the texture.
|
||||||
|
|
||||||
|
@ -1735,6 +1735,36 @@ bool TextureSource::generateImagePart(std::string part_of_name,
|
|||||||
baseimg->drop();
|
baseimg->drop();
|
||||||
baseimg = image;
|
baseimg = image;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
[opacity:R
|
||||||
|
Makes the base image transparent according to the given ratio.
|
||||||
|
R must be between 0 and 255.
|
||||||
|
0 means totally transparent.
|
||||||
|
255 means totally opaque.
|
||||||
|
*/
|
||||||
|
else if (str_starts_with(part_of_name, "[opacity:")) {
|
||||||
|
if (baseimg == NULL) {
|
||||||
|
errorstream << "generateImagePart(): baseimg == NULL "
|
||||||
|
<< "for part_of_name=\"" << part_of_name
|
||||||
|
<< "\", cancelling." << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Strfnd sf(part_of_name);
|
||||||
|
sf.next(":");
|
||||||
|
|
||||||
|
u32 ratio = mystoi(sf.next(""), 0, 255);
|
||||||
|
|
||||||
|
core::dimension2d<u32> dim = baseimg->getDimension();
|
||||||
|
|
||||||
|
for (u32 y = 0; y < dim.Height; y++)
|
||||||
|
for (u32 x = 0; x < dim.Width; x++)
|
||||||
|
{
|
||||||
|
video::SColor c = baseimg->getPixel(x,y);
|
||||||
|
c.setAlpha(floor((c.getAlpha() * ratio) / 255 + 0.5));
|
||||||
|
baseimg->setPixel(x,y,c);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errorstream << "generateImagePart(): Invalid "
|
errorstream << "generateImagePart(): Invalid "
|
||||||
|
Loading…
Reference in New Issue
Block a user