Ca:SDL gfx

From X-Moto
Revision as of 00:36, 13 December 2006 by Trullo (talk | contribs)
Jump to: navigation, search

English - Español

Anàlisis de l'SDL_gfx

L'OpenGL es el motor interpret de gràfics de l'X-Moto. Proveeix un aspecte bonic al joc. El problema que hi ha amb l'OpenGL es que requereix de hardware i software especial. Per tant, nosaltres actualment estem escrivint un segon front-end gràfic al X-Moto utilitzant la llibreria de l'SDL_gfx[1]

Esperem que el front-end de l'SDL_gfx sigui una bona alternativa per l'OpenGL però no un reemplaç. En un mon idíl·lic ens agradaria que es pogués canviar entre tots dos motors durant l'execució.

Actuals motors intèrprets

xmoto amb opengl normal
xmoto amb opengl lleix

Hi ha dos tipus d'intèrprets, un normal i un altre lleix. Tots dos estan basats en l'opengl, que requereix un bon hardware d'opengl en funcionament per que el software de l'opengl encara no es prou ràpid per una bona jugavilitat. Pensem que el front-end de l'interpret SDL_gfx es veuria millor que el tipus d'interpret lleix del motor OpenGl. Els dos tipus d'intèrprets actuals es poden intercanviar durant l'execució i s'aplican utilitzant declaracions de if/else en el codi.

El VDraw i l'estructura de l'Interfície gràfica d'usuari (GUI)

Vapp diagrama d'herències

El joc de l'X-Moto conté una estructura GUI i una llibreria 2D (VDraw) encastada al amunt de l'opengl. Aquests proveeixen una mica d'abstracció sobre el dibuix. Drawlib es la principal abstracció des de l'opengl i ambdues aplicacions de l'X-Moto, l'editor i el joc estenen aquesta drawlib. No estic segur per que s'utilitza l'herència però fa més difícil poder engegar/des-engegar DrawLib.

L'estructura de l'GUI també utilitza DrawLib per la majoria de les funcions. Actualment no totes les funcions de dibuix les proveeix DrawLib i el dibuix es fa a moltes parts de l'aplicació.

Si volem proveir de menys implementació de l'OpenGL al joc, algunes parts del joc especifiques de l'OpenGl s'haurien de convertir a DrawLib o excloure-les amb definicions USE_OPENGL.

La bona noticia es que DrawLib i l'estructura de l'GUI proveeixen suficient abstracció per a que sigui possible reemplaçar les funcions de l'OpenGL amb unes diferents de DrawLib. Aixi que si no volem canviar tot el codi de l'GUI, necessitem arreglar el problema. Actualment hem optat per reemplaçar totes les funcions d'OpenGl amb unes similars de DrawLib.

Exemple de codi utilitzant 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();
  }

Despres d'afegir unes quantes funcions de DrawLib en aquet codi, quedaria aixi.


  /**
   * 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();
  }

Objectius a curt termini del projecte

  • xmoto_hack en el Nokia 770 (16bpp/800x480) per veure quins problemes hi ha
  • donar informació sobre el rendiment , lliçons enteses
  • documentar el nou codi
  • trobar gent per passar-ho a plataformes diferents

TODO

  • Quan s'inicia l'X-Moto comença per carregar tots els nivells, aixo no es necesari i no hauria de passar.

Progress del projecte

18 11 2006. execució real des de un Nokia 770
22 11 2006 execució del profiler amb l'xmoto(en un PC)
05 12 2006. les textures comencen a aparèixer (en un PC)
10 12 2006. Fent algun progrés,el fons negre es veu millor i el dibuix del text es mes ràpid