SDL(SimpleDirectMediaLayer) es una librería que abstrae las funciones de bajo nivel de renderizado de gráficos, imput, sonido y los expone en una API para que podamos construir un juego, un engine o una aplicación tipo IMGUI con ello. Lo interesante de SDL sobretodo para el tema gráfico en 2D (Para 3D no hay API almenos en la versión 2) es que abstrae la implementación de hardware que utilizará para mostrar gráficos y crear una ventana. De manera que si compilamos y ejecutamos en un sistema que usa OpenGL, usará OpenGL, lo mismo para DirectX en Windows y el que utilice MacOS(Metal?). La librería está construída en C pero es interoperable con C++ (que es mi caso) y existen un montón de bindings para diferentes lenguajes de programación. Actualmente está en desarrollo una versión 3, yo estoy utilizando la versión 2 más estable. Más info en su web SDL.
Mi experiencia con el gamedev hasta ahora ha sido Godot con GDScript. Es un motor genial y funciona muy bien. Mi interés por SDL viene dado por profundizar, bajar de nivel y ver los entresijos que hay en los sistemas que componene los engines como son los sprites, texturas, como se renderiza, implementar scripting etc… Tengo algo de experiencia con el lenguaje C, de cuando lo usaba en programación de procesos y redes en clase. No obstante, todos mis intentos por acercarme a C++ han sido infructuosos hasta la fecha. Y me da rabia porque es el lenguaje que se ha utilizado más extensivamente para el gamedev y si lo dominase, podría hacer alguna aportación al source code de Godot o el motor Open X-ray que utiliza el Stalker Anomaly. C++ es un lenguaje gigantesco de más de 40 años que no solo hereda todo C, si no que acumula toda una pletora de palabras reservadas, statements, tipos, templates, memoria dinámica y cien maneras distintas de hacer una cosa (la mayoría con consecuencias nefastas). Para rematar, el toolchain es horrendo. Comparado con lenguajes modernos(que también es una comparación injusta) como Rust o Python que instalar y usar una librería es cuestión de poner unas líneas en Cargo o hacer pip install
. Añadir dependencias y compilar cosas en C/C++ supone entrar en el maravilloso mundo de los makefiles y CMake, prácticamente necesitas aprender un lenguaje tipo DSL para poder empezar a usar el lenguaje que quieres usar. Aún con todo, es un lenguaje interesante y quiero resarcirme y aprenderlo. Quizás SDL sea una buena oportunidad para ello.
De momento ya llevo unas semanas utilizando como referencia el libro C++ Crash Course de John Lopinoso publicado por No Starch Press, un tochazo de casi 900 páginas que introduce la mayoria de los conceptos importantes del lenguaje y ofrece una perspectiva enfocada a escribir un “c++ moderno” siguiendo los estándares más recientes del lenguaje.
En próximas partes seguiré hablando de mi viaje por c++ y SDL.