mirror of
https://github.com/libretro/RetroArch
synced 2025-04-16 08:43:10 +00:00
(PS3) Automatic aspect ratio based on game width/height works
now
This commit is contained in:
parent
e7e0b9ca27
commit
03f081ace6
@ -490,6 +490,25 @@ struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END] = {
|
|||||||
{ "Custom", 0.0f }
|
{ "Custom", 0.0f }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void rarch_set_auto_viewport(unsigned width, unsigned height)
|
||||||
|
{
|
||||||
|
unsigned aspect_x, aspect_y, len, highest, i;
|
||||||
|
|
||||||
|
len = width < height ? width : height;
|
||||||
|
highest = 1;
|
||||||
|
for (i = 1; i < len; i++)
|
||||||
|
{
|
||||||
|
if ((width % i) == 0 && (height % i) == 0)
|
||||||
|
highest = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
aspect_x = width / highest;
|
||||||
|
aspect_y = height / highest;
|
||||||
|
|
||||||
|
snprintf(aspectratio_lut[ASPECT_RATIO_AUTO].name, sizeof(aspectratio_lut[ASPECT_RATIO_AUTO].name), "%d:%d (Auto)", aspect_x, aspect_y);
|
||||||
|
aspectratio_lut[ASPECT_RATIO_AUTO].value = (int)aspect_x / (int)aspect_y;
|
||||||
|
}
|
||||||
|
|
||||||
/*============================================================
|
/*============================================================
|
||||||
LIBRETRO
|
LIBRETRO
|
||||||
============================================================ */
|
============================================================ */
|
||||||
|
@ -61,6 +61,8 @@ struct aspect_ratio_elem
|
|||||||
|
|
||||||
extern struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END];
|
extern struct aspect_ratio_elem aspectratio_lut[ASPECT_RATIO_END];
|
||||||
|
|
||||||
|
extern void rarch_set_auto_viewport(unsigned width, unsigned height);
|
||||||
|
|
||||||
#include "console_ext_input.h"
|
#include "console_ext_input.h"
|
||||||
|
|
||||||
/*============================================================
|
/*============================================================
|
||||||
|
@ -523,6 +523,8 @@ begin_loop:
|
|||||||
|
|
||||||
input_ps3.poll(NULL);
|
input_ps3.poll(NULL);
|
||||||
|
|
||||||
|
rarch_set_auto_viewport(g_extern.frame_cache.width, g_extern.frame_cache.height);
|
||||||
|
|
||||||
do{
|
do{
|
||||||
repeat = rarch_main_iterate();
|
repeat = rarch_main_iterate();
|
||||||
}while(repeat && !g_console.frame_advance_enable);
|
}while(repeat && !g_console.frame_advance_enable);
|
||||||
|
@ -557,6 +557,9 @@ static bool gl_frame(void *data, const void *frame, unsigned width, unsigned hei
|
|||||||
GLfloat yamt = (GLfloat)height / gl->tex_h;
|
GLfloat yamt = (GLfloat)height / gl->tex_h;
|
||||||
|
|
||||||
set_texture_coords(gl->tex_coords, xamt, yamt);
|
set_texture_coords(gl->tex_coords, xamt, yamt);
|
||||||
|
|
||||||
|
if(g_console.aspect_ratio_index == ASPECT_RATIO_AUTO )
|
||||||
|
rarch_set_auto_viewport(width, height);
|
||||||
}
|
}
|
||||||
else if (width != gl->last_width[(gl->tex_index - 1) & TEXTURES_MASK] || height != gl->last_height[(gl->tex_index - 1) & TEXTURES_MASK])
|
else if (width != gl->last_width[(gl->tex_index - 1) & TEXTURES_MASK] || height != gl->last_height[(gl->tex_index - 1) & TEXTURES_MASK])
|
||||||
{
|
{
|
||||||
@ -983,9 +986,14 @@ static void ps3graphics_set_aspect_ratio(void * data, uint32_t aspectratio_index
|
|||||||
(void)data;
|
(void)data;
|
||||||
gl_t * gl = g_gl;
|
gl_t * gl = g_gl;
|
||||||
|
|
||||||
|
if(g_console.aspect_ratio_index == ASPECT_RATIO_AUTO)
|
||||||
|
rarch_set_auto_viewport(g_extern.frame_cache.width, g_extern.frame_cache.height);
|
||||||
|
|
||||||
g_settings.video.aspect_ratio = aspectratio_lut[g_console.aspect_ratio_index].value;
|
g_settings.video.aspect_ratio = aspectratio_lut[g_console.aspect_ratio_index].value;
|
||||||
g_settings.video.force_aspect = false;
|
g_settings.video.force_aspect = false;
|
||||||
gl->keep_aspect = true;
|
gl->keep_aspect = true;
|
||||||
|
|
||||||
|
|
||||||
set_viewport(gl, gl->win_width, gl->win_height);
|
set_viewport(gl, gl->win_width, gl->win_height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user