trunk/src/osd/modules/render/draw13.cpp
r253650 | r253651 | |
899 | 899 | } |
900 | 900 | |
901 | 901 | //============================================================ |
| 902 | // exit |
| 903 | //============================================================ |
| 904 | |
| 905 | void 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 | //============================================================ |
902 | 928 | // texture_update |
903 | 929 | //============================================================ |
904 | 930 | |
trunk/src/osd/modules/render/draw13.h
r253650 | r253651 | |
156 | 156 | destroy_all_textures(); |
157 | 157 | SDL_DestroyRenderer(m_sdl_renderer); |
158 | 158 | 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 | | } |
178 | 159 | } |
179 | 160 | |
180 | | virtual int create() override; |
181 | 161 | static bool init(running_machine &machine); |
| 162 | static void exit(); |
| 163 | |
| 164 | virtual int create() override; |
182 | 165 | virtual int draw(const int update) override; |
183 | 166 | virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override; |
184 | 167 | virtual render_primitive_list *get_primitives() override; |
| 168 | |
185 | 169 | int RendererSupportsFormat(Uint32 format, Uint32 access, const char *sformat); |
186 | 170 | |
187 | 171 | SDL_Renderer * m_sdl_renderer; |
trunk/src/osd/modules/render/drawbgfx.cpp
r253650 | r253651 | |
62 | 62 | // TYPES |
63 | 63 | //============================================================ |
64 | 64 | |
| 65 | bool renderer_bgfx::s_window_set = false; |
65 | 66 | |
66 | 67 | //============================================================ |
67 | 68 | // renderer_bgfx::create |
r253650 | r253651 | |
100 | 101 | m_height[window().m_index] = wdim.height(); |
101 | 102 | if (window().m_index == 0) |
102 | 103 | { |
| 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 | } |
103 | 116 | #ifdef OSD_WINDOWS |
104 | 117 | bgfx::winSetHwnd(window().m_hwnd); |
105 | 118 | #else |
r253650 | r253651 | |
110 | 123 | // Enable debug text. |
111 | 124 | bgfx::setDebug(BGFX_DEBUG_TEXT); //BGFX_DEBUG_STATS |
112 | 125 | m_dimensions = osd_dim(m_width[0], m_height[0]); |
113 | | |
114 | | ScreenVertex::init(); |
115 | 126 | } |
116 | 127 | |
117 | 128 | m_textures = new texture_manager(); |
r253650 | r253651 | |
160 | 171 | delete m_textures; |
161 | 172 | delete m_effects; |
162 | 173 | delete m_shaders; |
| 174 | } |
163 | 175 | |
| 176 | void renderer_bgfx::exit() |
| 177 | { |
164 | 178 | bgfx::shutdown(); |
165 | 179 | } |
166 | 180 | |
167 | | |
168 | 181 | //============================================================ |
169 | 182 | // drawsdl_xy_to_render_target |
170 | 183 | //============================================================ |
trunk/src/osd/modules/render/drawbgfx.h
r253650 | r253651 | |
29 | 29 | } |
30 | 30 | virtual ~renderer_bgfx(); |
31 | 31 | |
| 32 | static bool init(running_machine &machine) { return false; } |
| 33 | static void exit(); |
| 34 | |
32 | 35 | virtual int create() override; |
33 | 36 | virtual slider_state* get_slider_list() override; |
34 | | static bool init(running_machine &machine) { return false; } |
35 | 37 | virtual int draw(const int update) override; |
36 | 38 | #ifdef OSD_SDL |
37 | 39 | virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override; |
r253650 | r253651 | |
118 | 120 | enum : uint16_t { CACHE_SIZE = 1024 }; |
119 | 121 | enum : uint32_t { PACKABLE_SIZE = 128 }; |
120 | 122 | enum : UINT32 { WHITE_HASH = 0x87654321 }; |
| 123 | |
| 124 | static bool s_window_set; |
121 | 125 | }; |
122 | 126 | |
123 | 127 | #endif |
trunk/src/osd/modules/render/drawd3d.h
r253650 | r253651 | |
6 | 6 | // |
7 | 7 | //============================================================ |
8 | 8 | |
| 9 | #pragma once |
| 10 | |
9 | 11 | #ifndef __WIN_DRAWD3D__ |
10 | 12 | #define __WIN_DRAWD3D__ |
11 | 13 | |
r253650 | r253651 | |
41 | 43 | renderer_d3d9(osd_window *window); |
42 | 44 | virtual ~renderer_d3d9(); |
43 | 45 | |
| 46 | static bool init(running_machine &machine); |
| 47 | static void exit(); |
| 48 | |
44 | 49 | virtual int create() override; |
45 | 50 | virtual slider_state* get_slider_list() override; |
46 | | static bool init(running_machine &machine); |
47 | 51 | virtual render_primitive_list *get_primitives() override; |
48 | 52 | virtual int draw(const int update) override; |
49 | 53 | virtual void save() override; |
trunk/src/osd/modules/render/drawsdl.h
r253650 | r253651 | |
36 | 36 | } |
37 | 37 | virtual ~renderer_sdl2(); |
38 | 38 | |
| 39 | static bool init(running_machine &machine); |
| 40 | static void exit() { } |
| 41 | |
39 | 42 | virtual int create() override; |
40 | 43 | virtual int draw(const int update) override; |
41 | 44 | virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) override; |
42 | 45 | virtual render_primitive_list *get_primitives() override; |
43 | 46 | |
44 | | static bool init(running_machine &machine); |
45 | | |
46 | 47 | private: |
47 | 48 | void show_info(struct SDL_RendererInfo *render_info); |
48 | 49 | |
trunk/src/osd/sdl/window.cpp
r253650 | r253651 | |
351 | 351 | global_free(temp); |
352 | 352 | } |
353 | 353 | |
| 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 | |
354 | 374 | // if we're multithreaded, clean up the window thread |
355 | 375 | if (multithreading_enabled) |
356 | 376 | { |
r253650 | r253651 | |
541 | 561 | window->m_windowed_dim = window->get_size(); |
542 | 562 | } |
543 | 563 | |
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 | } |
546 | 569 | |
547 | 570 | bool is_osx = false; |
548 | 571 | #ifdef SDLMAME_MACOSX |
trunk/src/osd/windows/window.cpp
r253650 | r253651 | |
325 | 325 | global_free(temp); |
326 | 326 | } |
327 | 327 | |
| 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 | |
328 | 351 | // if we're multithreaded, clean up the window thread |
329 | 352 | if (multithreading_enabled) |
330 | 353 | { |
r253650 | r253651 | |
375 | 398 | |
376 | 399 | win_window_info::~win_window_info() |
377 | 400 | { |
| 401 | if (m_renderer != nullptr) |
| 402 | { |
| 403 | delete m_renderer; |
| 404 | } |
378 | 405 | } |
379 | 406 | |
380 | 407 | |
r253650 | r253651 | |
1283 | 1310 | // finish off by trying to initialize DirectX; if we fail, ignore it |
1284 | 1311 | if (m_renderer != nullptr) |
1285 | 1312 | { |
1286 | | global_free(m_renderer); |
| 1313 | delete m_renderer; |
1287 | 1314 | } |
1288 | 1315 | m_renderer = osd_renderer::make_for_type(video_config.mode, reinterpret_cast<osd_window *>(this)); |
1289 | 1316 | if (m_renderer->create()) |
r253650 | r253651 | |
1938 | 1965 | m_fullscreen = fullscreen; |
1939 | 1966 | |
1940 | 1967 | // kill off the drawers |
1941 | | global_free(m_renderer); |
| 1968 | delete m_renderer; |
1942 | 1969 | m_renderer = nullptr; |
1943 | 1970 | |
1944 | 1971 | // hide ourself |
r253650 | r253651 | |
1996 | 2023 | if (video_config.mode != VIDEO_MODE_NONE) |
1997 | 2024 | ShowWindow(m_hwnd, SW_SHOW); |
1998 | 2025 | |
1999 | | if (m_renderer != nullptr) |
2000 | | { |
2001 | | delete m_renderer; |
2002 | | } |
2003 | 2026 | m_renderer = reinterpret_cast<osd_renderer *>(osd_renderer::make_for_type(video_config.mode, reinterpret_cast<osd_window *>(this))); |
2004 | 2027 | if (m_renderer->create()) |
2005 | 2028 | exit(1); |