From ab3f0f0652f60a6a2f4566baa780672d63506731 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 4 Dec 2015 16:45:38 +0100 Subject: [PATCH] Create remaining video_shader_driver_* functions --- gfx/drivers/gl.c | 24 ++++++++++++---------- gfx/video_shader_driver.c | 43 +++++++++++++++++++++++++++++++++++++++ gfx/video_shader_driver.h | 18 ++++++++++++++++ 3 files changed, 74 insertions(+), 11 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index d8ab1f7a76..f41791af86 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -439,7 +439,7 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) mipmapped = video_shader_driver_mipmap_input(gl->shader, i + 2); min_filter = mipmapped ? base_mip_filt : base_filt; - if (gl->shader->filter_type(i + 2, &smooth)) + if (video_shader_driver_filter_type(gl->shader, i + 2, &smooth)) { min_filter = mipmapped ? (smooth ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST) @@ -448,7 +448,7 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) mag_filter = min_filter_to_mag(min_filter); - wrap = gl->shader->wrap_type(i + 2); + wrap = video_shader_driver_wrap_type(gl->shader, i + 2); wrap_enum = gl_wrap_type_to_enum(wrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); @@ -676,7 +676,7 @@ static void gl_init_fbo(gl_t *gl, unsigned fbo_width, unsigned fbo_height) gl->fbo_rect[i].width, gl->fbo_rect[i].height); } - gl->fbo_feedback_enable = gl->shader->get_feedback_pass(&gl->fbo_feedback_pass); + gl->fbo_feedback_enable = video_shader_driver_get_feedback_pass(gl->shader, &gl->fbo_feedback_pass); if (gl->fbo_feedback_enable && gl->fbo_feedback_pass < (unsigned)gl->fbo_pass) { @@ -1111,7 +1111,7 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count, /* Render to FBO with certain size. */ gl_set_viewport(gl, rect->img_width, rect->img_height, true, false); - gl->shader->set_params(gl, prev_rect->img_width, prev_rect->img_height, + video_shader_driver_set_params(gl->shader, gl, prev_rect->img_width, prev_rect->img_height, prev_rect->width, prev_rect->height, gl->vp.width, gl->vp.height, (unsigned int)frame_count, tex_info, gl->prev_info, feedback_info, fbo_tex_info, fbo_tex_info_cnt); @@ -1157,7 +1157,7 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count, glClear(GL_COLOR_BUFFER_BIT); gl_set_viewport(gl, width, height, false, true); - gl->shader->set_params(gl, + video_shader_driver_set_params(gl->shader, gl, prev_rect->img_width, prev_rect->img_height, prev_rect->width, prev_rect->height, gl->vp.width, gl->vp.height, (unsigned int)frame_count, @@ -1765,7 +1765,7 @@ static bool gl_frame(void *data, const void *frame, glClear(GL_COLOR_BUFFER_BIT); - gl->shader->set_params(gl, + video_shader_driver_set_params(gl->shader, gl, frame_width, frame_height, gl->tex_w, gl->tex_h, gl->vp.width, gl->vp.height, @@ -2593,7 +2593,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo gl->tex_mipmap = video_shader_driver_mipmap_input(gl->shader, 1); - if (gl->shader->filter_type(1, &force_smooth)) + if (video_shader_driver_filter_type(gl->shader, 1, &force_smooth)) gl->tex_min_filter = gl->tex_mipmap ? (force_smooth ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST) : (force_smooth ? GL_LINEAR : GL_NEAREST); @@ -2603,7 +2603,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo : (video->smooth ? GL_LINEAR : GL_NEAREST); gl->tex_mag_filter = min_filter_to_mag(gl->tex_min_filter); - gl->wrap_mode = gl_wrap_type_to_enum(gl->shader->wrap_type(1)); + gl->wrap_mode = gl_wrap_type_to_enum(video_shader_driver_wrap_type(gl->shader, 1)); gl_set_texture_fmts(gl, video->rgb32); @@ -2727,10 +2727,10 @@ static void gl_update_tex_filter_frame(gl_t *gl) context_bind_hw_render(gl, false); - if (!gl->shader->filter_type(1, &smooth)) + if (!video_shader_driver_filter_type(gl->shader, 1, &smooth)) smooth = settings->video.smooth; - wrap_mode = gl_wrap_type_to_enum(gl->shader->wrap_type(1)); + wrap_mode = gl_wrap_type_to_enum(video_shader_driver_wrap_type(gl->shader, 1)); gl->tex_mipmap = video_shader_driver_mipmap_input(gl->shader, 1); gl->video_info.smooth = smooth; @@ -3404,7 +3404,9 @@ static void gl_show_mouse(void *data, bool state) static struct video_shader *gl_get_current_shader(void *data) { gl_t *gl = (gl_t*)data; - return (gl && gl->shader) ? gl->shader->get_current_shader() : NULL; + if (!gl) + return NULL; + return video_shader_driver_direct_get_current_shader(gl->shader); } #endif diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index 11ec10574d..725fc0585a 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -155,3 +155,46 @@ bool video_shader_driver_set_mvp(const shader_backend_t *shader, void *data, con return false; return shader->set_mvp(data, mat); } + +bool video_shader_driver_filter_type(const shader_backend_t *shader, unsigned index, bool *smooth) +{ + if (!shader || !shader->filter_type) + return false; + return shader->filter_type(index, smooth); +} + +enum gfx_wrap_type video_shader_driver_wrap_type(const shader_backend_t *shader, unsigned index) +{ + return shader->wrap_type(index); +} + +bool video_shader_driver_get_feedback_pass(const shader_backend_t *shader, unsigned *pass) +{ + if (!shader || !shader->get_feedback_pass) + return false; + return shader->get_feedback_pass(pass); +} + +struct video_shader *video_shader_driver_direct_get_current_shader(const shader_backend_t *shader) +{ + if (!shader || !shader->get_current_shader) + return NULL; + return shader->get_current_shader(); +} + +void video_shader_driver_set_params(const shader_backend_t *shader, + void *data, unsigned width, unsigned height, + unsigned tex_width, unsigned tex_height, + unsigned out_width, unsigned out_height, + unsigned frame_counter, + const void *info, + const void *prev_info, + const void *feedback_info, + const void *fbo_info, unsigned fbo_info_cnt) +{ + if (!shader || !shader->set_params) + return NULL; + return shader->set_params(data, width, height, tex_width, tex_height, + out_width, out_height, frame_counter, info, prev_info, feedback_info, + fbo_info, fbo_info_cnt); +} diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index aa3c6fe40d..6bfb7213b4 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -134,6 +134,24 @@ bool video_shader_driver_set_mvp(const shader_backend_t *shader, void *data, con unsigned video_shader_driver_get_prev_textures(const shader_backend_t *shader); +bool video_shader_driver_filter_type(const shader_backend_t *shader, unsigned index, bool *smooth); + +enum gfx_wrap_type video_shader_driver_wrap_type(const shader_backend_t *shader, unsigned index); + +bool video_shader_driver_get_feedback_pass(const shader_backend_t *shader, unsigned *pass); + +struct video_shader *video_shader_driver_direct_get_current_shader(const shader_backend_t *shader); + +void video_shader_driver_set_params(const shader_backend_t *shader, + void *data, unsigned width, unsigned height, + unsigned tex_width, unsigned tex_height, + unsigned out_width, unsigned out_height, + unsigned frame_counter, + const void *info, + const void *prev_info, + const void *feedback_info, + const void *fbo_info, unsigned fbo_info_cnt); + #ifdef __cplusplus } #endif