summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/d3d
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/d3d')
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp11
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.h5
2 files changed, 10 insertions, 6 deletions
diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp
index 63045dc1fce..6a72e6f5369 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.cpp
+++ b/src/osd/modules/render/d3d/d3dhlsl.cpp
@@ -1807,10 +1807,9 @@ static void get_vector(const char *data, int count, float *out, bool report_erro
// be done in a more ideal way.
//============================================================
-slider_state* shaders::slider_alloc(running_machine &machine, int id, const char *title, int32_t minval, int32_t defval, int32_t maxval, int32_t incval, void *arg)
+std::unique_ptr<slider_state> shaders::slider_alloc(int id, const char *title, int32_t minval, int32_t defval, int32_t maxval, int32_t incval, void *arg)
{
- int size = sizeof(slider_state) + strlen(title);
- slider_state *state = reinterpret_cast<slider_state *>(auto_alloc_array_clear(machine, uint8_t, size));
+ auto state = make_unique_clear<slider_state>();
state->minval = minval;
state->defval = defval;
@@ -1822,7 +1821,7 @@ slider_state* shaders::slider_alloc(running_machine &machine, int id, const char
state->arg = arg;
state->id = id;
- strcpy(state->description, title);
+ state->description = title;
return state;
}
@@ -2126,6 +2125,7 @@ void *shaders::get_slider_option(int id, int index)
void shaders::init_slider_list()
{
m_sliders.clear();
+ m_core_sliders.clear();
for (slider* slider : internal_sliders)
{
@@ -2184,7 +2184,7 @@ void shaders::init_slider_list()
break;
}
- slider_state* core_slider = slider_alloc(*machine, desc->id, name.c_str(), desc->minval, desc->defval, desc->maxval, desc->step, slider_arg);
+ std::unique_ptr<slider_state> core_slider = slider_alloc(desc->id, name.c_str(), desc->minval, desc->defval, desc->maxval, desc->step, slider_arg);
ui::menu_item item;
item.text = core_slider->description;
@@ -2193,6 +2193,7 @@ void shaders::init_slider_list()
item.ref = core_slider;
item.type = ui::menu_item_type::SLIDER;
m_sliders.push_back(item);
+ m_core_sliders.push_back(std::move(core_slider));
}
}
}
diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h
index ed25d2c52e8..ff4c7527a52 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.h
+++ b/src/osd/modules/render/d3d/d3dhlsl.h
@@ -21,6 +21,8 @@
// Typedefs for dynamically loaded functions
typedef HRESULT (WINAPI *d3dx_create_effect_from_file_fn)(LPDIRECT3DDEVICE9, LPCTSTR, const D3DXMACRO *, LPD3DXINCLUDE, DWORD, LPD3DXEFFECTPOOL, LPD3DXEFFECT *, LPD3DXBUFFER *);
+struct slider_state;
+
class effect;
class shaders;
@@ -309,7 +311,7 @@ public:
// slider-related functions
virtual int32_t slider_changed(running_machine &machine, void *arg, int /*id*/, std::string *str, int32_t newval) override;
- slider_state* slider_alloc(running_machine &machine, int id, const char *title, int32_t minval, int32_t defval, int32_t maxval, int32_t incval, void *arg);
+ std::unique_ptr<slider_state> slider_alloc(int id, const char *title, int32_t minval, int32_t defval, int32_t maxval, int32_t incval, void *arg);
void init_slider_list();
std::vector<ui::menu_item> get_slider_list() { return m_sliders; }
void *get_slider_option(int id, int index = 0);
@@ -396,6 +398,7 @@ private:
std::vector<slider*> internal_sliders;
std::vector<ui::menu_item> m_sliders;
+ std::vector<std::unique_ptr<slider_state>> m_core_sliders;
static slider_desc s_sliders[];
static hlsl_options last_options; // last used options