Artículo perteneciente a la sección del PakEngine
Hola a todos,
En el capítulo anterior nos centramos en implementar TDD, así pues, lo lógico es que el capítulo de hoy se aproveche de TDD para refactorizar todo el código.
Si recordáis todo el código del motor estaba en un fichero (PakEngine.c); la gracia ahora está que con la única premisa de eliminar duplicaciones, todo ese código se puede ir modularizando y exportando a otros ficheros.
Concretamente el diseño que me ha surgido es este :
PakEngine
|-> Render: Módulo que tiene las funcionalidades de pintado.
|-> RenderList : Módulo que tiene la funcionalidad de almacenar tareas de pintado.
|-> SpriteList : Módulo que se encarga de almacenar recursos gráficos.
Si os queréis bajar el código lo podéis hacer desde aquí
Para los incredulos, aquí teneis el código del PakEngine.cpp:
#include <stdlib.h>
#include <GL/glfw.h>
#include "PakEngine.h"
#include "RenderList.h"
#include "Render.h"
#include "SpriteList.h"
#include <iostream> //Usada para imprimir por consola
using namespace std;
#pragma comment(lib, "corona.lib")
//Funciones de pintado
DLLEXPORT void PAKENGINE_DrawGraf(int x, int y, int z, int id )
{
RENDERLIST_Insert(x,y,z,id);
}
//Inicialización, renderizado y deInit
DLLEXPORT void PAKENGINE_Init(char *cad,int w,int h)
{
if (glfwInit() != GL_TRUE)
exit(0);
// 800 x 600, 16 bit color, no depth, alpha or stencil buffers, windowed
if (glfwOpenWindow(w, h, 8, 8, 8, 0, 0, 0, GLFW_WINDOW) != GL_TRUE)
exit(0);
glfwSetWindowTitle(cad);
// set the projection matrix to a normal frustum with a max depth of 50
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(.5 * w, -.5 * w, -.5 * h, .5 * h, 1, 50);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW )
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
}
//Nos devuelve si el loop de juego ha de seguir o no
DLLEXPORT int PAKENGINE_Render(void)
{
// escape to quit, arrow keys to rotate view
if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
return 0;
// Limpiamos la pantalla para preparala para el siguiente pintado
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0,0, -30);
//Renderizamos la escena.
RENDER_Run();
// swap back and front buffers
glfwSwapBuffers();
return 1;
}
DLLEXPORT void PAKENGINE_DeInit(void)
{
glfwTerminate();
exit(0);
}
DLLEXPORT int PAKENGINE_LoadGraph(char cad[])
{
return SPRITELIST_Insert(cad);
}
Que hemos conseguido con TDD??? Un código modular, simple y mantenible y sobretodo, seguro. Si en el futuro queremos mejorar el rendimiento del motor nos será muy fácil ya que tendremos la protección de TDD por si nos equivocamos.
Resumiendo, un proyecto en el que se disfruta trabajar.
Espero que os haya gustado.
Nos vemos,
<< capitulo anterior siguiente capitulo >>
Blog de programación enfocado a estudiantes principiantes de C/C++ en español. Dispone de cursos de todos los niveles y para multitud de usos.
Entradas populares
-
Una pregunta que me hacen en muchas ocasiones es ¿¿qué significa %2?? La respuesta tiene dos acepciones en función de si lo estamos u...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, ASCII Art es el hecho de hacer di...
-
Articulo perteneciente a : Referencias de programación Hola a todos Os pongo una aportación que a más de uno le irá bien, un resumen de ...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos... Un compañero vuestro ha...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, El ejercicio de hoy se basa en c...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> El c apitulo de hoy trata sobre las instrucc...
-
Capítulo perteneciente al tutorial de opengl desde cero Hola a todos, Antes que nada quiero que tengáis en cuenta que gran parte de lo q...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos, Este tutorial intenta ser e...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Bienvenidos a un nuevo capitulo del curso ...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, Hoy toca un ejemplo muy muy sencil...
0 comentarios :
Publicar un comentario