From 40e71b93aea689aa64c5ac9af674d88a255b656d Mon Sep 17 00:00:00 2001 From: "Westley M. Martinez" Date: Mon, 12 Dec 2016 22:34:14 -0800 Subject: [PATCH] Add signal so that any future shaders relying on delta_time do not interfere with each other. src/osd/modules/render/d3d/d3dhlsl.cpp: update_t flag is reset for each emulated screen 0. src/ods/modules/render/d3d/d3dhlsl.h: Add update_t. --- src/osd/modules/render/d3d/d3dhlsl.cpp | 23 +++++++++++++---------- src/osd/modules/render/d3d/d3dhlsl.h | 1 + 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 48852ef20e0..5e390868f19 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -164,15 +164,15 @@ private: shaders::shaders() : d3dintf(nullptr), machine(nullptr), d3d(nullptr), post_fx_enable(false), oversampling_enable(false), - num_screens(0), curr_screen(0), acc_t(0), delta_t(0), shadow_texture(nullptr), options(nullptr), - black_surface(nullptr), black_texture(nullptr), recording_movie(false), render_snap(false), - snap_copy_target(nullptr), snap_copy_texture(nullptr), snap_target(nullptr), snap_texture(nullptr), - snap_width(0), snap_height(0), initialized(false), backbuffer(nullptr), curr_effect(nullptr), - default_effect(nullptr), prescale_effect(nullptr), post_effect(nullptr), distortion_effect(nullptr), - focus_effect(nullptr), phosphor_effect(nullptr), deconverge_effect(nullptr), color_effect(nullptr), - ntsc_effect(nullptr), bloom_effect(nullptr), downsample_effect(nullptr), vector_effect(nullptr), - curr_texture(nullptr), curr_render_target(nullptr), curr_poly(nullptr), - d3dx_create_effect_from_file_ptr(nullptr) + update_t(true), num_screens(0), curr_screen(0), acc_t(0), delta_t(0), shadow_texture(nullptr), + options(nullptr), black_surface(nullptr), black_texture(nullptr), recording_movie(false), + render_snap(false), snap_copy_target(nullptr), snap_copy_texture(nullptr), snap_target(nullptr), + snap_texture(nullptr), snap_width(0), snap_height(0), initialized(false), backbuffer(nullptr), + curr_effect(nullptr), default_effect(nullptr), prescale_effect(nullptr), post_effect(nullptr), + distortion_effect(nullptr), focus_effect(nullptr), phosphor_effect(nullptr), + deconverge_effect(nullptr), color_effect(nullptr), ntsc_effect(nullptr), bloom_effect(nullptr), + downsample_effect(nullptr), vector_effect(nullptr), curr_texture(nullptr), + curr_render_target(nullptr), curr_poly(nullptr), d3dx_create_effect_from_file_ptr(nullptr) { } @@ -905,10 +905,11 @@ double shaders::delta_time() { double t; - if (curr_screen == 0) { + if (update_t) { t = machine->time().as_double(); delta_t = t - acc_t; acc_t = t; + update_t = false; } return delta_t; } @@ -1428,6 +1429,8 @@ void shaders::render_quad(poly_info *poly, int vertnum) else if (PRIMFLAG_GET_VECTORBUF(poly->flags())) { curr_screen = curr_screen < num_screens ? curr_screen : 0; + if (curr_screen == 0) + update_t = true; int source_width = int(poly->prim_width() + 0.5f); int source_height = int(poly->prim_height() + 0.5f); diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h index 1e8386c8241..76f89284cc3 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.h +++ b/src/osd/modules/render/d3d/d3dhlsl.h @@ -347,6 +347,7 @@ private: bool post_fx_enable; // overall enable flag bool oversampling_enable; // oversampling enable flag + bool update_t; // signal for delta_t to be updated int num_screens; // number of emulated physical screens int curr_screen; // current screen for render target operations double acc_t; // accumulated machine time