Ca:SDL gfx

From X-Moto
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'intèrpret lleix del motor OpenGl. Els dos tipus d'intèrprets actuals es poden intercanviar durant l'execució i s'aplocan 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, aixó no es necessari i no hauria de passar.

Noticies

Keesj 14:53, 22 December 2006 (CET)

Actualment es possible seleccionar el motor interpret com a opció d'inici. Aixó es una mica màgic perquè quant esta funcionant així, algunes funciones de l'opengl i de l'api estan en execució, sembla ser que això no causa que el joc tingui una fallida. Estic molt content amb l'actual interpret de la petita pantalla. Espero que el funcionament continuï correctament.


Keesj 09:50, 21 December 2006 (CET)

Aquesta setmana hem fer uns quants progressos i gaire be hem tornat. Hem re-iniciat el projecte. Aquest cop hem utilitzat el cvs de l'xmoto i hem començat per tornar a fer el codi actual assegurant-nos que la versió d'OpenGL continui funcionant. Aixó va anar be. Ara podem compilar la versió d'opengl i la d'SDL_gfx fent servir el mateix codi. Esperem que sigui possible seleccionar el motor d'intèrpret durant l'execució.


Keesj 09:50, 19 December 2006 (CET)

El nostre patch de SDL_gfx ha sigut acceptat i la versió SDL_gfx 2.0.14 ara conté el mètode texturedPolygon requerit pel joc per a dibuixar polígons amb textures d'una forma bonica http://www.ferzkopp.net/joomla/content/view/19/14/.


Keesj 14:07, 17 December 2006 (CET)

Ahir es va crear una branca per permetre la contribució del codi, la branca del cvs es diu SDL_GFX_INCLUSION.

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
14 12 2006. Ara els arbres també s'interpretan
22 12 2006 pantalla de titol de l'Xmoto amb SDL_gfx, quasi perfecte !!!
22 12 2006 La moto no s'interpreta gaire be, pero fixa't en el bonic fons
22 12 2006 pantalla de pausa amb alpha blending
24 12 2006 Difícil saber si es la versió l'opengl o la del sdl:)
24 12 2006 SDL_gfx, no tant difícil, oi?
28 12 2006 xmoto 0.2.5-test executant-se en n770 (level 1) freqüència de fotogrames lenta
28 12 2006 xmoto 0.2.5-test executant-se en n770 (Pantalla de titol)