Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Oncoming Crm32pro V4.80

Iniciado por TheAzazel, 01 de Marzo de 2006, 02:52:12 PM

« anterior - próximo »

SiPoX

 Wooow! je,je,je.. muy currado, útil e interesante.. je,je,je... ya me veía yo leyendo a saco ;) :)

He mirado los ejemplos, ejecutados, el código y la documentación... ;) :)

Pero ahora de compilarlo, tengo un problemilla... vamos.. más que al compilarlo, que me da 0 errors y 0 warnings, al ejecutarlo no me finaliza el programa, sin más. En el log de errores de sdl, (en el del programa, todo aparece correcto) me sale:

Fatal signal: Segmentation Fault (SDL Parachute Deployed)

Creo que lo he configurado bien, el compilador con los parámetros y tal... he copiado los archivos de la carpeta SDL a la carpeta SDL que ya tenia (en realidad la original la he renombrado, para conservarla por si acaso :)) y el .h de la crm32 a la carpeta raiz de include. Tb los .lib, a la carpeta de .lib de mi ide, code::blocks. ;) :) Y luego, en los parametros del compilador, he añadido el de crm32... CRM32Pro.mingw ;) :) además de los que ya tenia de SDL.

Alguna idea? :D

Saludos!!  
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

TheAzazel

 Si mal no he leido (es que estoy ultimando la web y ya estoy que no veo :S), haz mezclado los .h de SDL con los que trae CRM32Pro(que tambien son SDL)... no hagas eso :), lo mismo no hay ningun cambio pero quizas si y eso puede provocar efectos no deseados, aunque por el momento te ha compilado.
Bien, el problema que indicas viene dado por que mezclas SDL con CRM32Pro cuando en realidad, CRM32Pro YA incluye a SDL, por lo tanto no se como no te ha dado problemas con referencias duplicadas.

El caso es que con que incluyas CRM32Pro.mingw.lib y sdlmain.mingw.lib en el linker, la cosa funcionara :)

Esto creo que ya le paso a alguien hace tiempo(aunque fue por emails, asi que no esta registrado aqui) pero ya pense en hacer un esquema de todas las librerias que seguramente mañana, cuando me libere del peso que tengo ahora sobre mis ojos, hare y pondre en la web.

Pues dime si te ha funcionado con eso vale?

Edit: releyendo veo que los .h lo has hecho bien, has guardado los tuyos jeje, asi que eso bien, tan solo tienes que eliminar la referencia en el linker a sdl.lib y te funcionara :)

SiPoX

 ei!! cierto.. estaba enlazando de más en el linker.. ;) :)

Graciaaas! ;) :) Solucionado esto, a saquillo con ello... :) ;)
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

TheAzazel

 Lo que no entiendo es porque no te da ningun error ni aviso....

pero bueno, espero que con el grafiquillo que hare mañana quede mas claro :)

pues te voy a cambiar de version en unos minutejos jejeje

_ShellyWallace_

 No me extraña que le feliciten por los cambios y bla bla bla....si es que cada vez fijo que te pareces mas a este  (uoh) ..........
..MAKE UP & FX...

SiPoX

 Buenas!!

Trasteando con la librería... probando los efectos... me pasa una cosa algo curiosa...

al hacer algo como

CitarsBg=IImage->Load(GFX_RESOURCE,"IntroUCS");
SDL_BlitSurface(sBg,NULL,CRM32Pro.screen,NULL);
IScreenFX->FadeImageA(CRM32Pro.screen,10);
SDL_FreeSurface(sBg);

si lo ejecuto con  CRM32Pro.Config.VideoWindow=0;, en pantalla completa, al terminar el efecto, me saca del programa, plasmando en el log de errores de SDL el mismo error de antes: Fatal signal: Segmentation Fault (SDL Parachute Deployed).
Sin embargo.. si ejecuto con CRM32Pro.Config.VideoWindow=1; , parece que se queda con el cursor en area algun segundo de más, pero ni sale del programa, ni da error... funciona :).

Alguna idea? :S
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

TheAzazel

 Uhm...en pantalla completa (con .VideoWindow=0), que otros flags de .Videoxxx estas usando?

tambien si me pasas ese fragmento de codigo, me ahorras mucho curro :).

Es extrano puesto que esas funciones son bastante antiguas, me da que la cosa va por una nueva funcionalidad que he anadido, recuperar las superficies hardware cuando se pierden en directx.

Hoy tengo el dia en el curro tranquilo(por fin!) asi que, en cuanto me lo pases, me pongo con ello.

Sludos

SiPoX

 Buenas!

El código exacto no lo tengo aquí, tb estoy por el curro.. ;) :) Pero.. básicamente, seguía la estructura del programa basiccode de la documentación, pero cambiando los flags del config..  800x600 en 24 bits (con 32 me decía lo mismo ;)).

pd.- en cuanto llegue a casa, te copi - pasteo el código ;) :) Saludos y graciaas!
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

TheAzazel

 Si sigue mas o menos el basiccode, intentare reproducirlo aqui, solo una cosa mas, win32(vs o mingw) o linux?
Aunque seguro que el error sucede en todas las plataformas pero solo por asegurar.


saludos

SiPoX

gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

SiPoX

 int main( int argc, char* argv[] )
{

   // Declaramos las variables SDL y especiales
   SDL_Event event;
   SDL_Surface *sBg;      // Background surface

   // Declaramos el resto de variables
   Uint8 done=0;
   int i;


   // Inicializamos el sistema de log
   ILogSystem.Init("BasicCode.log",LOG_FILE,LOG_NORMAL,"Prueba01","UC Studios","","");


   //Config del programa:
   CRM32Pro.Config.Title="Prueba01";
   CRM32Pro.Config.VideoBPP=24;
   CRM32Pro.Config.VideoWidth=800;
   CRM32Pro.Config.VideoHeight=600;
   CRM32Pro.Config.VideoWindow=1;


   // - Inicializamos SDL y CRM32, video, audio y control de tiempo -
   if(CRM32Pro.Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER)<0)
   {
       ILogSystem.Msg(LOG_NORMAL," · [LOG] - Couldn´t initialize CRM32Pro: %s\n",SDL_GetError());
       return 1;
   }

   // -Graphics system initialize-
   if(!CRM32Pro.SetVideoMode())
   {
        CRM32Pro.Quit();
        return 1;
   }

   // Efecto de Pantalla
   sBg=IImage->Load(GFX_RESOURCE,"IntroUCS");
   SDL_BlitSurface(sBg,NULL,CRM32Pro.screen,NULL);
   IScreenFX->FadeImageA(CRM32Pro.screen,10);
   SDL_FreeSurface(sBg);
   //IScreenFX->FadeBlackA(10);


   // Main loop
   while(!done)
   {
       // Main system update and events loop
       while(CRM32Pro.Update(&event))
       {
           switch (event.type)
           {
               case SDL_MOUSEBUTTONDOWN:
                 //  ISoundFX->SoundPlay(1,hndClick,0);
      break;

               case SDL_KEYDOWN:
                   done=1;
               break;

               case SDL_QUIT:
                   done = 1;
               break;

                case SDLK_ESCAPE:
                   done = 1;
               break;

               default:
   break;
           }
       }
   }


   // Free resources
   SDL_FreeSurface(sBg);

   // Cerramos la librería, el modo gráfico
   CRM32Pro.Quit();

   return 0;

}


Ya de paso... por qué el evento en las teclas no funciona, cual es el parámetro a pasar? Me refiero a por ejemplo SDLK_ESCAPE, que no va. ;) :)

Un saludo!
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)

TheAzazel

 Ya he conseguido reproducirlo, y bueno, al mirar el codigo detenidamente he visto donde estaba la cosa, ademas, te comento otras cosillas:

- cuando lo ejecutes en modo ventana, es mejor que pases 0 como bits per pixel ya que de ese modo se elegira el mismo BPP que el desktop y se evitara que se haga una reconversion al vuelo (que suele ser lentilla). Yo no lo fuerzo desde las entrañas de CRM32Pro por si acaso alguien quiere activar un modo aposta aunque luego reconvierta al vuelo al mismo depthcolor que el desktop.

- no utilices 24BPP, es muy lento en comparacion con 32BPP, asi que usa este mejor, (en un patch que estoy haciendo, no sera posible seleccionar 24BPP salvo que indiques 0 al estar en modo ventana y tu desktop este a 24 je)

- Tambien tienes una doble liberacion de superficie, fijate que la liberas dos veces, no te ha pasado nada de milagro(con los punteros hay que tener cuidado), de hecho, eso me ha inspirado para añadir un safe free surface en CRM32Pro, asi nunca eliminaras dos veces una superficie y te avisara del error :)

- Para el teclado añade esto bajo el case de SDL_KEYDOWN:

if(event.key.keysym.sym==SDLK_ESCAPE) done=0;

- Y por ultimo, el error, pues bien, estabas usando IScreenFX->FadeImageA() de un modo no valido, en la documentacion dice:
CitarFade to given surface from screen surface using alpha channel
y es un pelin vaga y no especifica el detalle que la superfice dada no puede ser la propia screen. El motivo de porque fallaba en modo pantalla completa y no en ventana viene dado por el modo de acceder a video de cada backend, en este caso directdraw, con windib por ejemplo no fallaba. Vamos, resumiendo, añadire un mensajito de warning a las funciones de fade image para evitar justo esto  y el modo de solucionarlo es facil:

// Efecto de Pantalla
sBg=IImage->Load(GFX_RESOURCE,"background");
IScreenFX->FadeImageA(sBg,10);
SDL_FreeSurface(sBg);
IScreenFX->FadeBlackA(10);

Ahora bien, seguro que no ves nada porque va a todo pastilla jeje, y es que ya te dije que eran de las funciones mas antiguas...cuando esto era muy lento y no hacia falta poner un timer, pues bien, ahora si, asi que para ese patch que voy a preparar, el control sera total, le indicaras cuantos ms quieres que dure el fade, en vez de utilizar esos flags un poco ambiguos (FADE_FAST,FADE_SLOW...).


Pues nada, espero que todo esto te sirva, ya me contaras :P

me piro de viernes nocheee  :ph34r:  

SiPoX

 okis, cambios realizados y funcionando! ;) :)

1.- Sí, lo de liberar dos veces la superficie fue un lapsus.. (nooo) , copie el del final para ver si era por que había que liberar la superficie, por si acaso lo estaba colapsando o algo así. Pondré especial cuidado a partir de ahora...  je,je,je.. aunque el safe free surface es una muy buena idea... :D

2.- Okis, 32... en principio puse 32, también lo cambié a 24 para ver si era por eso... y luego no lo volví a cambiar..

3.- El evento para el scape, funciona! ;) :)

4.- Tb okis.. entendí que había que pasarle la propia screen...

Tienes razón.. va muy rápido... incluso a pesar de ponerle un 1... je,je,je.. esperaré al patch.. pues eso no me corre prisa, sólo estaba trasteando un poco con los efectos.. ;) :)

Nuevamente, gracias y un saludoo!!
gamevelop: punto de encuentro para la industria del videojuego

Eduardo Millán: mi perfil ;)






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.