diff options
author | 2016-04-25 17:22:25 +0200 | |
---|---|---|
committer | 2016-04-25 17:22:25 +0200 | |
commit | 9c2ef88573827db7a9b032f7ae86580f0c285bc1 (patch) | |
tree | 25579f21730982488480e9bfe3737e3fc1c5c18c /src/osd/modules/render/draw13.cpp | |
parent | 5e831f6506ee06f8c30cb113551ee0fec53804db (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.cpp | 40 |
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(); } |