5.1 KiB
FnixLib
Biblioteca multimedia propia, escrita en C, para juegos y aplicaciones. Sin bibliotecas multimedia de terceros (nada de SDL, GLFW, raylib, GLAD ni GLEW): solo usa la biblioteca estándar de C y las interfaces nativas del sistema.
Versión 0.1.0 — primera versión funcional, solo Linux (X11), solo 2D por software.
Qué hay hoy
| Módulo | Estado |
|---|---|
Errores (errors.h) |
Códigos y mensajes por hilo |
Ventana (window.h) |
Linux/X11, tamaño fijo, límite de FPS, delta time |
Dibujo 2D por software (draw2d.h, canvas.h) |
Píxel, línea, rectángulo, círculo (lleno y contorno), alfa |
Teclado y ratón (input.h, events.h) |
Estado por fotograma y cola de eventos |
Tiempo (time.h) |
Reloj monótono y espera |
No existe todavía: imágenes/texturas, fuentes y texto, audio, matemáticas,
colisiones, animaciones, 3D, mandos, Windows, instalación (cmake --install) ni
find_package. Los encabezados correspondientes no se han creado a propósito.
Requisitos
- Compilador C con soporte de C17: GCC (verificado) o Clang (no verificado).
- CMake 3.16 o superior y Make.
- Xlib: paquete
libx11en Arch/CachyOS,libx11-deven Debian/Ubuntu. - Para ejecutar programas: un servidor X11 (o XWayland en una sesión Wayland, no verificado).
En CachyOS / Arch:
sudo pacman -S --needed gcc cmake make libx11
Compilar y probar
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure
./build/basic
ctest ejecuta cuatro pruebas. La de window_x11 necesita un servidor X11; sin
DISPLAY se omite. Para ejecutarla sin pantalla: instalar xorg-server-xvfb y usar
xvfb-run -a ctest --test-dir build --output-on-failure.
Opciones de CMake: -DFNIX_BUILD_EXAMPLES=OFF, -DFNIX_BUILD_TESTS=OFF,
-DFNIX_WARNINGS_AS_ERRORS=ON, -DFNIX_SANITIZE=ON (AddressSanitizer + UBSan).
Ejemplo mínimo
#include <fnix/fnix.h>
#include <stdio.h>
int main(void)
{
FnixWindow *window = fnix_window_create("Mi juego", 800, 600);
if (window == NULL) {
fprintf(stderr, "Error: %s\n", fnix_last_error());
return 1;
}
while (!fnix_window_should_close(window)) {
fnix_begin_frame(window); /* eventos + destino de dibujo */
if (fnix_key_pressed(window, FNIX_KEY_ESCAPE)) {
fnix_window_request_close(window);
}
fnix_clear(FNIX_BLACK);
fnix_draw_circle(400, 300, 50, FNIX_RED);
fnix_end_frame(window); /* muestra y limita a 60 FPS */
}
fnix_window_destroy(window);
return 0;
}
Un programa más completo (movimiento con teclado, ratón, alfa) está en
examples/basic/main.c. Para usar la biblioteca desde otro proyecto CMake mientras
no exista la instalación, añade este repositorio con add_subdirectory(FnixLib) y
enlaza FnixLib::fnix.
Estructura
include/fnix/ API pública (fnix.h incluye todo)
src/core/ errores y ventana (lógica independiente del sistema)
src/graphics/ lienzo y renderizador 2D por software
src/input/ estado de teclado/ratón y cola de eventos
src/time/ reloj y espera (POSIX)
src/platform/ interfaz con el sistema; linux/ contiene la parte de X11
tests/ pruebas (cuatro ejecutables)
examples/basic/ ejemplo interactivo
docs/ DECISIONS.md: decisiones de diseño y límites conocidos
Estado de verificación (13/10/2026)
Verificado en: Ubuntu 24.04 (x86_64), GCC 13.3, Xlib, servidor Xvfb de 24 bits.
- Compilación con
-std=c17 -Wall -Wextra -Wpedantic -Wshadow -Werror: sin avisos. - Las cuatro pruebas pasan, también compiladas con AddressSanitizer + UBSan (sin errores ni fugas).
- La prueba de integración comprueba que lo dibujado llega a la ventana (leyendo píxeles del servidor), el teclado, el ratón, la rueda, el cierre de ventana, la destrucción y el límite de FPS.
- El ejemplo
basicse ejecutó bajo Xvfb a ~60 FPS y se inspeccionó una captura.
No verificado: la configuración con CMake (el entorno de pruebas no tenía
cmake; se compiló con gcc directamente usando las mismas opciones, así que el
CMakeLists.txt debe probarse), Clang, una pantalla real o Wayland/XWayland,
bibliotecas compartidas (BUILD_SHARED_LIBS=ON) y Windows.
Limitaciones conocidas
- Solo Linux/X11. La ventana tiene tamaño fijo y no se puede redimensionar.
- Exige una pantalla TrueColor de 24/32 bits con orden de bytes igual al de la CPU; en otro caso la creación de la ventana falla con un mensaje claro.
- Los errores de protocolo de X11 los gestiona el manejador por defecto de Xlib, que termina el proceso; FnixLib no lo sustituye para no interferir con el programa.
- Las teclas dependen de la distribución de teclado activa (ver
docs/DECISIONS.md). - Sin sincronización vertical ni aceleración por GPU.
- Coordenadas, tamaños y radios de dibujo limitados a ±2^28.
- Un
FnixCanvasde destino es un valor por hilo; el dibujo no es seguro desde varios hilos sobre el mismo lienzo.
Las decisiones de diseño y el motivo de cada una están en docs/DECISIONS.md. El
repositorio no incluye licencia: debe elegirla el autor.