From aec44b093e3aaeb73c1d11df8f1a982c78fdb73f Mon Sep 17 00:00:00 2001 From: Themaister Date: Thu, 26 May 2011 16:23:11 +0200 Subject: [PATCH] Add new transition_previous. --- gfx/shader_glsl.c | 2 ++ gfx/snes_state.c | 34 ++++++++++++++++++++++------------ gfx/snes_state.h | 3 ++- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/gfx/shader_glsl.c b/gfx/shader_glsl.c index bdfb6c4f35..22591ef69c 100644 --- a/gfx/shader_glsl.c +++ b/gfx/shader_glsl.c @@ -448,6 +448,8 @@ static bool get_import_value(xmlNodePtr ptr) tracker_type = SSNES_STATE_CAPTURE_PREV; else if (strcmp((const char*)semantic, "transition") == 0) tracker_type = SSNES_STATE_TRANSITION; + else if (strcmp((const char*)semantic, "transition_previous") == 0) + tracker_type = SSNES_STATE_TRANSITION_PREV; else { SSNES_ERR("Invalid semantic for import value.\n"); diff --git a/gfx/snes_state.c b/gfx/snes_state.c index 591d58e418..ceedd2af26 100644 --- a/gfx/snes_state.c +++ b/gfx/snes_state.c @@ -104,18 +104,6 @@ static void update_element( uniform->value = info->ptr[info->addr]; break; - case SSNES_STATE_TRANSITION: - if (info->old_value != info->ptr[info->addr]) - { - info->old_value = info->ptr[info->addr]; - info->frame_count = frame_count; - uniform->value = info->frame_count; - } - else - uniform->value = info->frame_count; - - break; - case SSNES_STATE_CAPTURE_PREV: if (info->prev[0] != info->ptr[info->addr]) { @@ -125,6 +113,28 @@ static void update_element( uniform->value = info->prev[1]; break; + case SSNES_STATE_TRANSITION: + if (info->old_value != info->ptr[info->addr]) + { + info->old_value = info->ptr[info->addr]; + info->frame_count = frame_count; + } + uniform->value = info->frame_count; + + break; + + case SSNES_STATE_TRANSITION_PREV: + if (info->prev[0] != info->ptr[info->addr]) + { + info->old_value = info->ptr[info->addr]; + info->prev[1] = info->prev[0]; + info->prev[0] = frame_count; + info->frame_count = frame_count; + } + uniform->value = info->prev[1]; + + break; + default: break; } diff --git a/gfx/snes_state.h b/gfx/snes_state.h index a8f370ffc2..93179af188 100644 --- a/gfx/snes_state.h +++ b/gfx/snes_state.h @@ -24,7 +24,8 @@ enum snes_tracker_type { SSNES_STATE_CAPTURE, SSNES_STATE_TRANSITION, - SSNES_STATE_CAPTURE_PREV + SSNES_STATE_CAPTURE_PREV, + SSNES_STATE_TRANSITION_PREV }; enum snes_ram_type