Ability to premultiply alpha on font import, fixes #5231
This commit is contained in:
parent
2009619166
commit
ae85543806
1 changed files with 26 additions and 0 deletions
|
@ -102,6 +102,7 @@ public:
|
|||
|
||||
bool disable_filter;
|
||||
bool round_advance;
|
||||
bool premultiply_alpha;
|
||||
|
||||
|
||||
|
||||
|
@ -167,6 +168,8 @@ public:
|
|||
round_advance=p_value;
|
||||
else if (n=="advanced/disable_filter")
|
||||
disable_filter=p_value;
|
||||
else if (n=="advanced/premultiply_alpha")
|
||||
premultiply_alpha=p_value;
|
||||
else
|
||||
return false;
|
||||
|
||||
|
@ -235,6 +238,8 @@ public:
|
|||
r_ret=round_advance;
|
||||
else if (n=="advanced/disable_filter")
|
||||
r_ret=disable_filter;
|
||||
else if (n=="advanced/premultiply_alpha")
|
||||
r_ret=premultiply_alpha;
|
||||
else
|
||||
return false;
|
||||
|
||||
|
@ -297,6 +302,7 @@ public:
|
|||
|
||||
p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/round_advance"));
|
||||
p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/disable_filter"));
|
||||
p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/premultiply_alpha"));
|
||||
|
||||
}
|
||||
|
||||
|
@ -336,6 +342,7 @@ public:
|
|||
font_mode=FONT_BITMAP;
|
||||
round_advance=true;
|
||||
disable_filter=false;
|
||||
premultiply_alpha=false;
|
||||
|
||||
}
|
||||
|
||||
|
@ -368,6 +375,7 @@ public:
|
|||
|
||||
round_advance=true;
|
||||
disable_filter=false;
|
||||
premultiply_alpha=false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1542,12 +1550,30 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
|
|||
|
||||
}
|
||||
|
||||
if (from->has_option("advanced/premultiply_alpha") && bool(from->get_option("advanced/premultiply_alpha"))) {
|
||||
|
||||
DVector<uint8_t> data = atlas.get_data();
|
||||
int dl = data.size();
|
||||
{
|
||||
DVector<uint8_t>::Write w = data.write();
|
||||
|
||||
for(int i=0;i<dl;i+=4) {
|
||||
|
||||
w[i+0]= uint8_t(int(w[i+0])*int(w[i+3])/255);
|
||||
w[i+1]= uint8_t(int(w[i+1])*int(w[i+3])/255);
|
||||
w[i+2]= uint8_t(int(w[i+2])*int(w[i+3])/255);
|
||||
}
|
||||
}
|
||||
|
||||
atlas=Image(res_size.x,res_size.y,0,Image::FORMAT_RGBA,data);
|
||||
}
|
||||
|
||||
if (from->has_option("color/monochrome") && bool(from->get_option("color/monochrome"))) {
|
||||
|
||||
atlas.convert(Image::FORMAT_GRAYSCALE_ALPHA);
|
||||
}
|
||||
|
||||
|
||||
if (0) {
|
||||
//debug the texture
|
||||
Ref<ImageTexture> atlast = memnew( ImageTexture );
|
||||
|
|
Loading…
Reference in a new issue