Create SHADER_CTL_SCALE
This commit is contained in:
parent
47cf62cdbd
commit
cdd6684bb9
|
@ -656,6 +656,7 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
|
video_shader_ctx_scale_t scaler;
|
||||||
struct gfx_fbo_scale scale, scale_last;
|
struct gfx_fbo_scale scale, scale_last;
|
||||||
|
|
||||||
if (!gl || video_shader_driver_num_shaders() == 0)
|
if (!gl || video_shader_driver_num_shaders() == 0)
|
||||||
|
@ -663,8 +664,15 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
|
||||||
|
|
||||||
video_driver_get_size(&width, &height);
|
video_driver_get_size(&width, &height);
|
||||||
|
|
||||||
video_shader_driver_scale(1, &scale);
|
scaler.idx = 1;
|
||||||
video_shader_driver_scale(video_shader_driver_num_shaders(), &scale_last);
|
scaler.scale = &scale;
|
||||||
|
|
||||||
|
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
|
||||||
|
|
||||||
|
scaler.idx = video_shader_driver_num_shaders();
|
||||||
|
scaler.scale = &scale_last;
|
||||||
|
|
||||||
|
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
|
||||||
|
|
||||||
/* we always want FBO to be at least initialized on startup for consoles */
|
/* we always want FBO to be at least initialized on startup for consoles */
|
||||||
if (video_shader_driver_num_shaders() == 1 && !scale.valid)
|
if (video_shader_driver_num_shaders() == 1 && !scale.valid)
|
||||||
|
@ -692,7 +700,10 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height)
|
||||||
|
|
||||||
for (i = 1; i < gl->fbo_pass; i++)
|
for (i = 1; i < gl->fbo_pass; i++)
|
||||||
{
|
{
|
||||||
video_shader_driver_scale(i + 1, &gl->fbo_scale[i]);
|
scaler.idx = i + 1;
|
||||||
|
scaler.scale = &gl->fbo_scale[i];
|
||||||
|
|
||||||
|
video_shader_driver_ctl(SHADER_CTL_SCALE, &scaler);
|
||||||
|
|
||||||
if (!gl->fbo_scale[i].valid)
|
if (!gl->fbo_scale[i].valid)
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,17 +69,6 @@ struct video_shader *video_shader_driver_get_current_shader(void)
|
||||||
return video_poke->get_current_shader(video_driver);
|
return video_poke->get_current_shader(video_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
void video_shader_driver_scale(unsigned idx, struct gfx_fbo_scale *scale)
|
|
||||||
{
|
|
||||||
if (!scale || !current_shader)
|
|
||||||
return;
|
|
||||||
|
|
||||||
scale->valid = false;
|
|
||||||
|
|
||||||
if (current_shader->shader_scale)
|
|
||||||
current_shader->shader_scale(shader_data, idx, scale);
|
|
||||||
}
|
|
||||||
|
|
||||||
void video_shader_driver_use(void *data, unsigned index)
|
void video_shader_driver_use(void *data, unsigned index)
|
||||||
{
|
{
|
||||||
if (!current_shader)
|
if (!current_shader)
|
||||||
|
@ -222,6 +211,20 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
|
||||||
return current_shader->set_coords(coords->handle_data,
|
return current_shader->set_coords(coords->handle_data,
|
||||||
shader_data, coords->data);
|
shader_data, coords->data);
|
||||||
}
|
}
|
||||||
|
case SHADER_CTL_SCALE:
|
||||||
|
{
|
||||||
|
video_shader_ctx_scale_t *scaler = (video_shader_ctx_scale_t*)data;
|
||||||
|
if (!scaler || !scaler->scale)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
scaler->scale->valid = false;
|
||||||
|
|
||||||
|
if (!current_shader || !current_shader->shader_scale)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
current_shader->shader_scale(shader_data, scaler->idx, scaler->scale);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case SHADER_CTL_NONE:
|
case SHADER_CTL_NONE:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -63,7 +63,8 @@ enum video_shader_driver_ctl_state
|
||||||
SHADER_CTL_SET_PARAMS,
|
SHADER_CTL_SET_PARAMS,
|
||||||
SHADER_CTL_GET_FEEDBACK_PASS,
|
SHADER_CTL_GET_FEEDBACK_PASS,
|
||||||
SHADER_CTL_MIPMAP_INPUT,
|
SHADER_CTL_MIPMAP_INPUT,
|
||||||
SHADER_CTL_SET_COORDS
|
SHADER_CTL_SET_COORDS,
|
||||||
|
SHADER_CTL_SCALE
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct shader_backend
|
typedef struct shader_backend
|
||||||
|
@ -132,13 +133,17 @@ typedef struct video_shader_ctx_coords
|
||||||
const void *data;
|
const void *data;
|
||||||
} video_shader_ctx_coords_t;
|
} video_shader_ctx_coords_t;
|
||||||
|
|
||||||
|
typedef struct video_shader_ctx_scale
|
||||||
|
{
|
||||||
|
unsigned idx;
|
||||||
|
struct gfx_fbo_scale *scale;
|
||||||
|
} video_shader_ctx_scale_t;
|
||||||
|
|
||||||
extern const shader_backend_t gl_glsl_backend;
|
extern const shader_backend_t gl_glsl_backend;
|
||||||
extern const shader_backend_t hlsl_backend;
|
extern const shader_backend_t hlsl_backend;
|
||||||
extern const shader_backend_t gl_cg_backend;
|
extern const shader_backend_t gl_cg_backend;
|
||||||
extern const shader_backend_t shader_null_backend;
|
extern const shader_backend_t shader_null_backend;
|
||||||
|
|
||||||
void video_shader_driver_scale(unsigned idx, struct gfx_fbo_scale *scale);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* shader_ctx_find_driver:
|
* shader_ctx_find_driver:
|
||||||
* @ident : Identifier of shader context driver to find.
|
* @ident : Identifier of shader context driver to find.
|
||||||
|
|
Loading…
Reference in New Issue