resolucióname: Función multiplataforma para setear el modo de vídeo virtual

Started by panreyes, January 23, 2013, 12:26:46 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes


http://pixjuegos.googlecode.com/svn/trunk/common-src/resolucioname.pr-


Se trata de una función que setea scale_resolution y una variable global llamada bpp teniendo en cuenta el sistema en el que se ejecuta y las resoluciones que acepta.


BPP debería ser luego utilizada en set_mode(x,y,bpp); para los bits de color.

Actualizado: -BUG: Ahora scale_resolution se pone a -1 si no es necesario.



Function resolucioname(mi_ancho,mi_alto,mi_panoramico);
Private
struct resoluciones_panoramicas[10];
x;
y;
end
struct resoluciones_no_panoramicas[10];
x;
y;
end
begin
//posibles resoluciones panoramicas
resoluciones_panoramicas[x].x=1920; resoluciones_panoramicas[x].y=1080; //full hd
resoluciones_panoramicas[x++].x=1400; resoluciones_panoramicas[x].y=900; //algunos portátiles
resoluciones_panoramicas[x++].x=1366; resoluciones_panoramicas[x].y=768; //portátiles y monitores 19"
resoluciones_panoramicas[x++].x=1366; resoluciones_panoramicas[x].y=766; //portátiles y monitores 19" 2
resoluciones_panoramicas[x++].x=1280; resoluciones_panoramicas[x].y=720; //mid hd
resoluciones_panoramicas[x++].x=1024; resoluciones_panoramicas[x].y=600; //netbooks
resoluciones_panoramicas[x++].x=640; resoluciones_panoramicas[x].y=480; //este monitor no soporta nada panorámico
resoluciones_panoramicas[x++].x=320; resoluciones_panoramicas[x].y=240; //estamos en una gp2x...

//posibles resoluciones no panoramicas
resoluciones_no_panoramicas[x=0].x=1280; resoluciones_no_panoramicas[x].y=1024; //monitor 17/19"
resoluciones_no_panoramicas[x++].x=1024; resoluciones_no_panoramicas[x].y=768; //monitor 15/17"/portatil con algunos años
resoluciones_no_panoramicas[x++].x=800; resoluciones_no_panoramicas[x].y=600; //monitor 14/15"/netbook/portátil viejuno
resoluciones_no_panoramicas[x++].x=640; resoluciones_no_panoramicas[x].y=480; //monitor ultra retro
resoluciones_no_panoramicas[x++].x=320; resoluciones_no_panoramicas[x].y=240; //gp2x!

if(os_id==os_wii)
bpp=16;
scale_resolution=06400480;
return;
end


if(os_id==os_caanoo or os_id==os_dingux_a320 or os_id==os_gp2x or os_id==os_gp2x_wiz or os_id==os_gp32 or os_id==os_dc)
bpp=16;
scale_resolution=03200240;
return;
end

    if(arcade_mode)
scale_resolution=08000600;
full_screen=1;
return;
end

if(os_id==1003 or os_id==os_ios) //móviles
frame;
bpp=16;
scale_resolution=graphic_info(0,0,g_width)*10000+graphic_info(0,0,g_height);
return;
end


if(os_id==1010) //pandora
frame;
bpp=16;
scale_resolution=08000480;
return;
end

if(mode_is_ok(mi_ancho,mi_alto,bpp,MODE_FULLSCREEN))
scale_resolution=-1;
return;
end

if(!mi_panoramico)
from x=0 to 10;
if(resoluciones_no_panoramicas[x].x==0 or resoluciones_no_panoramicas[x].y==0) break; end
if(mi_ancho>resoluciones_no_panoramicas[x].x and mi_alto>resoluciones_no_panoramicas[x].y and mode_is_ok(resoluciones_no_panoramicas[x].x,resoluciones_no_panoramicas[x].y,bpp,MODE_FULLSCREEN))
scale_resolution=resoluciones_no_panoramicas[x].x*10000+resoluciones_no_panoramicas[x].y;
break;
end
end
else
from x=0 to 10;
if(resoluciones_panoramicas[x].x==0 or resoluciones_panoramicas[x].y==0) break; end
if(mi_ancho>resoluciones_panoramicas[x].x and mi_alto>resoluciones_panoramicas[x].y and mode_is_ok(resoluciones_panoramicas[x].x,resoluciones_panoramicas[x].y,bpp,MODE_FULLSCREEN))
scale_resolution=resoluciones_panoramicas[x].x*10000+resoluciones_panoramicas[x].y;
break;
end
end
end

//por algún motivo que no alcanzo a comprender, el juego no es capaz de funcionar en ninguno de los modos
// comprobados por lo que vamos a por el safe mode
if(scale_resolution==-1) scale_resolution=03200240; end
end

JaViS

Muy bueno pixel!!


le voy a pegar una ojeada :D


¿a proposito, que es arcade mode?
Working on Anarkade. A couch multiplayer 2D shooter.

carles

Es justo lo que necesito para mi Garnatron, pero no me sirve porque no soporta 1920x1080 ni modo ventana.

panreyes

Quote from: JaViS on January 23, 2013, 12:39:42 PM
Muy bueno pixel!!


le voy a pegar una ojeada :D


¿a proposito, que es arcade mode?


Uups... arcade_mode es otra variable global nuestra.


La utilizamos para cuando ejecutamos nuestros juegos en una máquina recreativa.


Simplifica los menús y muestra una ayuda en el juego. (Y en el futuro probablemente activará un modo demo que evite que los jugones se quieran pasar nuestros juegos enteros en los eventos xD)

panreyes

Quote from: carles on January 23, 2013, 02:00:08 PM
Es justo lo que necesito para mi Garnatron, pero no me sirve porque no soporta 1920x1080 ni modo ventana.
ZASKA TRASKA!
http://code.google.com/p/pixjuegos/source/diff?spec=svn491&r=491&format=side&path=/trunk/garnatron/src/garnatron.prg


Aún así quiero mejorar el resolucióname para que coja las posibles resoluciones de un array, y no copypastear código a lo sucio como está ahora.

carles

Gracias PiXeL(que raro se me hace llamarte así) pero el Garnatron no tiene necesidad de reescalarse puede adaptarse a casi cualquier resolución, panorámica o no.

panreyes

Quote from: carles on January 23, 2013, 04:11:40 PM
Gracias PiXeL(que raro se me hace llamarte así) pero el Garnatron no tiene necesidad de reescalarse puede adaptarse a casi cualquier resolución, panorámica o no.
Estaba mal y lo he corregido. [/naziModeOff] xD

SplinterGU

tambien dispones de funciones nativas para obtener los modos de video posibles... salvo en wiz, creo que en todos las demas plataformas oficiales funciona, no se los ports...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2