added optional region cropping to Texture Atlas importer

This commit is contained in:
boruok 2021-10-07 09:03:19 +09:00
parent 6877cccfb1
commit 3f11fe4c66
2 changed files with 7 additions and 1 deletions

View File

@ -74,6 +74,7 @@ String ResourceImporterTextureAtlas::get_preset_name(int p_idx) const {
void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const { void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), "")); r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0)); r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false));
} }
String ResourceImporterTextureAtlas::get_option_group_file() const { String ResourceImporterTextureAtlas::get_option_group_file() const {
@ -206,6 +207,7 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
ERR_CONTINUE(err != OK); ERR_CONTINUE(err != OK);
pack_data.image = image; pack_data.image = image;
pack_data.is_cropped = options["crop_to_region"];
int mode = options["import_mode"]; int mode = options["import_mode"];
@ -324,7 +326,10 @@ Error ResourceImporterTextureAtlas::import_group_file(const String &p_group_file
atlas_texture.instantiate(); atlas_texture.instantiate();
atlas_texture->set_atlas(cache); atlas_texture->set_atlas(cache);
atlas_texture->set_region(Rect2(offset, pack_data.region.size)); atlas_texture->set_region(Rect2(offset, pack_data.region.size));
if (!pack_data.is_cropped) {
atlas_texture->set_margin(Rect2(pack_data.region.position, pack_data.image->get_size() - pack_data.region.size)); atlas_texture->set_margin(Rect2(pack_data.region.position, pack_data.image->get_size() - pack_data.region.size));
}
texture = atlas_texture; texture = atlas_texture;
} else { } else {

View File

@ -38,6 +38,7 @@ class ResourceImporterTextureAtlas : public ResourceImporter {
struct PackData { struct PackData {
Rect2 region; Rect2 region;
bool is_cropped = false;
bool is_mesh = false; bool is_mesh = false;
Vector<int> chart_pieces; //one for region, many for mesh Vector<int> chart_pieces; //one for region, many for mesh
Vector<Vector<Vector2>> chart_vertices; //for mesh Vector<Vector<Vector2>> chart_vertices; //for mesh