Difference between revisions of "Ca:SDL gfx"

From X-Moto
Jump to: navigation, search
Line 8: Line 8:
 
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ó.
 
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 interprets ==
+
== Actuals motors intèrprets ==
 
[[Image:Xmoto-0.2.3_opengl_normal.png|thumb|xmoto amb opengl normal]]
 
[[Image:Xmoto-0.2.3_opengl_normal.png|thumb|xmoto amb opengl normal]]
 
[[Image:Xmoto-0.2.3_opengl_ugly.png|thumb|xmoto amb opengl lleix]]
 
[[Image:Xmoto-0.2.3_opengl_ugly.png|thumb|xmoto amb opengl lleix]]
  
Hi ha dos tipus d'interprets, un normal i un altre lleix. Tots dos estan basats en l'opengl, que requereix un bon hardware d'opengl en funcionament perque el software de l'opengl encara no es prou rapit per una bona jugavilitat.
+
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-entd'' de l'interpret SDL_gfx es veuria millor que el tipus d'interpret lleix del motor OpenGl.
 
Pensem que el ''front-entd'' de l'interpret SDL_gfx es veuria millor que el tipus d'interpret lleix del motor OpenGl.
Els dos tipus d'interprets actuals es poden intercanviar durant l'execució i s'aplican utilitzant declaracions de if/else en el codi.
+
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'')  ==
 
== El VDraw i l'estructura de l'Interfície gràfica d'usuari (''GUI'')  ==
[[Image:Classvapp_app_inherit_graph.png|frame|Vapp diagrama d'herencia]]
+
[[Image:Classvapp_app_inherit_graph.png|frame|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'abstraccio sobre el dibuix. Drawlib es la principal abstraccio des de l'opengl i ambdues aplicacions de l'X-Moto, l'editor i el joc estenen aquesta drawlib. No estic segur perque s'utilitza l'herencia però fa més dificil poder engegar/des-engegar DrawLib.  
+
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'aplicacio.
+
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 proveeir de menys implementacio 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'''.
+
'''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.
 
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.
Line 61: Line 61:
 
== Objectius a curt termini del projecte ==
 
== Objectius a curt termini del projecte ==
 
*xmoto_hack en el Nokia 770 (16bpp/800x480) per veure quins problemes hi ha
 
*xmoto_hack en el Nokia 770 (16bpp/800x480) per veure quins problemes hi ha
*donar informacio sobre el rendiment , lliçons enteses
+
*donar informació sobre el rendiment , lliçons enteses
 
*documentar el nou codi
 
*documentar el nou codi
 
*trobar gent per passar-ho a plataformes diferents
 
*trobar gent per passar-ho a plataformes diferents
Line 69: Line 69:
  
 
== Progress del projecte ==
 
== Progress del projecte ==
 
 
[[Image:Xmoto_n770_2006_11_18.jpg|thumb|18 11 2006. execució real des de un Nokia 770]]
 
[[Image:Xmoto_n770_2006_11_18.jpg|thumb|18 11 2006. execució real des de un Nokia 770]]
 
[[Image:Xmoto_profiling_2006_22_11.png|thumb|22 11 2006 execució del profiler amb l'xmoto(en un PC)]]
 
[[Image:Xmoto_profiling_2006_22_11.png|thumb|22 11 2006 execució del profiler amb l'xmoto(en un PC)]]
[[Image:Xmoto_with_hacked_gfx_2006_12_05.png|thumb|05 12 2006. les textures començan a apareixer (en un PC)]]
+
[[Image:Xmoto_with_hacked_gfx_2006_12_05.png|thumb|05 12 2006. les textures comencen a aparèixer (en un PC)]]
[[Image:Xmoto_n770_hack_2006_12_10.jpg|thumb|10 12 2006. Fent algun progress,el fons negre es veu millor i el dibuix del text es mes rapid]]
+
[[Image:Xmoto_n770_hack_2006_12_10.jpg|thumb|10 12 2006. Fent algun progrés,el fons negre es veu millor i el dibuix del text es mes ràpid]]

Revision as of 04:46, 12 December 2006

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-entd 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