diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/render.cpp | 14 | ||||
-rw-r--r-- | src/emu/render.h | 4 | ||||
-rw-r--r-- | src/osd/modules/render/d3d/d3dhlsl.cpp | 17 | ||||
-rw-r--r-- | src/osd/modules/render/drawd3d.cpp | 5 |
4 files changed, 36 insertions, 4 deletions
diff --git a/src/emu/render.cpp b/src/emu/render.cpp index c86b3f914c5..e823f1fb7cf 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -924,7 +924,9 @@ render_target::render_target(render_manager &manager, const char *layoutfile, UI m_base_view(NULL), m_base_orientation(ROT0), m_maxtexwidth(65536), - m_maxtexheight(65536) + m_maxtexheight(65536), + m_scale_primitives(true), + m_offset_primitives(true) { // determine the base layer configuration based on options m_base_layerconfig.set_backdrops_enabled(manager.machine().options().use_backdrops()); @@ -1659,6 +1661,16 @@ void render_target::add_container_primitives(render_primitive_list &list, const float yoffs = (container_xform.orientation & ORIENTATION_SWAP_XY) ? container.xoffset() : container.yoffset(); if (container_xform.orientation & ORIENTATION_FLIP_X) xoffs = -xoffs; if (container_xform.orientation & ORIENTATION_FLIP_Y) yoffs = -yoffs; + if (!m_scale_primitives) + { + xscale = 1.0f; + yscale = 1.0f; + } + if (!m_offset_primitives) + { + xoffs = 0.0f; + yoffs = 0.0f; + } container_xform.xscale = xform.xscale * xscale; container_xform.yscale = xform.yscale * yscale; if (xform.no_center) diff --git a/src/emu/render.h b/src/emu/render.h index f3b37fb9aed..ad1bd7af4a9 100644 --- a/src/emu/render.h +++ b/src/emu/render.h @@ -898,6 +898,8 @@ public: void set_orientation(int orientation) { m_orientation = orientation; } void set_view(int viewindex); void set_max_texture_size(int maxwidth, int maxheight); + void set_scale_primitives(bool enable) { m_scale_primitives = enable; } + void set_offset_primitives(bool enable) { m_offset_primitives = enable; } // layer config getters bool backdrops_enabled() const { return m_layerconfig.backdrops_enabled(); } @@ -996,6 +998,8 @@ private: simple_list<render_container> m_debug_containers; // list of debug containers INT32 m_clear_extent_count; // number of clear extents INT32 m_clear_extents[MAX_CLEAR_EXTENTS]; // array of clear extents + bool m_scale_primitives; // determines if the primitive shall be scaled/offset by screen settings, + bool m_offset_primitives; // otherwise the respective render API will handle it (default is true) static render_screen_list s_empty_screen_list; }; diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 8c099c23dbf..a4c63f6380a 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -964,8 +964,7 @@ int shaders::create_resources(bool reset) color_effect->add_uniform("Saturation", uniform::UT_FLOAT, uniform::CU_COLOR_SATURATION); prescale_effect->add_uniform("ScreenDims", uniform::UT_VEC2, uniform::CU_SCREEN_DIMS); - prescale_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); - + deconverge_effect->add_uniform("ScreenDims", uniform::UT_VEC2, uniform::CU_SCREEN_DIMS); deconverge_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); deconverge_effect->add_uniform("SourceRect", uniform::UT_VEC2, uniform::CU_SOURCE_RECT); @@ -988,7 +987,7 @@ int shaders::create_resources(bool reset) bloom_effect->add_uniform("TargetDims", uniform::UT_VEC2, uniform::CU_TARGET_DIMS); post_effect->add_uniform("SourceDims", uniform::UT_VEC2, uniform::CU_SOURCE_DIMS); - post_effect->add_uniform("SourceRect", uniform::UT_VEC2, uniform::CU_SOURCE_RECT); // backward compatibility + post_effect->add_uniform("SourceRect", uniform::UT_VEC2, uniform::CU_SOURCE_RECT); post_effect->add_uniform("ScreenDims", uniform::UT_VEC2, uniform::CU_SCREEN_DIMS); post_effect->add_uniform("TargetDims", uniform::UT_VEC2, uniform::CU_TARGET_DIMS); post_effect->add_uniform("QuadDims", uniform::UT_VEC2, uniform::CU_QUAD_DIMS); // backward compatibility @@ -1371,10 +1370,22 @@ int shaders::post_pass(render_target *rt, int source_index, poly_info *poly, int ? 3 : 0; + render_container &screen_container = machine->first_screen()->container(); + + float xscale = screen_container.xscale(); + float yscale = screen_container.yscale(); + float xoffset = -screen_container.xoffset(); + float yoffset = -screen_container.yoffset(); + + float screen_scale[2] = { xscale, yscale }; + float screen_offset[2] = { xoffset, yoffset }; + curr_effect = post_effect; curr_effect->update_uniforms(); curr_effect->set_texture("ShadowTexture", shadow_texture == NULL ? NULL : shadow_texture->get_finaltex()); curr_effect->set_texture("DiffuseTexture", rt->prescale_texture[next_index]); + curr_effect->set_vector("ScreenScale", 2, screen_scale); + curr_effect->set_vector("ScreenOffset", 2, screen_offset); curr_effect->set_float("ScanlineOffset", texture->get_cur_frame() == 0 ? 0.0f : options->scanline_offset); curr_effect->set_bool("OrientationSwapXY", orientation_swap_xy); curr_effect->set_bool("RotationSwapXY", rotation_swap_xy); diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp index c10e539dd31..62012247463 100644 --- a/src/osd/modules/render/drawd3d.cpp +++ b/src/osd/modules/render/drawd3d.cpp @@ -245,6 +245,11 @@ render_primitive_list *d3d::renderer::get_primitives() window().target()->set_bounds(rect_width(&client), rect_height(&client), window().aspect()); window().target()->set_max_update_rate((get_refresh() == 0) ? get_origmode().RefreshRate : get_refresh()); } + if (m_shaders != NULL) + { + window().target()->set_scale_primitives(!m_shaders->enabled()); + window().target()->set_offset_primitives(!m_shaders->enabled()); + } return &window().target()->get_primitives(); } |