summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-09-15 20:25:44 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-09-15 20:25:44 -0400
commit489d68f57f94d4ac051bb5053ca281fccdb9e816 (patch)
treef3027c8689cee8f2de9f1a6ec584601a44707444
parente71705f57fd1171610bbb3610245b8e89468a9dd (diff)
selmenu.cpp: Don't use auto_alloc for temporary bitmaps (nw)
-rw-r--r--src/frontend/mame/ui/selmenu.cpp142
-rw-r--r--src/frontend/mame/ui/selmenu.h2
2 files changed, 66 insertions, 78 deletions
diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp
index abe83714fa0..03b749ea8a0 100644
--- a/src/frontend/mame/ui/selmenu.cpp
+++ b/src/frontend/mame/ui/selmenu.cpp
@@ -1113,19 +1113,19 @@ float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, fl
while (path.next(curpath))
searchstr.append(";").append(curpath.c_str()).append(PATH_SEPARATOR).append("icons");
- bitmap_argb32 *tmp = auto_alloc(machine(), bitmap_argb32);
+ bitmap_argb32 tmp;
emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ);
std::string fullname = std::string(driver->name).append(".ico");
- render_load_ico(*tmp, snapfile, nullptr, fullname.c_str());
+ render_load_ico(tmp, snapfile, nullptr, fullname.c_str());
- if (!tmp->valid() && cloneof)
+ if (!tmp.valid() && cloneof)
{
fullname.assign(driver->parent).append(".ico");
- render_load_ico(*tmp, snapfile, nullptr, fullname.c_str());
+ render_load_ico(tmp, snapfile, nullptr, fullname.c_str());
}
bitmap_argb32 &bitmap(icon->second.second);
- if (tmp->valid())
+ if (tmp.valid())
{
float panel_width = x1 - x0;
float panel_height = y1 - y0;
@@ -1139,38 +1139,35 @@ float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, fl
int panel_height_pixel = panel_height * screen_height;
// Calculate resize ratios for resizing
- auto ratioW = (float)panel_width_pixel / tmp->width();
- auto ratioH = (float)panel_height_pixel / tmp->height();
- auto dest_xPixel = tmp->width();
- auto dest_yPixel = tmp->height();
+ auto ratioW = (float)panel_width_pixel / tmp.width();
+ auto ratioH = (float)panel_height_pixel / tmp.height();
+ auto dest_xPixel = tmp.width();
+ auto dest_yPixel = tmp.height();
if (ratioW < 1 || ratioH < 1)
{
// smaller ratio will ensure that the image fits in the view
float ratio = std::min(ratioW, ratioH);
- dest_xPixel = tmp->width() * ratio;
- dest_yPixel = tmp->height() * ratio;
+ dest_xPixel = tmp.width() * ratio;
+ dest_yPixel = tmp.height() * ratio;
}
- bitmap_argb32 *dest_bitmap;
- dest_bitmap = auto_alloc(machine(), bitmap_argb32);
+ bitmap_argb32 dest_bitmap;
// resample if necessary
- if (dest_xPixel != tmp->width() || dest_yPixel != tmp->height())
+ if (dest_xPixel != tmp.width() || dest_yPixel != tmp.height())
{
- dest_bitmap->allocate(dest_xPixel, dest_yPixel);
+ dest_bitmap.allocate(dest_xPixel, dest_yPixel);
render_color color = { 1.0f, 1.0f, 1.0f, 1.0f };
- render_resample_argb_bitmap_hq(*dest_bitmap, *tmp, color, true);
+ render_resample_argb_bitmap_hq(dest_bitmap, tmp, color, true);
}
else
- dest_bitmap = tmp;
+ dest_bitmap = std::move(tmp);
bitmap.allocate(panel_width_pixel, panel_height_pixel);
for (int x = 0; x < dest_xPixel; x++)
for (int y = 0; y < dest_yPixel; y++)
- bitmap.pix32(y, x) = dest_bitmap->pix32(y, x);
-
- auto_free(machine(), dest_bitmap);
+ bitmap.pix32(y, x) = dest_bitmap.pix32(y, x);
icon->second.first->set_bitmap(bitmap, bitmap.cliprect(), TEXFORMAT_ARGB32);
}
@@ -1178,8 +1175,6 @@ float menu_select_launch::draw_icon(int linenum, void *selectedref, float x0, fl
{
bitmap.reset();
}
-
- auto_free(machine(), tmp);
}
if (icon->second.second.valid())
@@ -2073,19 +2068,18 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f
if (!m_cache->snapx_software_is(software) || !snapx_valid() || ui_globals::switch_image)
{
emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ);
- bitmap_argb32 *tmp_bitmap;
- tmp_bitmap = auto_alloc(machine(), bitmap_argb32);
+ bitmap_argb32 tmp_bitmap;
if (software->startempty == 1)
{
// Load driver snapshot
std::string fullname = std::string(software->driver->name) + ".png";
- render_load_png(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, nullptr, fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(software->driver->name).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, nullptr, fullname.c_str());
}
}
else if (ui_globals::curimage_view == TITLES_VIEW)
@@ -2093,12 +2087,12 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f
// First attempt from name list
std::string const pathname = software->listname + "_titles";
std::string fullname = software->shortname + ".png";
- render_load_png(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(software->shortname).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
}
}
else
@@ -2106,33 +2100,32 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f
// First attempt from name list
std::string pathname = software->listname;
std::string fullname = software->shortname + ".png";
- render_load_png(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(software->shortname).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
}
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
// Second attempt from driver name + part name
pathname.assign(software->driver->name).append(software->part);
fullname.assign(software->shortname).append(".png");
- render_load_png(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(software->shortname).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, pathname.c_str(), fullname.c_str());
}
}
}
m_cache->set_snapx_software(software);
ui_globals::switch_image = false;
- arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2);
- auto_free(machine(), tmp_bitmap);
+ arts_render_images(std::move(tmp_bitmap), origx1, origy1, origx2, origy2);
}
// if the image is available, loaded and valid, display it
@@ -2152,31 +2145,30 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f
{
emu_file snapfile(searchstr.c_str(), OPEN_FLAG_READ);
snapfile.set_restrict_to_mediapath(true);
- bitmap_argb32 *tmp_bitmap;
- tmp_bitmap = auto_alloc(machine(), bitmap_argb32);
+ bitmap_argb32 tmp_bitmap;
// try to load snapshot first from saved "0000.png" file
std::string fullname(driver->name);
- render_load_png(*tmp_bitmap, snapfile, fullname.c_str(), "0000.png");
+ render_load_png(tmp_bitmap, snapfile, fullname.c_str(), "0000.png");
- if (!tmp_bitmap->valid())
- render_load_jpeg(*tmp_bitmap, snapfile, fullname.c_str(), "0000.jpg");
+ if (!tmp_bitmap.valid())
+ render_load_jpeg(tmp_bitmap, snapfile, fullname.c_str(), "0000.jpg");
// if fail, attemp to load from standard file
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(driver->name).append(".png");
- render_load_png(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, nullptr, fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(driver->name).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, nullptr, fullname.c_str());
}
}
// if fail again, attemp to load from parent file
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
// set clone status
bool cloneof = strcmp(driver->parent, "0");
@@ -2190,20 +2182,19 @@ void menu_select_launch::arts_render(float origx1, float origy1, float origx2, f
if (cloneof)
{
fullname.assign(driver->parent).append(".png");
- render_load_png(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_png(tmp_bitmap, snapfile, nullptr, fullname.c_str());
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
fullname.assign(driver->parent).append(".jpg");
- render_load_jpeg(*tmp_bitmap, snapfile, nullptr, fullname.c_str());
+ render_load_jpeg(tmp_bitmap, snapfile, nullptr, fullname.c_str());
}
}
}
m_cache->set_snapx_driver(driver);
ui_globals::switch_image = false;
- arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2);
- auto_free(machine(), tmp_bitmap);
+ arts_render_images(std::move(tmp_bitmap), origx1, origy1, origx2, origy2);
}
// if the image is available, loaded and valid, display it
@@ -2270,26 +2261,26 @@ std::string menu_select_launch::arts_render_common(float origx1, float origy1, f
// perform rendering of image
//-------------------------------------------------
-void menu_select_launch::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float origy1, float origx2, float origy2)
+void menu_select_launch::arts_render_images(bitmap_argb32 &&tmp_bitmap, float origx1, float origy1, float origx2, float origy2)
{
bool no_available = false;
float line_height = ui().get_line_height();
// if it fails, use the default image
- if (!tmp_bitmap->valid())
+ if (!tmp_bitmap.valid())
{
- tmp_bitmap->allocate(256, 256);
+ tmp_bitmap.allocate(256, 256);
const bitmap_argb32 &src(m_cache->no_avail_bitmap());
for (int x = 0; x < 256; x++)
{
for (int y = 0; y < 256; y++)
- tmp_bitmap->pix32(y, x) = src.pix32(y, x);
+ tmp_bitmap.pix32(y, x) = src.pix32(y, x);
}
no_available = true;
}
bitmap_argb32 &snapx_bitmap(m_cache->snapx_bitmap());
- if (tmp_bitmap->valid())
+ if (tmp_bitmap.valid())
{
float panel_width = origx2 - origx1 - 0.02f;
float panel_height = origy2 - origy1 - 0.02f - (3.0f * UI_BOX_TB_BORDER) - (2.0f * line_height);
@@ -2303,20 +2294,20 @@ void menu_select_launch::arts_render_images(bitmap_argb32 *tmp_bitmap, float ori
int panel_height_pixel = panel_height * screen_height;
// Calculate resize ratios for resizing
- auto ratioW = (float)panel_width_pixel / tmp_bitmap->width();
- auto ratioH = (float)panel_height_pixel / tmp_bitmap->height();
- auto ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width();
- auto dest_xPixel = tmp_bitmap->width();
- auto dest_yPixel = tmp_bitmap->height();
+ auto ratioW = (float)panel_width_pixel / tmp_bitmap.width();
+ auto ratioH = (float)panel_height_pixel / tmp_bitmap.height();
+ auto ratioI = (float)tmp_bitmap.height() / tmp_bitmap.width();
+ auto dest_xPixel = tmp_bitmap.width();
+ auto dest_yPixel = tmp_bitmap.height();
// force 4:3 ratio min
if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW)
{
// smaller ratio will ensure that the image fits in the view
- dest_yPixel = tmp_bitmap->width() * 0.75f;
+ dest_yPixel = tmp_bitmap.width() * 0.75f;
ratioH = (float)panel_height_pixel / dest_yPixel;
float ratio = std::min(ratioW, ratioH);
- dest_xPixel = tmp_bitmap->width() * ratio;
+ dest_xPixel = tmp_bitmap.width() * ratio;
dest_yPixel *= ratio;
}
// resize the bitmap if necessary
@@ -2324,22 +2315,21 @@ void menu_select_launch::arts_render_images(bitmap_argb32 *tmp_bitmap, float ori
{
// smaller ratio will ensure that the image fits in the view
float ratio = std::min(ratioW, ratioH);
- dest_xPixel = tmp_bitmap->width() * ratio;
- dest_yPixel = tmp_bitmap->height() * ratio;
+ dest_xPixel = tmp_bitmap.width() * ratio;
+ dest_yPixel = tmp_bitmap.height() * ratio;
}
- bitmap_argb32 *dest_bitmap;
+ bitmap_argb32 dest_bitmap;
// resample if necessary
- if (dest_xPixel != tmp_bitmap->width() || dest_yPixel != tmp_bitmap->height())
+ if (dest_xPixel != tmp_bitmap.width() || dest_yPixel != tmp_bitmap.height())
{
- dest_bitmap = auto_alloc(machine(), bitmap_argb32);
- dest_bitmap->allocate(dest_xPixel, dest_yPixel);
+ dest_bitmap.allocate(dest_xPixel, dest_yPixel);
render_color color = { 1.0f, 1.0f, 1.0f, 1.0f };
- render_resample_argb_bitmap_hq(*dest_bitmap, *tmp_bitmap, color, true);
+ render_resample_argb_bitmap_hq(dest_bitmap, tmp_bitmap, color, true);
}
else
- dest_bitmap = tmp_bitmap;
+ dest_bitmap = std::move(tmp_bitmap);
snapx_bitmap.allocate(panel_width_pixel, panel_height_pixel);
int x1 = (0.5f * panel_width_pixel) - (0.5f * dest_xPixel);
@@ -2347,9 +2337,7 @@ void menu_select_launch::arts_render_images(bitmap_argb32 *tmp_bitmap, float ori
for (int x = 0; x < dest_xPixel; x++)
for (int y = 0; y < dest_yPixel; y++)
- snapx_bitmap.pix32(y + y1, x + x1) = dest_bitmap->pix32(y, x);
-
- auto_free(machine(), dest_bitmap);
+ snapx_bitmap.pix32(y + y1, x + x1) = dest_bitmap.pix32(y, x);
// apply bitmap
m_cache->snapx_texture()->set_bitmap(snapx_bitmap, snapx_bitmap.cliprect(), TEXFORMAT_ARGB32);
diff --git a/src/frontend/mame/ui/selmenu.h b/src/frontend/mame/ui/selmenu.h
index d617e43b7dc..483515d4411 100644
--- a/src/frontend/mame/ui/selmenu.h
+++ b/src/frontend/mame/ui/selmenu.h
@@ -255,7 +255,7 @@ private:
// images render
void arts_render(float origx1, float origy1, float origx2, float origy2);
std::string arts_render_common(float origx1, float origy1, float origx2, float origy2);
- void arts_render_images(bitmap_argb32 *bitmap, float origx1, float origy1, float origx2, float origy2);
+ void arts_render_images(bitmap_argb32 &&bitmap, float origx1, float origy1, float origx2, float origy2);
void draw_snapx(float origx1, float origy1, float origx2, float origy2);
// text for main top/bottom panels