summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emu/render.cpp14
-rw-r--r--src/emu/render.h4
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp17
-rw-r--r--src/osd/modules/render/drawd3d.cpp5
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();
}