mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
Fixed missing shadow mask
- fixed missing shadow mask texture when switching between window mode and full screen
This commit is contained in:
parent
0095c77163
commit
1cda42b22e
@ -101,12 +101,6 @@ shaders::shaders() :
|
||||
|
||||
shaders::~shaders()
|
||||
{
|
||||
if (options != NULL)
|
||||
{
|
||||
last_options = *options;
|
||||
}
|
||||
options = NULL;
|
||||
|
||||
cache_target *currcache = cachehead;
|
||||
while(cachehead != NULL)
|
||||
{
|
||||
@ -654,11 +648,6 @@ void shaders::set_texture(texture_info *texture)
|
||||
|
||||
void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *renderer)
|
||||
{
|
||||
if (&machine->system() == &GAME_NAME(___empty))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!d3dintf->post_fx_available)
|
||||
{
|
||||
return;
|
||||
@ -669,6 +658,7 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende
|
||||
{
|
||||
printf("Direct3D: Unable to find D3DXCreateEffectFromFileW\n");
|
||||
d3dintf->post_fx_available = false;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -677,6 +667,12 @@ void shaders::init(base *d3dintf, running_machine *machine, d3d::renderer *rende
|
||||
this->d3d = renderer;
|
||||
this->options = renderer->get_shaders_options();
|
||||
|
||||
// check if no driver loaded (not all settings might be loaded yet)
|
||||
if (&machine->system() == &GAME_NAME(___empty))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
windows_options &winoptions = downcast<windows_options &>(machine->options());
|
||||
|
||||
master_enable = winoptions.d3d_hlsl_enable();
|
||||
@ -849,6 +845,11 @@ int shaders::create_resources(bool reset)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (last_options.params_init)
|
||||
{
|
||||
options = &last_options;
|
||||
}
|
||||
|
||||
HRESULT result = (*d3dintf->device.get_render_target)(d3d->get_device(), 0, &backbuffer);
|
||||
if (result != D3D_OK)
|
||||
{
|
||||
@ -2040,6 +2041,12 @@ void shaders::delete_resources(bool reset)
|
||||
return;
|
||||
}
|
||||
|
||||
if (options != NULL)
|
||||
{
|
||||
last_options = *options;
|
||||
options = NULL;
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
|
||||
cache_target *currcache = cachehead;
|
||||
|
@ -800,13 +800,6 @@ int renderer::device_create(HWND device_hwnd)
|
||||
device_delete();
|
||||
}
|
||||
|
||||
// create shader options only once
|
||||
if (m_shaders_options == NULL)
|
||||
{
|
||||
m_shaders_options = (hlsl_options*)global_alloc_clear(hlsl_options);
|
||||
m_shaders_options->params_init = false;
|
||||
}
|
||||
|
||||
// verify the caps
|
||||
int verify = device_verify_caps();
|
||||
if (verify == 2)
|
||||
@ -919,9 +912,21 @@ try_again:
|
||||
}
|
||||
}
|
||||
|
||||
int ret = m_shaders->create_resources(false);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
// create shader options only once
|
||||
if (m_shaders_options == NULL)
|
||||
{
|
||||
m_shaders_options = (hlsl_options*)global_alloc_clear(hlsl_options);
|
||||
m_shaders_options->params_init = false;
|
||||
}
|
||||
|
||||
m_shaders = (shaders*)global_alloc_clear(shaders);
|
||||
m_shaders->init(d3dintf, &window().machine(), this);
|
||||
|
||||
int failed = m_shaders->create_resources(false);
|
||||
if (failed)
|
||||
{
|
||||
return failed;
|
||||
}
|
||||
|
||||
return device_create_resources();
|
||||
}
|
||||
@ -998,13 +1003,13 @@ int renderer::device_create_resources()
|
||||
|
||||
renderer::~renderer()
|
||||
{
|
||||
device_delete();
|
||||
|
||||
if (m_shaders_options != NULL)
|
||||
{
|
||||
global_free(m_shaders_options);
|
||||
m_shaders_options = NULL;
|
||||
}
|
||||
m_shaders_options = NULL;
|
||||
|
||||
device_delete();
|
||||
}
|
||||
|
||||
void renderer::device_delete()
|
||||
@ -1024,16 +1029,16 @@ void renderer::device_delete()
|
||||
if (m_texture_manager != NULL)
|
||||
{
|
||||
global_free(m_texture_manager);
|
||||
m_texture_manager = NULL;
|
||||
}
|
||||
m_texture_manager = NULL;
|
||||
|
||||
// free the device itself
|
||||
if (m_device != NULL)
|
||||
{
|
||||
(*d3dintf->device.reset)(m_device, &m_presentation);
|
||||
(*d3dintf->device.release)(m_device);
|
||||
m_device = NULL;
|
||||
}
|
||||
m_device = NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -1044,11 +1049,16 @@ void renderer::device_delete()
|
||||
void renderer::device_delete_resources()
|
||||
{
|
||||
if (m_texture_manager != NULL)
|
||||
{
|
||||
m_texture_manager->delete_resources();
|
||||
}
|
||||
|
||||
// free the vertex buffer
|
||||
if (m_vertexbuf != NULL)
|
||||
{
|
||||
(*d3dintf->vertexbuf.release)(m_vertexbuf);
|
||||
m_vertexbuf = NULL;
|
||||
m_vertexbuf = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1060,9 +1070,6 @@ int renderer::device_verify_caps()
|
||||
{
|
||||
int retval = 0;
|
||||
|
||||
m_shaders = (shaders*)global_alloc_clear(shaders);
|
||||
m_shaders->init(d3dintf, &window().machine(), this);
|
||||
|
||||
DWORD tempcaps;
|
||||
HRESULT result = (*d3dintf->d3d.get_caps_dword)(d3dintf, m_adapter, D3DDEVTYPE_HAL, CAPS_MAX_PS30_INSN_SLOTS, &tempcaps);
|
||||
if (result != D3D_OK) osd_printf_verbose("Direct3D Error %08X during get_caps_dword call\n", (int)result);
|
||||
@ -1138,9 +1145,8 @@ int renderer::device_test_cooperative()
|
||||
osd_printf_verbose("Direct3D: resetting device\n");
|
||||
|
||||
// free all existing resources and call reset on the device
|
||||
//device_delete();
|
||||
device_delete_resources();
|
||||
m_shaders->delete_resources(true);
|
||||
device_delete_resources();
|
||||
result = (*d3dintf->device.reset)(m_device, &m_presentation);
|
||||
|
||||
// if it didn't work, punt to GDI
|
||||
|
Loading…
Reference in New Issue
Block a user