summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/windows/drawd3d.c
diff options
context:
space:
mode:
author Ryan Holtz <rholtz@batcountryentertainment.com>2013-01-13 15:07:11 +0000
committer Ryan Holtz <rholtz@batcountryentertainment.com>2013-01-13 15:07:11 +0000
commit4825263ebf648573e3945c7a4f77e8ccf0db81cc (patch)
tree49731bffe7be6f71464c3649d0b663ae8e8bba7c /src/osd/windows/drawd3d.c
parent2838333f3333820b95fba463ddd254d0ae273230 (diff)
- d3dhlsl.c: Made HLSL switchable at runtime, Ctrl+Alt+F12. [MooglyGuy]
Diffstat (limited to 'src/osd/windows/drawd3d.c')
-rw-r--r--src/osd/windows/drawd3d.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/osd/windows/drawd3d.c b/src/osd/windows/drawd3d.c
index 481ca37f3fa..6d9572685a0 100644
--- a/src/osd/windows/drawd3d.c
+++ b/src/osd/windows/drawd3d.c
@@ -217,8 +217,7 @@ INLINE void set_texture(d3d_info *d3d, d3d_texture_info *texture)
d3d->last_texture = texture;
d3d->last_texture_flags = (texture == NULL ? 0 : texture->flags);
result = (*d3dintf->device.set_texture)(d3d->device, 0, (texture == NULL) ? d3d->default_texture->d3dfinaltex : texture->d3dfinaltex);
- if (d3d->hlsl != NULL)
- d3d->hlsl->set_texture(texture);
+ d3d->hlsl->set_texture(texture);
if (result != D3D_OK) mame_printf_verbose("Direct3D: Error %08X during device set_texture call\n", (int)result);
}
}
@@ -348,6 +347,7 @@ static void drawd3d_window_destroy(win_window_info *window);
static render_primitive_list *drawd3d_window_get_primitives(win_window_info *window);
static void drawd3d_window_save(win_window_info *window);
static void drawd3d_window_record(win_window_info *window);
+static void drawd3d_window_toggle_fsfx(win_window_info *window);
static int drawd3d_window_draw(win_window_info *window, HDC dc, int update);
// devices
@@ -412,6 +412,7 @@ int drawd3d_init(running_machine &machine, win_draw_callbacks *callbacks)
callbacks->window_draw = drawd3d_window_draw;
callbacks->window_save = drawd3d_window_save;
callbacks->window_record = drawd3d_window_record;
+ callbacks->window_toggle_fsfx = drawd3d_window_toggle_fsfx;
callbacks->window_destroy = drawd3d_window_destroy;
return 0;
}
@@ -440,6 +441,7 @@ static int drawd3d_window_init(win_window_info *window)
// allocate memory for our structures
d3d = global_alloc_clear(d3d_info);
+ d3d->restarting = false;
window->drawdata = d3d;
d3d->window = window;
d3d->hlsl = NULL;
@@ -475,20 +477,25 @@ error:
+static void drawd3d_window_toggle_fsfx(win_window_info *window)
+{
+ d3d_info *d3d = (d3d_info *)window->drawdata;
+
+ d3d->restarting = true;
+}
+
static void drawd3d_window_record(win_window_info *window)
{
d3d_info *d3d = (d3d_info *)window->drawdata;
- if (d3d->hlsl != NULL)
- d3d->hlsl->window_record();
+ d3d->hlsl->window_record();
}
static void drawd3d_window_save(win_window_info *window)
{
d3d_info *d3d = (d3d_info *)window->drawdata;
- if (d3d->hlsl != NULL)
- d3d->hlsl->window_save();
+ d3d->hlsl->window_save();
}
@@ -551,6 +558,18 @@ static int drawd3d_window_draw(win_window_info *window, HDC dc, int update)
if (window->resize_state == RESIZE_STATE_RESIZING)
return 0;
+ // if we're restarting the renderer, leave things alone
+ if (d3d->restarting)
+ {
+ d3d->hlsl->toggle();
+
+ // free all existing resources and re-create
+ device_delete_resources(d3d);
+ device_create_resources(d3d);
+
+ d3d->restarting = false;
+ }
+
// if we haven't been created, just punt
if (d3d == NULL)
return 1;
@@ -811,7 +830,7 @@ static int device_create_resources(d3d_info *d3d)
VERTEX_BASE_FORMAT | ((d3d->hlsl->enabled() && d3dintf->post_fx_available) ? D3DFVF_XYZW : D3DFVF_XYZRHW), D3DPOOL_DEFAULT, &d3d->vertexbuf);
if (result != D3D_OK)
{
- mame_printf_error("Error creating vertex buffer (%08X)", (UINT32)result);
+ printf("Error creating vertex buffer (%08X)", (UINT32)result);
return 1;
}