edivc/dlls/src/graphics/misc.c
2003-06-01 23:03:22 +00:00

82 lines
2.1 KiB
C

/*! \file misc.c
* \brief Funciones varias
*/
#include <SDL/SDL.h>
#include "export.h"
#include "graphics.h"
#include "default_palette.h"
/*! \brief Cambia el modo de la pantalla
* \todo ¿más flags?
*
* Esta función permite distintas sintaxis:
* - Sintaxis de DIV2:
* @param modo Modo de pantalla indicado por una constante tipo mWWWxHHH ó por un identificador de video_modes[]
*
* - Sintaxis de eDIV:
* @param anchura Ancho de la nueva resolución
* @param altura Alto de la nueva resolución
* @param [bpp] Profundidad de color, puede ser 8, 16, 24 ó 32 (por defecto es 8)
* @param [flags] Flags de la ventana del juego, puede ser una combinación de:
* _fullscreen (1), ... ya veremos si añadimos más xD
* .
*
* @return 0
*/
int eDIV_SET_MODE(FUNCTION_PARAMS)
{
int modo;
switch(fp->num_params) {
case 4:
fp->graphics->flags=getparm();
case 3:
fp->graphics->bpp=getparm();
fp->graphics->alto=getparm();
fp->graphics->ancho=getparm();
break;
case 1:
modo=getparm();
if(modo>1280960) {
fp->graphics->ancho=modo/10000;
fp->graphics->alto=modo%10000;
}
else {
fp->graphics->ancho=modo/1000;
fp->graphics->alto=modo%1000;
}
fp->graphics->bpp=8;
fp->graphics->flags=0;
}
/* Esto avisa a las DLLs */
fp->graphics->resflags|=GR_CHANGED;
SDL_FreeSurface(fondo);
SDL_FreeSurface(screen);
screen=SDL_SetVideoMode(fp->graphics->ancho,fp->graphics->alto,fp->graphics->bpp,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_HWACCEL|((fp->graphics->flags&GR_FULLSCREEN)?SDL_FULLSCREEN:0)|((fp->graphics->bpp==8)?SDL_HWPALETTE:0));
fp->graphics->buffer=screen->pixels;
if(fp->graphics->bpp==8)
SDL_SetPalette(screen,SDL_LOGPAL|SDL_PHYSPAL,(SDL_Color*)default_palette,0,256);
if ( screen == NULL ) {
fp->Critical_Error(7); /* No se pudo inicializar SDL */
return 0;
}
fondo=SDL_CreateRGBSurface(SDL_HWSURFACE,fp->graphics->ancho,fp->graphics->alto,fp->graphics->bpp,0,0,0,0);
fp->graphics->background=fondo->pixels;
if(fp->graphics->bpp==8)
PaletteCopy(fondo,screen);
regions[0].w=fp->graphics->ancho;
regions[0].h=fp->graphics->alto;
return 0;
}