jejeje, entonces solucionado para 4:3
-------------------------------------------------------------------------------------------
Cuento un poco cuales son los problemas con las resoluciones:
1.- Para resoluciones mayores de 1200 las imágenes de help y start a fullscreen se muestran muy estrechas. SOLUCIONADO
2.- En monitores panorámicos (no 4:3) a fullscreen hay problemas de escalado de las imágenes.
Esto es porque por diversas partes del código, asume que tenemos monitor 4:3, como por ejemplo en la función del bug anterior
CODE
aspectx *= 3 * video_size_x();
aspecty *= 4 * video_size_y();
y claro la lía.
Esto en principio, porque lo estoy mirando...
-------------------------------------------------------------------------------------------
Para curiosos (VeS ande andaras), Solución al problema 1:
text.cc
CODE
void cell_pos_t::compute_size(unsigned* rx, unsigned* ry, const adv_bitmap* bitmap, unsigned aspectx, unsigned aspecty, double aspect_expand)
{ ...
aspectx *= 3 * video_size_x();
aspecty *= 4 * video_size_y();
//arreglado bug resoluciones altas.
if (aspectx * real_dy > aspecty * real_dx) {
*rx = real_dx;
*ry = static_cast<unsigned>(real_dx * aspecty * aspect_expand / aspectx);
} else {
*rx = static_cast<unsigned>(real_dy * aspectx * aspect_expand / aspecty);
*ry = real_dy;
}
...
}
En concreto el problema está en las lineas:
CODE
*ry = static_cast<unsigned>(real_dx * aspecty * aspect_expand / aspectx);
*rx = static_cast<unsigned>(real_dy * aspectx * aspect_expand / aspecty);
En lenguaje mas entendible, no es mas que una multiplicación y división
R = A * B / C
¿hace mal la cuenta? pues SI,
Para resoluciones grandes, por ejemplo 1600, A * B es enorme, del orden de 9.000.000.000 (9 mil millones)
y este numero no cabe en la variable R que es unsigned (enteros positivos) que como máximo caben unos 4.000.000.000 (4 mil millones) jejeje
y se flipa y hace mal la cuenta.
Solución: hacer primero la división (resultado entorno a 1) y luego la multiplicación (resultado entorno a la resolución 1600)
R_tmp = B / C
R = A * R_tmp
CODE
double ry_tmp = aspecty * aspect_expand / aspectx;
*ry = static_cast<unsigned>(real_dx * ry_tmp);
Y problema 1 solucionado a falta de hacer muchas mas pruebas y tal...
-------------------------------------------------------------------------------------------------
Ufff, vaya chapa he metido
Bueno, a ver si mañana me pongo con el problemo 2.
Salu2
Edited by daesdae - 2/8/2014, 18:14