Previous 199869 Revisions Next

r45139 Monday 22nd February, 2016 at 16:30:35 UTC by Ryan Holtz
Fix D3D and BGFX fullscreen toggle issues, nw
[src/osd/modules/render]draw13.cpp draw13.h drawbgfx.cpp drawbgfx.h drawd3d.cpp drawd3d.h drawgdi.h drawnone.h drawogl.cpp drawogl.h drawsdl.h
[src/osd/sdl]window.cpp
[src/osd/windows]video.cpp window.cpp

trunk/src/osd/modules/render/draw13.cpp
r253650r253651
899899}
900900
901901//============================================================
902//  exit
903//============================================================
904
905void renderer_sdl1::exit()
906{
907   if (s_blit_info_initialized)
908   {
909      for (int i = 0; i <= SDL_TEXFORMAT_LAST; i++)
910      {
911         for (copy_info_t *bi = s_blit_info[i]; bi != nullptr; )
912         {
913            if (bi->pixel_count)
914               osd_printf_verbose("%s -> %s %s blendmode 0x%02x, %d samples: %d KPixel/sec\n", bi->srcname, bi->dstname,
915                     bi->blitter->m_is_rot ? "rot" : "norot", bi->bm_mask, bi->samples,
916                     (int) bi->perf);
917            copy_info_t *freeme = bi;
918            bi = bi->next;
919            global_free(freeme);
920         }
921         s_blit_info[i] = nullptr;
922      }
923      s_blit_info_initialized = false;
924   }
925}
926
927//============================================================
902928//  texture_update
903929//============================================================
904930
trunk/src/osd/modules/render/draw13.h
r253650r253651
156156      destroy_all_textures();
157157      SDL_DestroyRenderer(m_sdl_renderer);
158158      m_sdl_renderer = nullptr;
159
160      if (s_blit_info_initialized)
161      {
162         for (int i = 0; i <= SDL_TEXFORMAT_LAST; i++)
163         {
164            for (copy_info_t *bi = s_blit_info[i]; bi != nullptr; )
165            {
166               if (bi->pixel_count)
167                  osd_printf_verbose("%s -> %s %s blendmode 0x%02x, %d samples: %d KPixel/sec\n", bi->srcname, bi->dstname,
168                        bi->blitter->m_is_rot ? "rot" : "norot", bi->bm_mask, bi->samples,
169                        (int) bi->perf);
170               copy_info_t *freeme = bi;
171               bi = bi->next;
172               global_free(freeme);
173            }
174            s_blit_info[i] = nullptr;
175         }
176         s_blit_info_initialized = false;
177      }
178159   }
179160
180   virtual int create() override;
181161   static bool init(running_machine &machine);
162   static void exit();
163
164   virtual int create() override;
182165   virtual int draw(const int update) override;
183166   virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override;
184167   virtual render_primitive_list *get_primitives() override;
168
185169   int RendererSupportsFormat(Uint32 format, Uint32 access, const char *sformat);
186170
187171   SDL_Renderer *  m_sdl_renderer;
trunk/src/osd/modules/render/drawbgfx.cpp
r253650r253651
6262//  TYPES
6363//============================================================
6464
65bool renderer_bgfx::s_window_set = false;
6566
6667//============================================================
6768//  renderer_bgfx::create
r253650r253651
100101   m_height[window().m_index] = wdim.height();
101102   if (window().m_index == 0)
102103   {
104      if (!s_window_set)
105      {
106         s_window_set = true;
107         ScreenVertex::init();
108      }
109      else
110      {
111         bgfx::shutdown();
112         bgfx::PlatformData blank_pd;
113         memset(&blank_pd, 0, sizeof(bgfx::PlatformData));
114         bgfx::setPlatformData(blank_pd);
115      }
103116#ifdef OSD_WINDOWS
104117      bgfx::winSetHwnd(window().m_hwnd);
105118#else
r253650r253651
110123      // Enable debug text.
111124      bgfx::setDebug(BGFX_DEBUG_TEXT); //BGFX_DEBUG_STATS
112125      m_dimensions = osd_dim(m_width[0], m_height[0]);
113
114      ScreenVertex::init();
115126   }
116127
117128   m_textures = new texture_manager();
r253650r253651
160171   delete m_textures;
161172   delete m_effects;
162173   delete m_shaders;
174}
163175
176void renderer_bgfx::exit()
177{
164178   bgfx::shutdown();
165179}
166180
167
168181//============================================================
169182//  drawsdl_xy_to_render_target
170183//============================================================
trunk/src/osd/modules/render/drawbgfx.h
r253650r253651
2929   }
3030   virtual ~renderer_bgfx();
3131
32   static bool init(running_machine &machine) { return false; }
33   static void exit();
34
3235   virtual int create() override;
3336   virtual slider_state* get_slider_list() override;
34   static bool init(running_machine &machine) { return false; }
3537   virtual int draw(const int update) override;
3638#ifdef OSD_SDL
3739   virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override;
r253650r253651
118120   enum : uint16_t { CACHE_SIZE = 1024 };
119121   enum : uint32_t { PACKABLE_SIZE = 128 };
120122   enum : UINT32 { WHITE_HASH = 0x87654321 };
123
124   static bool s_window_set;
121125};
122126
123127#endif
trunk/src/osd/modules/render/drawd3d.cpp
r253650r253651
960960   if (get_shaders() != nullptr && get_shaders()->recording())
961961      get_shaders()->window_record();
962962
963   if (d3dintf != nullptr)
964      (*d3dintf->d3d.release)(d3dintf);
965
966963   device_delete();
967964
968965   if (m_shaders_options != nullptr)
r253650r253651
972969   }
973970}
974971
972void renderer_d3d9::exit()
973{
974   if (d3dintf != nullptr)
975      (*d3dintf->d3d.release)(d3dintf);
976}
977
975978void renderer_d3d9::device_delete()
976979{
977980   if (m_shaders != nullptr)
trunk/src/osd/modules/render/drawd3d.h
r253650r253651
66//
77//============================================================
88
9#pragma once
10
911#ifndef __WIN_DRAWD3D__
1012#define __WIN_DRAWD3D__
1113
r253650r253651
4143   renderer_d3d9(osd_window *window);
4244   virtual ~renderer_d3d9();
4345
46   static bool init(running_machine &machine);
47   static void exit();
48
4449   virtual int create() override;
4550   virtual slider_state* get_slider_list() override;
46   static bool init(running_machine &machine);
4751   virtual render_primitive_list *get_primitives() override;
4852   virtual int draw(const int update) override;
4953   virtual void save() override;
trunk/src/osd/modules/render/drawgdi.h
r253650r253651
3737   }
3838   virtual ~renderer_gdi();
3939
40   static bool init(running_machine &machine) { return false; }
41   static void exit() { }
42
4043   virtual int create() override;
41   static bool init(running_machine &machine) { return false; }
4244   virtual render_primitive_list *get_primitives() override;
4345   virtual int draw(const int update) override;
4446   virtual void save() override {};
trunk/src/osd/modules/render/drawnone.h
r253650r253651
2222
2323   virtual ~renderer_none() { }
2424
25   static bool init(running_machine &machine) { return false; }
26   static void exit() { }
27
2528   virtual int create() override { return 0; }
26   static bool init(running_machine &machine) { return false; }
2729   virtual render_primitive_list *get_primitives() override;
2830   virtual int draw(const int update) override { return 0; }
2931   virtual void save() override { }
trunk/src/osd/modules/render/drawogl.cpp
r253650r253651
302302
303303   global_free(m_gl_context);
304304   m_gl_context = nullptr;
305}
305306
307void renderer_ogl::exit()
308{
306309   for (int i = 0; i < video_config.glsl_shader_mamebm_num; i++)
307310   {
308311      if (nullptr != video_config.glsl_shader_mamebm[i])
trunk/src/osd/modules/render/drawogl.h
r253650r253651
130130   }
131131   virtual ~renderer_ogl();
132132
133   static bool init(running_machine &machine);
134   static void exit();
135
133136   virtual int create() override;
134   static bool init(running_machine &machine);
135137   virtual int draw(const int update) override;
136138
137139#ifndef OSD_WINDOWS
trunk/src/osd/modules/render/drawsdl.h
r253650r253651
3636   }
3737   virtual ~renderer_sdl2();
3838
39   static bool init(running_machine &machine);
40   static void exit() { }
41
3942   virtual int create() override;
4043   virtual int draw(const int update) override;
4144   virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override;
4245   virtual render_primitive_list *get_primitives() override;
4346
44   static bool init(running_machine &machine);
45
4647private:
4748   void show_info(struct SDL_RendererInfo *render_info);
4849
trunk/src/osd/sdl/window.cpp
r253650r253651
351351      global_free(temp);
352352   }
353353
354   switch(video_config.mode)
355   {
356      case VIDEO_MODE_SDL2ACCEL:
357         renderer_sdl2::exit();
358         break;
359      case VIDEO_MODE_SOFT:
360         renderer_sdl1::exit();
361         break;
362      case VIDEO_MODE_BGFX:
363         renderer_bgfx::exit();
364         break;
365#if (USE_OPENGL)
366      case VIDEO_MODE_OPENGL:
367         renderer_ogl::exit();
368         break;
369#endif
370      default:
371         break;
372   }
373
354374   // if we're multithreaded, clean up the window thread
355375   if (multithreading_enabled)
356376   {
r253650r253651
541561      window->m_windowed_dim = window->get_size();
542562   }
543563
544   delete window->m_renderer;
545   window->m_renderer = nullptr;
564   if (window->m_renderer != nullptr)
565   {
566      delete window->m_renderer;
567      window->m_renderer = nullptr;
568   }
546569
547570   bool is_osx = false;
548571#ifdef SDLMAME_MACOSX
trunk/src/osd/windows/video.cpp
r253650r253651
370370   video_config.filter        = options().filter();
371371   video_config.keepaspect    = options().keep_aspect();
372372   video_config.numscreens    = options().numscreens();
373   video_config.fullstretch   = options().uneven_stretch();
373374
374375   // if we are in debug mode, never go full screen
375376   if (machine().debug_flags & DEBUG_FLAG_OSD_ENABLED)
trunk/src/osd/windows/window.cpp
r253650r253651
325325      global_free(temp);
326326   }
327327
328   switch(video_config.mode)
329   {
330      case VIDEO_MODE_NONE:
331         renderer_none::exit();
332         break;
333      case VIDEO_MODE_GDI:
334         renderer_gdi::exit();
335         break;
336      case VIDEO_MODE_BGFX:
337         renderer_bgfx::exit();
338         break;
339#if (USE_OPENGL)
340      case VIDEO_MODE_OPENGL:
341         renderer_ogl::exit();
342         break;
343#endif
344      case VIDEO_MODE_D3D:
345         renderer_d3d9::exit();
346         break;
347      default:
348         break;
349   }
350
328351   // if we're multithreaded, clean up the window thread
329352   if (multithreading_enabled)
330353   {
r253650r253651
375398
376399win_window_info::~win_window_info()
377400{
401   if (m_renderer != nullptr)
402   {
403      delete m_renderer;
404   }
378405}
379406
380407
r253650r253651
12831310      // finish off by trying to initialize DirectX; if we fail, ignore it
12841311      if (m_renderer != nullptr)
12851312      {
1286         global_free(m_renderer);
1313         delete m_renderer;
12871314      }
12881315      m_renderer = osd_renderer::make_for_type(video_config.mode, reinterpret_cast<osd_window *>(this));
12891316      if (m_renderer->create())
r253650r253651
19381965   m_fullscreen = fullscreen;
19391966
19401967   // kill off the drawers
1941   global_free(m_renderer);
1968   delete m_renderer;
19421969   m_renderer = nullptr;
19431970
19441971   // hide ourself
r253650r253651
19962023      if (video_config.mode != VIDEO_MODE_NONE)
19972024         ShowWindow(m_hwnd, SW_SHOW);
19982025
1999      if (m_renderer != nullptr)
2000      {
2001         delete m_renderer;
2002      }
20032026      m_renderer = reinterpret_cast<osd_renderer *>(osd_renderer::make_for_type(video_config.mode, reinterpret_cast<osd_window *>(this)));
20042027      if (m_renderer->create())
20052028         exit(1);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team