Vários cabeçalhos C/C++ de plataforma cruzada de arquivo único implementando bibliotecas independentes.
biblioteca | descrição | versão mais recente | idioma(s) |
---|---|---|---|
fofo_c2 | Rotinas de detecção de colisão 2D em primitivas, resultados booleanos e/ou geração de coletores, teste de moldagem/varredura de forma, raycasts | 1.10 | C/C++ |
fofo_net | Biblioteca de rede para jogos que exigem uma camada de confiabilidade opcional sobre UDP com um esquema de segurança integrado | 1.03 | C/C++ |
fofo_tiled | Carregador muito eficiente para mapas Tiled exportados para formato JSON | 1.07 | C/C++ |
fofo_aseprite | Analisa arquivos .ase/.aseprite em uma coleção de estruturas compacta e conveniente | 1.04 | C/C++ |
som_fofo | Load/play/loop (com plugin)/pan WAV + OGG (stb_vorbis wrapper para OGG) em mono/estéreo, mixer personalizado de alto desempenho, suporte para música + crossfade | 2.08 | C/C++ |
fofo_matemática | Matemática vetorial 3D de nível profissional por meio de intrínsecos SSE | 1.02 | C++ |
fofo_png | carregar/salvar PNG, compilador de atlas de textura, descompressor compatível com DEFLATE | 1.05 | C/C++ |
cute_spritebatch | Em lote de sprites 2D em tempo de execução. Constrói atlas dinamicamente na memória. Útil para implementar um sprite batcher para qualquer finalidade (como jogos 2D) para renderização de alto desempenho, sem a necessidade de pré-compilar atlas de textura no disco. | 1.06 | C/C++ |
fofo_sync | Coleção de primitivas práticas de sincronização, incluindo bloqueio de leitura/gravação e sistema de pool de threads/tarefas | 1.01 | C/C++ |
fofo_tls | Crie uma conexão TLS com um site via TCP, útil para solicitações HTTPS. | 1.01 | C/C++/Obj-C |
Geralmente esses cabeçalhos não possuem dependências e devem ser incluídos diretamente em sua fonte (verifique cada cabeçalho para obter documentação específica no topo do arquivo). Cada cabeçalho possui um símbolo LIBNAME_IMPLEMENTATION; adicione isso a uma única unidade de tradução em seu código e inclua o cabeçalho logo após para definir os símbolos da biblioteca. Caso contrário, apenas inclua o cabeçalho normalmente.
Alguns cabeçalhos também possuem exemplos de código ou demonstrações. Neste repositório basta procurar os exemplos correspondentes ou pastas de testes. As pastas de exemplo são particularmente úteis para descobrir como usar um cabeçalho específico.
Aqui está um link para o chat do discord para cute_headers. Sinta-se à vontade para entrar e fazer perguntas, dar sugestões ou conversar. Se alguém já usou cute_headers, seria ótimo ouvir sua experiência! https://discord.gg/2DFHRmX
Outra maneira fácil de entrar em contato comigo é pelo twitter @randypgaul.
- Qual é o sentido de criar um único arquivo? Por que há implementação e funções estáticas nos cabeçalhos?
Incluir esses cabeçalhos é como incluir um cabeçalho normal. No entanto, para definir a implementação, cada cabeçalho se parece com isto:
// Do this ONCE in a .c/.cpp file
#define LIBNAME_IMPLEMENTATION
#include "libname.h"
// Everywhere else, just include like a typical header
#include "libname.h"
Isso transformará o arquivo em uma combinação de cabeçalho + arquivo c, uma vez. O objetivo disso é: A) manusear o cabeçalho ou enviá-lo para as pessoas é fácil, sem arquivos zip ou qualquer coisa, basta copiar e colar um único arquivo; B) scripts de construção são um pé no saco, e essas bibliotecas de arquivo único podem ser integradas em qualquer projeto sem modificar um único script de construção.
- Escrever todo o código em um cabeçalho não prejudica o tempo de compilação?
O estigma de que as implementações de cabeçalho retardam o tempo de compilação vem do código embutido e do spam de modelo. Em ambos os casos, cada unidade de tradução deve percorrer o cabeçalho e colocar versões in-line das funções ou, para modelos, gerar várias funções específicas do tipo. A situação fica pior quando o vinculador entra em ação e precisa unir as unidades de tradução, excluindo símbolos duplicados. Freqüentemente, os linkers são tarefas de thread único e podem realmente atrapalhar o tempo de construção.
Um cabeçalho de arquivo único bem construído não usará nenhum modelo e fará uso moderado de inline. Além disso, cabeçalhos de arquivo único bem construídos usam um #define para colocar a implementação (as definições de função e símbolos) em uma única unidade de tradução. Dessa forma, um cabeçalho de arquivo único bem elaborado é praticamente a melhor coisa que um compilador C pode encontrar, no que diz respeito ao tempo de construção. Especialmente quando o cabeçalho pode opcionalmente #define recursos desnecessários.
- Essas bibliotecas apenas de cabeçalho não são apenas uma nova moda?
Pessoalmente, não sei se é uma moda passageira ou não, mas esses arquivos não são apenas cabeçalhos. Eles são cabeçalhos com a parte do arquivo .C (a implementação) anexada ao final. São dois arquivos diferentes unidos ao pré-processador C, mas a parte de implementação nunca aparece a menos que o usuário #define LIB_IMPLEMENTATION. Esta etapa de definição é a única etapa de integração necessária para usar esses cabeçalhos.
Infelizmente, escrever uma boa biblioteca de cabeçalho é muito difícil, então qualquer biblioteca de cabeçalho aleatória que existe provavelmente não é boa. O STB e o RJM são bibliotecas de cabeçalho muito boas e são uma boa referência para se ter uma ideia de como é uma boa biblioteca de cabeçalho. Mattias Gustavsson tem minha coleção favorita de cabeçalhos.
- Qual é a licença?
Cada biblioteca contém informações de licença no final do arquivo. Existe uma escolha entre domínio público e zlib.
- Eu estava procurando um cabeçalho que já vi antes, mas está faltando. Para onde foi?
Alguns dos cabeçalhos impopulares ou não tão úteis tornaram-se obsoletos e estão aqui agora.
- *Você tem alguma biblioteca de nível superior? Estes parecem um nível um pouco baixo demais.
Os cabeçalhos bonitos são de fato de nível bastante baixo. Eles resolvem problemas específicos. Se você está procurando uma estrutura de criação de jogos de nível superior, sugiro experimentar o Cute Framework, uma estrutura de criação de jogos 2D construída em grande parte sobre os vários cabeçalhos fofos de baixo nível vistos aqui.