summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/render.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/render.cpp')
-rw-r--r--src/emu/render.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp
index b6afedd8870..ebea5e01d9b 100644
--- a/src/emu/render.cpp
+++ b/src/emu/render.cpp
@@ -314,7 +314,7 @@ render_texture::~render_texture()
// it has been re-allocated
//-------------------------------------------------
-void render_texture::reset(render_manager &manager, texture_scaler_func scaler, void *param)
+void render_texture::reset(render_manager &manager, texture_scaler_func scaler, void *param, texture_dirty_func dirty)
{
m_manager = &manager;
if (scaler != nullptr)
@@ -323,6 +323,7 @@ void render_texture::reset(render_manager &manager, texture_scaler_func scaler,
m_scaler = scaler;
m_param = param;
}
+ m_dirty = dirty;
m_old_id = m_id;
m_id = ~0L;
}
@@ -463,7 +464,7 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo
if (-1 == lowest)
throw emu_fatalerror("render_texture::get_scaled: Too many live texture instances!");
- // throw out any existing entries
+ // throw out any existing entries or update the current one if dirty
scaled = &m_scaled[lowest];
if (scaled->bitmap != nullptr)
{
@@ -478,6 +479,14 @@ void render_texture::get_scaled(u32 dwidth, u32 dheight, render_texinfo &texinfo
// let the scaler do the work
(*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param);
}
+ else if (m_dirty && (*m_dirty)(m_param))
+ {
+ scaled = &m_scaled[scalenum];
+ scaled->seqid = ++m_curseq;
+
+ // let the scaler do the work
+ (*m_scaler)(*scaled->bitmap, srcbitmap, m_sbounds, m_param);
+ }
// finally fill out the new info
primlist.add_reference(scaled->bitmap);
@@ -3095,11 +3104,11 @@ float render_manager::ui_aspect(render_container *rc)
// texture_alloc - allocate a new texture
//-------------------------------------------------
-render_texture *render_manager::texture_alloc(texture_scaler_func scaler, void *param)
+render_texture *render_manager::texture_alloc(texture_scaler_func scaler, void *param, texture_dirty_func dirty)
{
// allocate a new texture and reset it
render_texture *tex = m_texture_allocator.alloc();
- tex->reset(*this, scaler, param);
+ tex->reset(*this, scaler, param, dirty);
tex->set_id(m_texture_id);
m_texture_id++;
m_live_textures++;