mirror of
https://github.com/libretro/RetroArch
synced 2025-02-19 12:41:00 +00:00
Refactor frame_is_reversed - shader drivers should no longer
be dependent upon global state
This commit is contained in:
parent
78d0a87004
commit
576626ead0
@ -38,7 +38,7 @@
|
||||
#include <rhash.h>
|
||||
|
||||
#include "../../dynamic.h"
|
||||
|
||||
#include "../../rewind.h"
|
||||
#include "../video_state_tracker.h"
|
||||
|
||||
#if 0
|
||||
@ -266,7 +266,6 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height,
|
||||
const struct gfx_tex_info *feedback_info = (const struct gfx_tex_info*)_feedback_info;
|
||||
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
cg_shader_data_t *cg = (cg_shader_data_t*)driver->video_shader_data;
|
||||
|
||||
(void)data;
|
||||
@ -279,13 +278,13 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height,
|
||||
set_param_2f(cg->prg[cg->active_idx].tex_size_f, tex_width, tex_height);
|
||||
set_param_2f(cg->prg[cg->active_idx].out_size_f, out_width, out_height);
|
||||
set_param_1f(cg->prg[cg->active_idx].frame_dir_f,
|
||||
global->rewind.frame_is_reverse ? -1.0 : 1.0);
|
||||
state_manager_frame_is_reversed() ? -1.0 : 1.0);
|
||||
|
||||
set_param_2f(cg->prg[cg->active_idx].vid_size_v, width, height);
|
||||
set_param_2f(cg->prg[cg->active_idx].tex_size_v, tex_width, tex_height);
|
||||
set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_height);
|
||||
set_param_1f(cg->prg[cg->active_idx].frame_dir_v,
|
||||
global->rewind.frame_is_reverse ? -1.0 : 1.0);
|
||||
state_manager_frame_is_reversed() ? -1.0 : 1.0);
|
||||
|
||||
if (cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v)
|
||||
{
|
||||
|
@ -963,7 +963,6 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
|
||||
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||
struct glsl_attrib *attr = (struct glsl_attrib*)attribs;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
glsl_shader_data_t *glsl = (glsl_shader_data_t*)driver->video_shader_data;
|
||||
|
||||
if (!glsl)
|
||||
@ -1002,7 +1001,7 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height,
|
||||
}
|
||||
|
||||
if (uni->frame_direction >= 0)
|
||||
glUniform1i(uni->frame_direction, global->rewind.frame_is_reverse ? -1 : 1);
|
||||
glUniform1i(uni->frame_direction, state_manager_frame_is_reversed() ? -1 : 1);
|
||||
|
||||
|
||||
for (i = 0; i < glsl->shader->luts; i++)
|
||||
|
@ -15,8 +15,10 @@
|
||||
*/
|
||||
|
||||
#include "shader_hlsl.h"
|
||||
|
||||
#include "../video_shader_parse.h"
|
||||
#include "../d3d/d3d.h"
|
||||
#include "../../rewind.h"
|
||||
|
||||
static const char *stock_hlsl_program =
|
||||
"void main_vertex\n"
|
||||
@ -117,7 +119,6 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
|
||||
(void)_feedback_info;
|
||||
const struct gfx_tex_info *fbo_info = (const struct gfx_tex_info*)_fbo_info;
|
||||
driver_t *driver = driver_get_ptr();
|
||||
global_t *global = global_get_ptr();
|
||||
hlsl_shader_data_t *hlsl = (hlsl_shader_data_t*)driver->video_shader_data;
|
||||
|
||||
if (!hlsl)
|
||||
@ -135,13 +136,13 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height,
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_f, tex_size, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_f, out_size, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_f, frame_cnt, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, global->rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, state_manager_frame_is_reversed() ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable);
|
||||
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].vid_size_v, ori_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_v, tex_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_2f(hlsl->prg[hlsl->active_idx].out_size_v, out_size, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_v, frame_cnt, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, global->rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, state_manager_frame_is_reversed() ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable);
|
||||
|
||||
/* TODO - set lookup textures/FBO textures/state parameters/etc */
|
||||
}
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "runloop.h"
|
||||
#include "runloop_data.h"
|
||||
#include "retroarch.h"
|
||||
#include "rewind.h"
|
||||
#include "performance.h"
|
||||
#include "input/input_remapping.h"
|
||||
#include "record/record_driver.h"
|
||||
@ -294,9 +295,7 @@ void retro_init_libretro_cbs(void *data)
|
||||
**/
|
||||
void retro_set_rewind_callbacks(void)
|
||||
{
|
||||
global_t *global = global_get_ptr();
|
||||
|
||||
if (global->rewind.frame_is_reverse)
|
||||
if (state_manager_frame_is_reversed())
|
||||
{
|
||||
pretro_set_audio_sample(audio_driver_sample_rewind);
|
||||
pretro_set_audio_sample_batch(audio_driver_sample_batch_rewind);
|
||||
|
12
rewind.c
12
rewind.c
@ -64,6 +64,8 @@ repeat {
|
||||
size thisstart;
|
||||
#endif
|
||||
|
||||
static bool frame_is_reversed;
|
||||
|
||||
size_t state_manager_raw_maxsize(size_t uncomp)
|
||||
{
|
||||
/* bytes covered by a compressed block */
|
||||
@ -588,3 +590,13 @@ void init_rewind(void)
|
||||
pretro_serialize(state, global->rewind.size);
|
||||
state_manager_push_do(global->rewind.state);
|
||||
}
|
||||
|
||||
bool state_manager_frame_is_reversed(void)
|
||||
{
|
||||
return frame_is_reversed;
|
||||
}
|
||||
|
||||
void state_manager_set_frame_is_reversed(bool value)
|
||||
{
|
||||
frame_is_reversed = value;
|
||||
}
|
||||
|
6
rewind.h
6
rewind.h
@ -22,9 +22,9 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include <boolean.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef struct state_manager state_manager_t;
|
||||
|
||||
@ -68,6 +68,10 @@ size_t state_manager_raw_compress(const void *src, const void *dst, size_t len,
|
||||
*/
|
||||
void state_manager_raw_decompress(const void *patch, size_t patchlen, void *data, size_t datalen);
|
||||
|
||||
bool state_manager_frame_is_reversed(void);
|
||||
|
||||
void state_manager_set_frame_is_reversed(bool value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -167,10 +167,10 @@ static void check_rewind(settings_t *settings,
|
||||
{
|
||||
static bool first = true;
|
||||
|
||||
if (global->rewind.frame_is_reverse)
|
||||
if (state_manager_frame_is_reversed())
|
||||
{
|
||||
audio_driver_frame_is_reverse();
|
||||
global->rewind.frame_is_reverse = false;
|
||||
state_manager_set_frame_is_reversed(false);
|
||||
}
|
||||
|
||||
if (first)
|
||||
@ -188,7 +188,7 @@ static void check_rewind(settings_t *settings,
|
||||
|
||||
if (state_manager_pop(global->rewind.state, &buf))
|
||||
{
|
||||
global->rewind.frame_is_reverse = true;
|
||||
state_manager_set_frame_is_reversed(true);
|
||||
audio_driver_setup_rewind();
|
||||
|
||||
rarch_main_msg_queue_push_new(MSG_REWINDING, 0,
|
||||
@ -243,7 +243,7 @@ static void check_slowmotion(settings_t *settings, global_t *global,
|
||||
if (settings->video.black_frame_insertion)
|
||||
video_driver_cached_frame();
|
||||
|
||||
if (global->rewind.frame_is_reverse)
|
||||
if (state_manager_frame_is_reversed())
|
||||
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION_REWIND, 0, 30, true);
|
||||
else
|
||||
rarch_main_msg_queue_push_new(MSG_SLOW_MOTION, 0, 30, true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user