is mode ok

Started by DCelso, November 02, 2009, 03:21:38 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

Hola SplinterGU, para poder añadir a la wiki esta función he mirado su definición en el código fuente y a priori creo que


static int modvideo_mode_is_ok( INSTANCE * my, int * params )
{
   int sdl_flags = get_sdl_flags( <b><i>params[1]</i></b> );
   int depth = params[2];

   if ( !depth ) depth = ( <b><i>params[1]</i></b> & MODE_32BITS ) ? 32 : (( <b><i>params[1]</i></b> & MODE_16BITS ) ? 16 : 8 );

   return ( SDL_VideoModeOK( params[0], params[1], depth, sdl_flags ) );
}

Esto que he señalado está mal, en sdl_flags debería ser params[3], ya que es en este donde viene el dato de flags.
En el segundo y tercer caso subrayado se debería de usar también params[3] (pero quizas sería más correcto usarlo sobre la variable sdl_flags ya calculada, esto no lo puedo asegurar ya que no conozco si las constantes mode_16bits /mode_32bits coinciden con las de SDL flags)
Corrígeme si me equivoco.
Saludos.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

splinter_work

es correcta tu observacion... hay algo raro... no funcionaria en todos los casos...

muchas gracias....

Windgate

Maldita sea, hablé sobre esa función y la he usado correctamente, pero cuando habláis de cómo está hecha me pierdo...

¿Esos flags de los que hablas, siendo el tercer parámetro, te refieres al modo de video? ¿Usas el & para obtener los bits que están a 1 y detectar el modo?

Cualquier explicacioncita adicional por mínima que sea me ayudará ???
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

mira lo que puse en la wiki a ver si te ayuda, el último flag es el mismo del set_mode, yo no se exactamente qué info puede llevar pero entre ellas está lo de hardware rendered, software rendered, bitdephmode entre otros, vamos yo siempre lo uso a 0 :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Quote from: DCelso on November 02, 2009, 10:41:51 PM
mira lo que puse en la wiki a ver si te ayuda, el último flag es el mismo del set_mode, yo no se exactamente qué info puede llevar pero entre ellas está lo de hardware rendered, software rendered, bitdephmode entre otros, vamos yo siempre lo uso a 0 :D.

Eso de hardware rendered y software rendered primera vez que lo oigo, voy a echar un ojo a la wiki. Disculpad mi ignorancia, pero supongo que a alguien más le servirá para culturizarse sobre los "instentinos" de Bennu :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

No se, a ver si me estoy columpiando, pero es lo que recuerdo de lo que he estado viendo recientemente el el código, tendré que corroborarlo antes de afirmartelo a ciencia cierta.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

creo que funcionar, funciona... pero puede que no 100% bien...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Yo lo probé con el mismo juego en un portátil con panorámica y en uno de sobremesa con pantalla normal y sí que era capaz de detectar si la resolución se soportaba o no:

    IF ( mode_is_ok ( _RESOLUCION_X, _RESOLUCION_Y , _MODO_COLOR , MODE_WINDOW ) )
set_mode ( _RESOLUCION_X, _RESOLUCION_Y , _MODO_COLOR , MODE_WINDOW );   // Resolución normal
ELSE
set_mode ( 1024 , 768 , _MODO_COLOR , MODE_WINDOW );   // Resolución de "emergencia"
END


Sobre el funcionamiento interno no me atrevo a decir nada...

Lo que sí he comprobado ahora mismo "casualmente" es que si cambias el modo de vídeo en ejecución usando Bennu 3D el juego recorta los píxeles que sobran, por ejemplo con una cámara de seguimiento automático, al pasar de 1280x800 a 640x480 el personaje ya ni se ve, sólo se muestra la cuarta parte superior izquierda de lo que se veía antes ???

No me ha dado por poner un IF ( mode_is_ok ( ... ) ) , creo que el problema es otro.

(Siento si es un poco offtopic pero es el hilo más proximado :P)
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es