mirror of
https://github.com/libretro/RetroArch
synced 2025-02-19 12:41:00 +00:00
Add SHADER_CTL_MIPMAP_INPUT
This commit is contained in:
parent
fab6903522
commit
20441299e1
@ -455,21 +455,22 @@ static void gl_compute_fbo_geometry(gl_t *gl,
|
||||
|
||||
static void gl_create_fbo_texture(gl_t *gl, unsigned i, GLuint texture)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
unsigned mip_level;
|
||||
enum gfx_wrap_type wrap;
|
||||
bool fp_fbo, srgb_fbo;
|
||||
GLenum min_filter, mag_filter, wrap_enum;
|
||||
bool mipmapped = false;
|
||||
bool smooth = false;
|
||||
bool fp_fbo, srgb_fbo;
|
||||
|
||||
settings_t *settings = config_get_ptr();
|
||||
GLuint base_filt = settings->video.smooth ? GL_LINEAR : GL_NEAREST;
|
||||
GLuint base_mip_filt = settings->video.smooth ?
|
||||
GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
|
||||
mipmapped = video_shader_driver_mipmap_input(i + 2);
|
||||
mip_level = i + 2;
|
||||
|
||||
mipmapped = video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT, &mip_level);
|
||||
min_filter = mipmapped ? base_mip_filt : base_filt;
|
||||
|
||||
if (video_shader_driver_filter_type(i + 2, &smooth))
|
||||
@ -1122,6 +1123,7 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
|
||||
const struct gfx_tex_info *tex_info,
|
||||
const struct gfx_tex_info *feedback_info)
|
||||
{
|
||||
unsigned mip_level;
|
||||
video_shader_ctx_params_t params;
|
||||
unsigned width, height;
|
||||
const struct gfx_fbo_rect *prev_rect;
|
||||
@ -1165,7 +1167,9 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
|
||||
video_shader_driver_use(gl, i + 1);
|
||||
glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[i - 1]);
|
||||
|
||||
if (video_shader_driver_mipmap_input(i + 1))
|
||||
mip_level = i + 1;
|
||||
|
||||
if (video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT, &mip_level))
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
@ -1224,7 +1228,9 @@ static void gl_frame_fbo(gl_t *gl, uint64_t frame_count,
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, gl->fbo_texture[gl->fbo_pass - 1]);
|
||||
|
||||
if (video_shader_driver_mipmap_input(gl->fbo_pass + 1))
|
||||
mip_level = gl->fbo_pass + 1;
|
||||
|
||||
if (video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT, &mip_level))
|
||||
glGenerateMipmap(GL_TEXTURE_2D);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
@ -2557,7 +2563,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;
|
||||
unsigned interval, mip_level;
|
||||
unsigned win_width, win_height, temp_width = 0, temp_height = 0;
|
||||
bool force_smooth = false;
|
||||
const char *vendor = NULL;
|
||||
@ -2722,7 +2728,9 @@ static void *gl_init(const video_info_t *video, const input_driver_t **input, vo
|
||||
gl_set_shader_viewport(gl, 0);
|
||||
gl_set_shader_viewport(gl, 1);
|
||||
|
||||
gl->tex_mipmap = video_shader_driver_mipmap_input(1);
|
||||
mip_level = 1;
|
||||
gl->tex_mipmap = video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT,
|
||||
&mip_level);
|
||||
|
||||
if (video_shader_driver_filter_type(1, &force_smooth))
|
||||
gl->tex_min_filter = gl->tex_mipmap ? (force_smooth ?
|
||||
@ -2857,10 +2865,10 @@ static bool gl_has_windowed(void *data)
|
||||
|
||||
static void gl_update_tex_filter_frame(gl_t *gl)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned i, mip_level;
|
||||
GLenum wrap_mode;
|
||||
GLuint new_filt;
|
||||
bool smooth = false;
|
||||
bool smooth = false;
|
||||
settings_t *settings = config_get_ptr();
|
||||
|
||||
if (!gl)
|
||||
@ -2871,9 +2879,12 @@ static void gl_update_tex_filter_frame(gl_t *gl)
|
||||
if (!video_shader_driver_filter_type(1, &smooth))
|
||||
smooth = settings->video.smooth;
|
||||
|
||||
mip_level = 1;
|
||||
wrap_mode =
|
||||
gl_wrap_type_to_enum(video_shader_driver_wrap_type(1));
|
||||
gl->tex_mipmap = video_shader_driver_mipmap_input(1);
|
||||
|
||||
gl->tex_mipmap = video_shader_driver_ctl(SHADER_CTL_MIPMAP_INPUT,
|
||||
&mip_level);
|
||||
|
||||
gl->video_info.smooth = smooth;
|
||||
new_filt = gl->tex_mipmap ? (smooth ?
|
||||
|
@ -94,13 +94,6 @@ const char *video_shader_driver_get_ident(void)
|
||||
return current_shader->ident;
|
||||
}
|
||||
|
||||
bool video_shader_driver_mipmap_input(unsigned index)
|
||||
{
|
||||
if (!current_shader)
|
||||
return false;
|
||||
return current_shader->mipmap_input(shader_data, index);
|
||||
}
|
||||
|
||||
unsigned video_shader_driver_num_shaders(void)
|
||||
{
|
||||
if (!current_shader)
|
||||
@ -218,6 +211,14 @@ bool video_shader_driver_ctl(enum video_shader_driver_ctl_state state, void *dat
|
||||
if (!current_shader || !current_shader->get_feedback_pass)
|
||||
return false;
|
||||
return current_shader->get_feedback_pass(shader_data, (unsigned*)data);
|
||||
case SHADER_CTL_MIPMAP_INPUT:
|
||||
if (!current_shader)
|
||||
return false;
|
||||
{
|
||||
unsigned *index = (unsigned*)data;
|
||||
return current_shader->mipmap_input(shader_data, *index);
|
||||
}
|
||||
break;
|
||||
case SHADER_CTL_NONE:
|
||||
default:
|
||||
break;
|
||||
|
@ -38,7 +38,8 @@ enum video_shader_driver_ctl_state
|
||||
/* Finds first suitable shader context driver. */
|
||||
SHADER_CTL_INIT_FIRST,
|
||||
SHADER_CTL_SET_PARAMS,
|
||||
SHADER_CTL_GET_FEEDBACK_PASS
|
||||
SHADER_CTL_GET_FEEDBACK_PASS,
|
||||
SHADER_CTL_MIPMAP_INPUT
|
||||
};
|
||||
|
||||
typedef struct shader_backend
|
||||
@ -149,8 +150,6 @@ void video_shader_driver_use(void *data, unsigned index);
|
||||
|
||||
const char *video_shader_driver_get_ident(void);
|
||||
|
||||
bool video_shader_driver_mipmap_input(unsigned index);
|
||||
|
||||
unsigned video_shader_driver_num_shaders(void);
|
||||
|
||||
bool video_shader_driver_set_coords(void *handle_data, const void *data);
|
||||
|
Loading…
x
Reference in New Issue
Block a user