From 46b963619ab7ec0b854620be283d586dc11e9ad6 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 14 Feb 2016 21:41:16 +0100 Subject: [PATCH] Create SHADER_CTL_WRAP_TYPE --- gfx/drivers/gl.c | 25 +++++++++++++++++++------ gfx/video_shader_driver.c | 13 ++++++++----- gfx/video_shader_driver.h | 11 ++++++++--- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index c040e3a5c0..abec25ab8d 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -456,7 +456,7 @@ static void gl_compute_fbo_geometry(gl_t *gl, static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) { unsigned mip_level; - enum gfx_wrap_type wrap; + video_shader_ctx_wrap_t wrap; bool fp_fbo, srgb_fbo; GLenum min_filter, mag_filter, wrap_enum; video_shader_ctx_filter_t filter_type; @@ -484,8 +484,11 @@ static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture) mag_filter = min_filter_to_mag(min_filter); - wrap = video_shader_driver_wrap_type(i + 2); - wrap_enum = gl_wrap_type_to_enum(wrap); + wrap.idx = i + 2; + + video_shader_driver_ctl(SHADER_CTL_WRAP_TYPE, &wrap); + + wrap_enum = gl_wrap_type_to_enum(wrap.type); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter); @@ -2648,6 +2651,7 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo gfx_ctx_mode_t mode; gfx_ctx_input_t inp; unsigned interval, mip_level; + video_shader_ctx_wrap_t wrap_info; video_shader_ctx_filter_t shader_filter; video_shader_ctx_info_t shader_info; unsigned win_width, win_height, temp_width = 0, temp_height = 0; @@ -2834,7 +2838,12 @@ 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(video_shader_driver_wrap_type(1)); + + wrap_info.idx = 1; + + video_shader_driver_ctl(SHADER_CTL_WRAP_TYPE, &wrap_info); + + gl->wrap_mode = gl_wrap_type_to_enum(wrap_info.type); gl_set_texture_fmts(gl, video->rgb32); @@ -2957,6 +2966,7 @@ static bool gl_has_windowed(void *data) static void gl_update_tex_filter_frame(gl_t *gl) { + video_shader_ctx_wrap_t wrap_info; video_shader_ctx_filter_t shader_filter; unsigned i, mip_level; GLenum wrap_mode; @@ -2976,8 +2986,11 @@ static void gl_update_tex_filter_frame(gl_t *gl) smooth = settings->video.smooth; mip_level = 1; - wrap_mode = - gl_wrap_type_to_enum(video_shader_driver_wrap_type(1)); + wrap_info.idx = 1; + + video_shader_driver_ctl(SHADER_CTL_WRAP_TYPE, &wrap_info); + + wrap_mode = gl_wrap_type_to_enum(wrap_info.type); gl->tex_mipmap = video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT, &mip_level); diff --git a/gfx/video_shader_driver.c b/gfx/video_shader_driver.c index a68b9fbf51..234b8264a6 100644 --- a/gfx/video_shader_driver.c +++ b/gfx/video_shader_driver.c @@ -84,11 +84,6 @@ unsigned video_shader_driver_get_prev_textures(void) return current_shader->get_prev_textures(shader_data); } -enum gfx_wrap_type video_shader_driver_wrap_type(unsigned index) -{ - return current_shader->wrap_type(shader_data, index); -} - struct video_shader *video_shader_driver_direct_get_current_shader(void) { if (!current_shader || !current_shader->get_current_shader) @@ -237,6 +232,14 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat current_shader->use(shader_info->data, shader_data, shader_info->idx); } break; + case SHADER_CTL_WRAP_TYPE: + { + video_shader_ctx_wrap_t *wrap = (video_shader_ctx_wrap_t*)data; + if (!current_shader || !current_shader->wrap_type) + return false; + wrap->type = current_shader->wrap_type(shader_data, wrap->idx); + } + break; case SHADER_CTL_NONE: default: break; diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 85483bd4d8..4ffa8f0d5e 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -68,7 +68,8 @@ enum video_shader_driver_ctl_state SHADER_CTL_INFO, SHADER_CTL_SET_MVP, SHADER_CTL_FILTER_TYPE, - SHADER_CTL_USE + SHADER_CTL_USE, + SHADER_CTL_WRAP_TYPE }; typedef struct shader_backend @@ -162,6 +163,12 @@ typedef struct video_shader_ctx_filter bool *smooth; } video_shader_ctx_filter_t; +typedef struct video_shader_ctx_wrap +{ + unsigned idx; + enum gfx_wrap_type type; +} video_shader_ctx_wrap_t; + extern const shader_backend_t gl_glsl_backend; extern const shader_backend_t hlsl_backend; extern const shader_backend_t gl_cg_backend; @@ -183,8 +190,6 @@ const char *video_shader_driver_get_ident(void); unsigned video_shader_driver_get_prev_textures(void); -enum gfx_wrap_type video_shader_driver_wrap_type(unsigned index); - struct video_shader *video_shader_driver_direct_get_current_shader(void); bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data);