- rlsw é um renderizador de software no estilo OpenGL 1.1, oferecendo um backend alternativo para executar o raylib em ambientes sem GPU
- Suporta diversos modos de renderização, como ponto, linha, triângulo e quad, além de amplo suporte a clipping, textura, buffers de cor e profundidade múltiplos
- As texturas suportam todos os formatos sem compressão que o raylib suporta, e também é possível controlar de forma detalhada as configurações de filtragem e wrap
- Possui recursos gráficos 3D principais como pilha de matrizes, teste de profundidade, blend e cull face, com extrema compatibilidade obtida por meio do uso de vinculações de funções OpenGL
- Com menos de 5 mil linhas, o projeto tem vantagem de simplicidade e facilidade de integração em relação a outros renderizadores de software, em termos de desempenho e leveza
rlsw: Visão geral do renderizador OpenGL de software do raylib
Introdução
- rlsw é uma biblioteca de renderizador de software no estilo OpenGL 1.1 que implementa por software o conjunto completo de recursos fornecidos por
rlgl.h do raylib
- Foi projetado como um backend substituto direto para permitir executar o raylib em dispositivos sem GPU
Recursos principais
- Renderização em framebuffer interno customizado, com suporte a vários modos de cor/profundidade (RGB 8, 16, 24 bits, Depth 8/16/24 bits)
- Modos de renderização suportados: ponto, linha, triângulo, quad
- Espessura de ponto, largura de linha e configurações adicionais de modo de polígono
- Todos os modos de renderização possuem clipping
- Recursos de textura: suporta todos os formatos não comprimidos suportados pelo raylib
- Verificação de minificação/magnificação
- Filtro point/bilinear
- Aplicação granular de modos de wrap por coordenada S/T
- Suporte direto a vertex arrays, permitindo desenho de primitivas imediatamente
- Suporte a pilha de matrizes (Push/Pop)
- Outros recursos: getters no estilo OpenGL, redimensionamento de framebuffer, correção de perspectiva, recorte por scissor, teste de profundidade, blend, cull face
Uso e personalização
- Estrutura de único cabeçalho e fonte, com geração da parte de implementação via
#define RLSW_IMPLEMENTATION
- Suporta personalização pelo usuário antes da compilação com múltiplas constantes de microconfiguração
- Ex.: ajuste do máximo de framebuffers ou texturas, tamanho máximo etc.
Estrutura e tipos
- Define vários enums e tipos compatíveis com OpenGL, além de structs internas (sw_vertex_t, sw_texture_t etc.)
- Remapeia a maior parte das chamadas OpenGL para uso de funções
rlsw
- Estrutura de gestão de estado interno robusta para matrizes, estados e gerenciamento de texturas
Licença e uso
- Licença MIT, permitindo uso comercial e não comercial livre, bem como criação de obras derivadas
- Como dá mais ênfase a leveza e à substituição totalmente em software do que ao desempenho, tem vantagem em integração e distribuição simplificadas
Resumo detalhado
Estrutura do cabeçalho e explicação
- rlsw substitui quase totalmente por software as funcionalidades do OpenGL 1.1
- Este cabeçalho (
rlsw.h) define
- tipos de valor, enums e structs personalizados
- substituição de comandos OpenGL por funções internas do
rlsw via macros
- declarações de API (inicialização, cópia/obtenção de framebuffer,
draw, clear, entrada de vértices/texturas etc.)
Recursos representativos
- Suporte interno a múltiplas matrizes baseadas em pilha (dedicadas a Projection/ModelView/Texture)
- Gerenciamento de estado de renderização: manipulação de bits de estado como Scissor, textura ativa ou Depth Test
- Compatibilidade com OpenGL: diversos getters, cópia de estado, tratamento de erros
- Manipulação de textura: formatos não comprimidos, modos de filtro/wrap, cópia de memória etc.
- Em modo padrão, suporta a maioria de formas 2D/3D (ponto, linha, triângulo, quad) com tratamento de cor e profundidade
Valores configuráveis
- Resolução e quantidade de framebuffers/texturas, bit depth dos buffers de cor/profundidade, profundidade da pilha de matrizes, número máximo de texturas, entre outros
- Ajustes avançados pelo usuário como o valor de
SW_MAX_CLIPPED_POLYGON_VERTICES também são possíveis
Principais elementos de estruturas internas
- sw_context_t: engloba todos os estados e buffers do contexto inteiro
- Gere internamente de forma integrada vertex buffer, array de texturas, framebuffer, flags de estado etc.
Vantagens e casos de uso
- Otimizado para dispositivos sem GPU, ambientes embarcados, portabilidade por SO, testes e automação de desenvolvimento por SO
- É possível executar apps baseados em raylib em software completo, mesmo sem OpenGL
- Estrutura leve favorece bastante novos experimentos/desenvolvimento e suporte a ambientes não padrão
Licença e contribuidores
- Redistribuição flexível por licença MIT
- Revisão 2025–2026: Le Juez Victor, Ramon Santamaria
Conclusão
- rlsw é um renderizador puramente por software para raylib com compatibilidade quase total com OpenGL
- Em um único arquivo, com leveza e extensibilidade, além de suporte a todos os formatos de textura do raylib, apresenta baixa barreira de entrada e alta integrabilidade em comparação com outras soluções gráficas de software
- Possui grande valor especialmente em projetos com objetivo de gráficos de baixo nível e portabilidade
1 comentários
Opinião no Hacker News
gl.hque dava para passar campos adicionais para a GPU por meio de funções de extensão). Estou usando SFML como framework gráfico e provavelmente ele é baseado em OpenGL 1.x; como exemplo mais recente, o jogo Metropolis 1998 mostra o que esse tipo de abordagem pode fazer