- rlsw es un renderizador de software con estilo OpenGL 1.1 que ofrece un backend alternativo para ejecutar raylib en entornos sin GPU
- Soporta numerosos modos de renderizado, entre ellos puntos, líneas, triángulos y quads, además de funciones amplias como clipping, texturas, buffers de color/profundidad múltiples
- Las texturas pueden usar todos los formatos sin comprimir compatibles con raylib, y también permite controlar con precisión la configuración de filtrado y wrapping
- Incluye funciones 3D clave como pila de matrices, depth test, blend, cull face, y maximiza la compatibilidad usando bindings de funciones de OpenGL
- Con un tamaño de menos de 5 mil líneas, destaca frente a otros renderizadores de software por su simplicidad e integración, además de su ligereza
rlsw: Resumen del renderizador OpenGL por software de Raylib
Introducción
- rlsw es una librería de renderizado por software estilo OpenGL 1.1 que implementa completamente en software la funcionalidad completa ofrecida por
rlgl.h de raylib
- Está diseñado como backend de reemplazo directo para ejecutar raylib incluso en dispositivos que no tienen GPU
Funciones principales
- Realiza el renderizado en un framebuffer interno personalizado y admite múltiples modos de color/profundidad (RGB 8, 16, 24 bit, Depth 8/16/24 bit)
- Modos de renderizado soportados: puntos, líneas, triángulos, quads
- Configuración adicional de renderizado disponible, como grosor de puntos, ancho de líneas y modo de polígono
- Todos los modos de renderizado admiten clipping
- Funciones de textura: soporta todos los formatos sin compresión que raylib soporta
- Comprobación de minificación/magnificación
- Filtrado point/bilinear
- Aplicación detallada de modo wrap por coordenada S/T
- Soporte directo de arrays de vértices, con dibujo inmediato de primitivas
- Soporte de pila de matrices (Push/Pop)
- Otras funciones: getters estilo OpenGL, redimensionado de framebuffer, corrección de perspectiva, scissor clipping, depth test, blend, cull face
Uso y personalización
- Tiene una estructura de un solo encabezado y fuente, y permite generar la implementación mediante
#define RLSW_IMPLEMENTATION
- Permite personalización por parte del usuario con múltiples constantes de configuración antes de compilar
- Ejemplo: ajustar el máximo de framebuffer o texturas y sus tamaños
Estructura y tipos
- Define diversos enums y tipos compatibles con OpenGL, así como structs internos (como
sw_vertex_t, sw_texture_t, etc.)
- Es posible reemplazar y reutilizar la mayoría de las llamadas de OpenGL como funciones de
rlsw
- Una estructura de manejo de estado interno robusta para matrices, estados y texturas, entre otros
Licencia y uso
- Con licencia MIT, permite uso y distribución comercial y no comercial, además de la creación de derivadas
- Al priorizar la ligereza y el reemplazo total por software sobre el rendimiento, destaca en integración y despliegue sencillos
Resumen detallado
Estructura del encabezado y descripción
- rlsw reemplaza casi por completo en software, a nivel de función, las capacidades de OpenGL 1.1
- Este encabezado (
rlsw.h) define lo siguiente
- tipos de valor, enums y structs personalizados
- reemplazo de comandos de OpenGL por funciones internas de
rlsw mediante macros
- la declaración de API (inicialización, copia/obtención de framebuffer, draw, clear, entrada de vértices/texturas, etc.)
Funciones destacadas
- Soporta internamente varias matrices basadas en stack (exclusivas de Projection/ModelView/Texture)
- Administración de estado de renderizado: manipulación de bits de estado como Scissor, activación de textura o Depth Test
- Compatibilidad con OpenGL: diversos getters, copia de estado y manejo de errores
- Manejo de texturas: formatos sin compresión, modos de filtro/wrap, copias de memoria, etc.
- De forma predeterminada puede gestionar la mayoría de formas 2D/3D (punto, línea, triángulo, quad), así como procesamiento de color y profundidad
Valores ajustables
- Resolución y cantidad de framebuffers/texturas, bits de buffers de color/profundidad, profundidad de stack de matrices, número máximo de texturas, entre otros
- Ajustes avanzados del usuario disponibles, como el valor de
SW_MAX_CLIPPED_POLYGON_VERTICES
Elementos principales de las estructuras internas
- sw_context_t: incluye todos los estados y buffers de todo el contexto
- Gestiona de forma unificada internamente
vertex buffer, texture array, framebuffer, flags de estado, entre otros
Ventajas y casos de uso
- Optimizado para dispositivos sin GPU, entornos embebidos y automatización de portabilidad/pruebas/desarrollo por sistema operativo
- Posibilita ejecutar aplicaciones basadas en raylib completamente en software, incluso sin OpenGL
- La arquitectura ligera es muy conveniente para experimentación y desarrollo nuevos, así como para soporte de entornos no estándar
Licencia y contribuidores
- Redistribución flexible bajo licencia MIT
- Revisión de Le Juez Victor y Ramon Santamaria (2025–2026)
Conclusión
- rlsw es un Pure Software Renderer para raylib con compatibilidad casi completa con OpenGL
- En un solo archivo, con ligereza, escalabilidad y soporte de todos los formatos de textura de raylib, supera en baja fricción de integración y de entrada a otras soluciones gráficas por software
- Es especialmente valioso para proyectos con enfoque en gráficos de bajo nivel y portabilidad
1 comentarios
Comentario en Hacker News
gl.h). Estoy usando SFML como framework gráfico y supongo que probablemente está basado en OpenGL 1.x. Como ejemplo moderno, el juego Metropolis 1998 muestra lo que se puede lograr con este enfoque.