mirror of
https://github.com/libretro/RetroArch
synced 2025-04-15 23:42:30 +00:00
Create SHADER_CTL_WRAP_TYPE
This commit is contained in:
parent
bd74390cde
commit
46b963619a
@ -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)
|
static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture)
|
||||||
{
|
{
|
||||||
unsigned mip_level;
|
unsigned mip_level;
|
||||||
enum gfx_wrap_type wrap;
|
video_shader_ctx_wrap_t wrap;
|
||||||
bool fp_fbo, srgb_fbo;
|
bool fp_fbo, srgb_fbo;
|
||||||
GLenum min_filter, mag_filter, wrap_enum;
|
GLenum min_filter, mag_filter, wrap_enum;
|
||||||
video_shader_ctx_filter_t filter_type;
|
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);
|
mag_filter = min_filter_to_mag(min_filter);
|
||||||
|
|
||||||
wrap = video_shader_driver_wrap_type(i + 2);
|
wrap.idx = i + 2;
|
||||||
wrap_enum = gl_wrap_type_to_enum(wrap);
|
|
||||||
|
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_MAG_FILTER, mag_filter);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_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_mode_t mode;
|
||||||
gfx_ctx_input_t inp;
|
gfx_ctx_input_t inp;
|
||||||
unsigned interval, mip_level;
|
unsigned interval, mip_level;
|
||||||
|
video_shader_ctx_wrap_t wrap_info;
|
||||||
video_shader_ctx_filter_t shader_filter;
|
video_shader_ctx_filter_t shader_filter;
|
||||||
video_shader_ctx_info_t shader_info;
|
video_shader_ctx_info_t shader_info;
|
||||||
unsigned win_width, win_height, temp_width = 0, temp_height = 0;
|
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);
|
: (video->smooth ? GL_LINEAR : GL_NEAREST);
|
||||||
|
|
||||||
gl->tex_mag_filter = min_filter_to_mag(gl->tex_min_filter);
|
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);
|
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)
|
static void gl_update_tex_filter_frame(gl_t *gl)
|
||||||
{
|
{
|
||||||
|
video_shader_ctx_wrap_t wrap_info;
|
||||||
video_shader_ctx_filter_t shader_filter;
|
video_shader_ctx_filter_t shader_filter;
|
||||||
unsigned i, mip_level;
|
unsigned i, mip_level;
|
||||||
GLenum wrap_mode;
|
GLenum wrap_mode;
|
||||||
@ -2976,8 +2986,11 @@ static void gl_update_tex_filter_frame(gl_t *gl)
|
|||||||
smooth = settings->video.smooth;
|
smooth = settings->video.smooth;
|
||||||
|
|
||||||
mip_level = 1;
|
mip_level = 1;
|
||||||
wrap_mode =
|
wrap_info.idx = 1;
|
||||||
gl_wrap_type_to_enum(video_shader_driver_wrap_type(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,
|
gl->tex_mipmap = video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT,
|
||||||
&mip_level);
|
&mip_level);
|
||||||
|
@ -84,11 +84,6 @@ unsigned video_shader_driver_get_prev_textures(void)
|
|||||||
return current_shader->get_prev_textures(shader_data);
|
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)
|
struct video_shader *video_shader_driver_direct_get_current_shader(void)
|
||||||
{
|
{
|
||||||
if (!current_shader || !current_shader->get_current_shader)
|
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);
|
current_shader->use(shader_info->data, shader_data, shader_info->idx);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case SHADER_CTL_NONE:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -68,7 +68,8 @@ enum video_shader_driver_ctl_state
|
|||||||
SHADER_CTL_INFO,
|
SHADER_CTL_INFO,
|
||||||
SHADER_CTL_SET_MVP,
|
SHADER_CTL_SET_MVP,
|
||||||
SHADER_CTL_FILTER_TYPE,
|
SHADER_CTL_FILTER_TYPE,
|
||||||
SHADER_CTL_USE
|
SHADER_CTL_USE,
|
||||||
|
SHADER_CTL_WRAP_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct shader_backend
|
typedef struct shader_backend
|
||||||
@ -162,6 +163,12 @@ typedef struct video_shader_ctx_filter
|
|||||||
bool *smooth;
|
bool *smooth;
|
||||||
} video_shader_ctx_filter_t;
|
} 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 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;
|
||||||
@ -183,8 +190,6 @@ const char *video_shader_driver_get_ident(void);
|
|||||||
|
|
||||||
unsigned video_shader_driver_get_prev_textures(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);
|
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);
|
bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *data);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user