domingo, 16 de septiembre de 2012

Introducción a dx_lib32

El proyecto dx_lib32 es un pequeño API de programación multimedia diseñado para programar videojuegos mediante Visual Basic 6.

El proyecto nació hacia el año 2000 de la mano de José Miguel Sánchez Fernández, [EX3]; quien vio que sus ganas  de desarrollar un videojuego se enfrentaban con las pobres herramientas con las que contaba VB6 en esa época. Por esa razón, decidió desarrollar una él mismo. La historia completa de dx_lib32 la podéis encontrar aquí.

A través de los años, dx_lib32 ha desarrollado una pequeña pero importante comunidad de usuarios a través de los foros de la librería en Stratos-AD , entre los que yo me incluyo. A través de estos foros, empecé a conocer las posibilidades de dx_lib32, y algunos impresionantes proyectos que la gente a desarrollado con ella, incluidos algunos que yo mismo desarrollé.

Por esto, tras casi dos años trabajando con ella, cuando el proyecto dx_lib32 fue liberado como proyecto de código abierto en junio de este año, me pareció el momento perfecto para intentar portar la librería a un lenguaje más "apto" para la programación de videojuegos, como es C++.

Por supuesto, nada puede ser fácil.

Desde el primer momento que empiezas a trabajar con la biblioteca, te das cuenta de la comodidad de esta, y del gran trabajo que tiene que haber sido desarrollar algo como esto. Como  cualquiera que se haya metido en las "entrañas" de DirectX sabe, su utilización es de todo menos "cómoda". Todo esto se confirma cuando accedes al código fuente (Gracias [EX3]!) y ves esa jungla originada tras diez años de desarrollo.
Luego añades las "particularidades" de C++ y tienes un bonito cóctel listo para explotar. Pero eso no me quitó las ganas.

Pero claro, viniendo de VB6 y .NET, todo son particularidades. Empezando por la GUI. Además de la propia dx_lib32, tuve que implementar todo el sistema de ventanas, manejo de eventos, e interacción con teclado/ratón. Lo que implicaba meterse con la Windows API, otra dura de roer. Pero parece que he aprovechado bien el verano, y toda esa parte la doy por finalizada por ahora.

A estas alturas, mi implementación va avanzando, pero no tiene nada que ver todavía con la funcionalidad de dx_lib32, pero por algo se empieza. Decidí empezar por la parte de gráficos, ya que es con la que estoy más familiarizado, y en un futuro buscaré colaboradores para implementar el resto, véase input, sonido, y video. En estos momentos mi colaborador Miguel Oliver y yo estamos terminando la implementación de las primitivas matemáticas básicas, desde resolución de sistemas de ecuaciones, hasta transformaciones 3d/2d. Todo esto pensado para ofrecer al usuario de la biblioteca una interfaz potente y sencilla para trabajar con las funciones de dibujo, además de proveer los aspectos básicos en cuanto a matemáticas se refiere.

En un futuro el código será liberado, de hecho ya hemos preparado un repositorio en github. Todo el que desee acceder al código es libre de hacerlo. Solo pido alguna mención si es utilizado por terceros. (Ya arreglaré la licencia GPL en un futuro).

Vamos a utilizar éste blog para mostrar poco a poco el desarrollo del proyecto. Si surgen sugerencias y/o comentarios sobre el proyecto, son bienvenidos. Cuantos más, mejor.