Es:SDL gfx

From X-Moto
Jump to: navigation, search

English - Català

Análisis del SDL_gfx

EL OpenGL es el motor interprete de gráficos del X-Moto. Provee un aspecto bonito al juego. El problema que hay con el OpenGL es que requiere de hardware y software especial. Por lo tanto, nosotros actualmente estamos escribiendo un segundo front-end gráfico al X-Moto utilizando la librería del SDL_gfx[1]

Esperamos que el front-end del SDL_gfx sea una buena alternativa para el OpenGL pero no un reemplazo. En un mundo idílico nos gustaría que se pudiera cambiar entre los dos motores durante la ejecución.

Actuales motores interpretes

xmoto con opengl normal
xmoto con opengl feo

Hay dos tipos de interpretes, uno normal y otro feo. Los dos están basados en el opengl, que requiere de un buen hardware de opengl en funcionamiento por que el software del opengl aun no es suficientemente rápido para una buena jugabilidad. Pensamos que el front-end del interprete SDL_gfx se vería mejor que el tipo de interprete feo del motor OpenGl. Los dos tipos de interpretes actuales se pueden intercambiar durante la ejecución y se aplican utilizando declaraciones de if/else en el código.

El VDraw y la estructura de la Interfaz gráfica de usuario (GUI)

Vapp diagrama de herencias

El juego del X-Moto contiene una estructura GUI y una librería 2D (VDraw) encastada al inicio del opengl. Estas proveen un poco de abstracción sobre el dibujo. Drawlib es la principal abstracción desde el opengl y ambas aplicaciones del X-Moto, el editor y el juego extienden esta drawlib. No estoy seguro por que se utiliza la herencia pero hace más difícil poder arrancar/apagar DrawLib.

La estructura del GUI también utiliza DrawLib para la mayoría de las funciones. Actualmente no todas las funciones de dibujo las provee DrawLib y el dibujo se hace a muchas partes de la aplicación.

Si queremos proveer de menos implementación del OpenGL al juego, algunas partes del juego especificas del OpenGl se deberían de convertir a DrawLib o excluirlas con definiciones USE_OPENGL.

La buena noticia es que DrawLib y la estructura del GUI proveen suficiente abstracción como para que sea posible reemplazar las funciones del OpenGL con unas diferentes de DrawLib. Así que si no queremos cambiar todo el código del GUI, necesitamos arreglar el problema. Actualmente hemos optado por reemplazar todas las funciones de OpenGl con unas similares de DrawLib.

Ejemplo de código utilizando OpenGL

  /**
   *old opengl mode
   **/
  void GameRenderer::_RenderCircle(int nSteps,Color CircleColor,const Vector2f &C,float fRadius) {
    glBegin(GL_LINE_LOOP);
    glColor3ub(GET_RED(CircleColor),GET_GREEN(CircleColor),GET_BLUE(CircleColor));
    for(int i=0;i<nSteps;i++) {
      float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
      _Vertex( Vector2f(C.x + fRadius*sin(r),C.y + fRadius*cos(r)) );
    }
    glEnd();
  }

Después de agregar unas cuantas funciones de DrawLib en este código, quedaría así.


  /**
   * new abstracted code
   **/
  void GameRenderer::_RenderCircle(int nSteps,Color CircleColor,const Vector2f &C,float fRadius) {
    getParent()->startDraw(DRAW_MODE_LINE_LOOP);
    getParent()->setColor(GET_RED(CircleColor),GET_GREEN(CircleColor),GET_BLUE(CircleColor),255);
    for(int i=0;i<nSteps;i++) {
      float r = (3.14159f * 2.0f * (float)i)/ (float)nSteps;
      getParent()->glVertex( Vector2f(C.x + fRadius*sin(r),C.y + fRadius*cos(r)) );
    }
    getParent()->endDraw();
  }

Objetivos a curto plazo del proyecto

  • xmoto_hack en el Nokia 770 (16bpp/800x480) para ver que problemas hay
  • dar información sobre el rendimiento , lecciones aprendidas
  • documentar el nuevo código
  • encontrar gente para pasarlo a plataformas diferentes

TODO

  • Cuando se inicia el X-Moto empieza por cargar todos los niveles, esto no es necesario y no debería de pasar.


Noticias

Keesj 14:53, 22 December 2006 (CET)

Actualmente es posible seleccionar el motor intérprete como opción de inicio. Esto es un poco mágico por que cuando esta funcionando así, algunas funciones del opengl y del api están en ejecución, parece ser que esto no causa que el juego haga fallida. Estoy muy contento con el actual intérprete de la pequeña pantalla. Espero que el funcionamiento continúe correctamente.


Keesj 09:50, 21 December 2006 (CET)

Esta semana hemos hecho algunos progresos y casi hemos regresado. Hemos re-iniciado el proyecto. Esta vez hemos utilizado el cvs del xmoto y hemos empezado por volver a hacer el código actual asegurándonos que la versión d'OpenGL continúe funcionando. Eso fue bien. Ahora podemos compilar la versión de opengl y la de SDL_gfx utilizando el mismo código. Esperemos que sea posible seleccionar el motor de intérprete durante la ejecución.


Keesj 09:50, 19 December 2006 (CET)

Nuestro patch de SDL_gfx ha sido aceptado y la versión SDL_gfx 2.0.14 ahora contiene el método texturedPolygon requerido por el juego para dibujar polígonos con texturas de una forma bonita http://www.ferzkopp.net/joomla/content/view/19/14/.


Keesj 14:07, 17 December 2006 (CET)

Ayer se creo una rama para permitir la contribución del codigo, la rama del cvs se llama SDL_GFX_INCLUSION.

Progreso del proyecto

18 11 2006. ejecución real desde un Nokia 770
22 11 2006 ejecución del profiler con el xmoto(en un PC)
05 12 2006. las texturas empiezan a aparecer (en un PC)
10 12 2006. Haciendo algún progreso, el fondo negro se ve mejor y el dibujo del texto es mas rápido
14 12 2006. Ahora los arboles son interpretados
22 12 2006 pantalla de titulo del Xmoto con SDL_gfx, casi perfecto !!!
22 12 2006 La moto no se interpreta demasiado be, pero fíjate que bonito fondo
22 12 2006 pantalla de pausa con alpha blending
24 12 2006 Difícil saber si es la versión del opengl o la del sdl:)
24 12 2006 SDL_gfx, no tan difícil, verdad?
28 12 2006 xmoto 0.2.5-test ejecutándose en n770 (level 1) frecuencia de fotogramas lenta
28 12 2006 xmoto 0.2.5-test ejecutándose en n770 (Pantalla de título)