summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/draw13.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2016-04-25 17:22:25 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2016-04-25 17:22:25 +0200
commit9c2ef88573827db7a9b032f7ae86580f0c285bc1 (patch)
tree25579f21730982488480e9bfe3737e3fc1c5c18c /src/osd/modules/render/draw13.cpp
parent5e831f6506ee06f8c30cb113551ee0fec53804db (diff)
Revert "Temp revert of Brad changes (nw)"
This reverts commit 5e831f6506ee06f8c30cb113551ee0fec53804db.
Diffstat (limited to 'src/osd/modules/render/draw13.cpp')
-rw-r--r--src/osd/modules/render/draw13.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/src/osd/modules/render/draw13.cpp b/src/osd/modules/render/draw13.cpp
index b4326ff2bdf..24bf22c3b27 100644
--- a/src/osd/modules/render/draw13.cpp
+++ b/src/osd/modules/render/draw13.cpp
@@ -60,7 +60,7 @@ static inline bool is_transparent(const float &a)
// CONSTRUCTOR & DESTRUCTOR
//============================================================
-renderer_sdl2::renderer_sdl2(osd_window *window, int extra_flags)
+renderer_sdl2::renderer_sdl2(std::shared_ptr<osd_window> window, int extra_flags)
: osd_renderer(window, FLAG_NEEDS_OPENGL | extra_flags)
, m_sdl_renderer(nullptr)
, m_blittimer(0)
@@ -434,10 +434,12 @@ int renderer_sdl2::create()
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0");
}
+ auto win = assert_window();
+
if (video_config.waitvsync)
- m_sdl_renderer = SDL_CreateRenderer(window().platform_window<SDL_Window*>(), -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
+ m_sdl_renderer = SDL_CreateRenderer(win->platform_window<SDL_Window*>(), -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
else
- m_sdl_renderer = SDL_CreateRenderer(window().platform_window<SDL_Window*>(), -1, SDL_RENDERER_ACCELERATED);
+ m_sdl_renderer = SDL_CreateRenderer(win->platform_window<SDL_Window*>(), -1, SDL_RENDERER_ACCELERATED);
if (!m_sdl_renderer)
{
@@ -481,11 +483,15 @@ int renderer_sdl2::xy_to_render_target(int x, int y, int *xt, int *yt)
void renderer_sdl2::destroy_all_textures()
{
- if(window().m_primlist)
+ auto win = assert_window();
+ if (win == nullptr)
+ return;
+
+ if(win->m_primlist)
{
- window().m_primlist->acquire_lock();
+ win->m_primlist->acquire_lock();
m_texlist.reset();
- window().m_primlist->release_lock();
+ win->m_primlist->release_lock();
}
else
m_texlist.reset();
@@ -506,7 +512,8 @@ int renderer_sdl2::draw(int update)
return 0;
}
- osd_dim wdim = window().get_size();
+ auto win = assert_window();
+ osd_dim wdim = win->get_size();
if (has_flags(FI_CHANGED) || (wdim.width() != m_width) || (wdim.height() != m_height))
{
@@ -553,10 +560,10 @@ int renderer_sdl2::draw(int update)
m_last_hofs = hofs;
m_last_vofs = vofs;
- window().m_primlist->acquire_lock();
+ win->m_primlist->acquire_lock();
// now draw
- for (render_primitive &prim : *window().m_primlist)
+ for (render_primitive &prim : *win->m_primlist)
{
Uint8 sr, sg, sb, sa;
@@ -586,7 +593,7 @@ int renderer_sdl2::draw(int update)
}
}
- window().m_primlist->release_lock();
+ win->m_primlist->release_lock();
m_last_blit_pixels = blit_pixels;
m_last_blit_time = -osd_ticks();
@@ -930,7 +937,8 @@ texture_info * renderer_sdl2::texture_update(const render_primitive &prim)
quad_setup_data setup;
texture_info *texture;
- setup.compute(prim, window().prescale());
+ auto win = assert_window();
+ setup.compute(prim, win->prescale());
texture = texture_find(prim, setup);
@@ -957,12 +965,16 @@ texture_info * renderer_sdl2::texture_update(const render_primitive &prim)
render_primitive_list *renderer_sdl2::get_primitives()
{
- osd_dim nd = window().get_size();
+ auto win = assert_window();
+ if (win == nullptr)
+ return nullptr;
+
+ osd_dim nd = win->get_size();
if (nd != m_blit_dim)
{
m_blit_dim = nd;
notify_changed();
}
- window().target()->set_bounds(m_blit_dim.width(), m_blit_dim.height(), window().pixel_aspect());
- return &window().target()->get_primitives();
+ win->target()->set_bounds(m_blit_dim.width(), m_blit_dim.height(), win->pixel_aspect());
+ return &win->target()->get_primitives();
}