diff options
Diffstat (limited to 'src/osd/modules/render/drawd3d.h')
-rw-r--r-- | src/osd/modules/render/drawd3d.h | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/src/osd/modules/render/drawd3d.h b/src/osd/modules/render/drawd3d.h index 92923904d77..3ab7651d87c 100644 --- a/src/osd/modules/render/drawd3d.h +++ b/src/osd/modules/render/drawd3d.h @@ -5,25 +5,29 @@ // drawd3d.h - Win32 Direct3D header // //============================================================ +#ifndef MAME_OSD_MODULES_RENDER_DRAWD3D_H +#define MAME_OSD_MODULES_RENDER_DRAWD3D_H #pragma once -#ifndef __WIN_DRAWD3D__ -#define __WIN_DRAWD3D__ +#include "d3d/d3dcomm.h" + +#include "modules/lib/osdlib.h" +#include "modules/osdwindow.h" -#ifdef OSD_WINDOWS +#include "sliderdirtynotifier.h" #include <windows.h> #include <tchar.h> #include <mmsystem.h> #include <d3d9.h> #include <d3dx9.h> -#include <math.h> #undef interface -#include "d3d/d3dcomm.h" -#include "sliderdirtynotifier.h" -#include "modules/lib/osdlib.h" +#include <memory> +#include <vector> +#include <cmath> + //============================================================ // CONSTANTS @@ -36,15 +40,6 @@ // TYPE DEFINITIONS //============================================================ -struct d3d_base -{ - // internal objects - IDirect3D9 *d3dobj; - bool post_fx_available; - - osd::dynamic_module::ptr d3d9_dll; -}; - class shaders; struct hlsl_options; @@ -52,11 +47,10 @@ struct hlsl_options; class renderer_d3d9 : public osd_renderer, public slider_dirty_notifier { public: - renderer_d3d9(std::shared_ptr<osd_window> window); - virtual ~renderer_d3d9(); + using IDirect3D9Ptr = Microsoft::WRL::ComPtr<IDirect3D9>; - static bool init(running_machine &machine); - static void exit(); + renderer_d3d9(osd_window &window, const IDirect3D9Ptr &d3dobj); + virtual ~renderer_d3d9(); virtual int create() override; virtual render_primitive_list *get_primitives() override; @@ -113,11 +107,13 @@ public: vec2f get_dims() const { return vec2f(m_width, m_height); } int get_height() const { return m_height; } int get_refresh() const { return m_refresh; } + bool post_fx_available() const { return m_post_fx_available; } + void set_post_fx_unavailable() { m_post_fx_available = false; } - IDirect3DDevice9 * get_device() const { return m_device; } + IDirect3DDevice9 * get_device() const { return m_device.Get(); } D3DPRESENT_PARAMETERS * get_presentation() { return &m_presentation; } - IDirect3DVertexBuffer9 *get_vertex_buffer() const { return m_vertexbuf; } + IDirect3DVertexBuffer9 *get_vertex_buffer() const { return m_vertexbuf.Get(); } void set_toggle(bool toggle) { m_toggle = toggle; } @@ -125,27 +121,32 @@ public: D3DFORMAT get_pixel_format() const { return m_pixformat; } D3DDISPLAYMODE get_origmode() const { return m_origmode; } - uint32_t get_last_texture_flags() const { return m_last_texture_flags; } + uint32_t get_last_texture_flags() const { return m_last_texture_flags; } - d3d_texture_manager * get_texture_manager() const { return m_texture_manager; } + d3d_texture_manager * get_texture_manager() const { return m_texture_manager.get(); } texture_info * get_default_texture(); - shaders * get_shaders() const { return m_shaders; } + shaders * get_shaders() const { return m_shaders.get(); } private: + using IDirect3DDevice9Ptr = Microsoft::WRL::ComPtr<IDirect3DDevice9>; + using IDirect3DVertexBuffer9Ptr = Microsoft::WRL::ComPtr<IDirect3DVertexBuffer9>; + + const IDirect3D9Ptr m_d3dobj; // Direct3D 9 API object int m_adapter; // ordinal adapter number int m_width; // current width int m_height; // current height int m_refresh; // current refresh rate int m_create_error_count; // number of consecutive create errors + bool m_post_fx_available; - IDirect3DDevice9 * m_device; // pointer to the Direct3DDevice object + IDirect3DDevice9Ptr m_device; // pointer to the Direct3DDevice object int m_gamma_supported; // is full screen gamma supported? D3DPRESENT_PARAMETERS m_presentation; // set of presentation parameters D3DDISPLAYMODE m_origmode; // original display mode for the adapter D3DFORMAT m_pixformat; // pixel format we are using - IDirect3DVertexBuffer9 *m_vertexbuf; // pointer to the vertex buffer object + IDirect3DVertexBuffer9Ptr m_vertexbuf; // pointer to the vertex buffer object vertex * m_lockedbuf; // pointer to the locked vertex buffer int m_numverts; // number of accumulated vertices @@ -160,20 +161,18 @@ private: D3DFORMAT m_screen_format; // format to use for screen textures texture_info * m_last_texture; // previous texture - uint32_t m_last_texture_flags; // previous texture flags + uint32_t m_last_texture_flags; // previous texture flags int m_last_blendenable; // previous blendmode int m_last_blendop; // previous blendmode int m_last_blendsrc; // previous blendmode int m_last_blenddst; // previous blendmode int m_last_filter; // previous texture filter - uint32_t m_last_wrap; // previous wrap state + uint32_t m_last_wrap; // previous wrap state int m_last_modmode; // previous texture modulation - shaders * m_shaders; // HLSL interface + std::unique_ptr<shaders> m_shaders; // HLSL interface - d3d_texture_manager * m_texture_manager; // texture manager + std::unique_ptr<d3d_texture_manager> m_texture_manager; // texture manager }; -#endif // OSD_WINDOWS - -#endif // __WIN_DRAWD3D__ +#endif // MAME_OSD_MODULES_RENDER_DRAWD3D_H |