Varios encabezados C/C++ multiplataforma de un solo archivo que implementan bibliotecas independientes.
biblioteca | descripción | última versión | idioma(s) |
---|---|---|---|
lindo_c2 | Rutinas de detección de colisiones 2D en primitivas, resultados booleanos y/o generación de colectores, prueba de barrido/formato, raycasts | 1.10 | C/C++ |
lindo_net | Biblioteca de redes para juegos que requieren una capa de confiabilidad opcional sobre UDP con un esquema de seguridad integrado | 1.03 | C/C++ |
lindo_azulejos | Cargador muy eficiente para mapas Tiled exportados a formato JSON | 1.07 | C/C++ |
lindo_aseprite | Analiza archivos .ase/.aseprite en una colección de estructuras compacta y conveniente | 1.04 | C/C++ |
lindo_sonido | Cargar/reproducir/bucle (con complemento)/pan WAV + OGG (contenedor stb_vorbis para OGG) en mono/estéreo, mezclador personalizado de alto rendimiento, soporte para música + fundido cruzado | 2.08 | C/C++ |
lindo_matemáticas | Matemáticas vectoriales 3D de nivel profesional a través de intrínsecos SSE | 1.02 | C++ |
lindo_png | cargar/guardar PNG, compilador de atlas de texturas, descompresor compatible con DEFLATE | 1.05 | C/C++ |
lindo_spritebatch | Dosificador de sprites 2D en tiempo de ejecución. Crea atlas sobre la marcha en memoria. Útil para implementar un mezclador de sprites para cualquier propósito (como juegos 2D) para renderizado de alto rendimiento, sin la necesidad de precompilar atlas de texturas en el disco. | 1.06 | C/C++ |
linda_sincronización | Colección de primitivas de sincronización prácticas, incluido el bloqueo de lectura/escritura y el sistema de tareas/grupo de subprocesos. | 1.01 | C/C++ |
lindo_tls | Cree una conexión TLS a un sitio web a través de TCP, útil para solicitudes HTTPS. | 1.01 | C/C++/Obj-C |
Generalmente, estos encabezados no tienen dependencias y están destinados a incluirse directamente en su fuente (consulte cada encabezado para obtener documentación específica en la parte superior del archivo). Cada encabezado tiene un símbolo LIBNAME_IMPLEMENTATION; agregue esto a una única unidad de traducción en su código e incluya el encabezado justo después para definir los símbolos de la biblioteca. De lo contrario, simplemente incluya el encabezado como de costumbre.
Algunos encabezados también tienen código de ejemplo o demostraciones. En este repositorio simplemente busque las carpetas de ejemplos o pruebas correspondientes. Las carpetas de ejemplo son particularmente útiles para descubrir cómo utilizar un encabezado en particular.
Aquí hay un enlace al chat de discordia de cute_headers. No dude en visitarnos y hacer preguntas, sugerencias o tener una discusión. Si alguien ha usado cute_headers, ¡sería fantástico conocer su experiencia! https://discord.gg/2DFHRmX
Otra manera fácil de contactarme es en Twitter @randypgaul.
- ¿Cuál es el punto de hacer un solo archivo? ¿Por qué hay funciones estáticas y de implementación en los encabezados?
Incluir estos encabezados es como incluir un encabezado normal. Sin embargo, para definir la implementación, cada encabezado se parece a esto:
// 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"
Esto convertirá el archivo en una combinación de encabezado + archivo c, una vez. El punto de esto es: A) manejar el encabezado o enviarlo a las personas es fácil, no hay archivos zip ni nada, simplemente copie y pegue un solo archivo; B) los scripts de compilación son una molestia, y estas bibliotecas de un solo archivo se pueden integrar en cualquier proyecto sin modificar un solo script de compilación.
- ¿Escribir todo el código en un encabezado no arruina los tiempos de compilación?
El estigma de que las implementaciones de encabezados ralentizan el tiempo de compilación proviene del código en línea y del spam de plantillas. En cualquier caso, cada unidad de traducción debe revisar el encabezado y colocar versiones en línea de funciones, o las plantillas generan varias funciones específicas de tipo. La situación empeora una vez que el enlazador se activa y necesita fusionar unidades de traducción, eliminando símbolos duplicados. A menudo, los enlazadores son tareas de un solo subproceso y realmente pueden obstaculizar los tiempos de construcción.
Un encabezado de archivo único bien construido no utilizará ninguna plantilla y hará uso de las en línea con moderación. Además, los encabezados de un solo archivo bien construidos utilizan #define para colocar la implementación (las definiciones de funciones y los símbolos) en una única unidad de traducción. De esta manera, un encabezado de archivo único bien diseñado es prácticamente lo mejor que puede encontrar un compilador de C, en lo que respecta a los tiempos de compilación. Especialmente cuando el encabezado puede #definir opcionalmente características innecesarias.
- ¿No son estas bibliotecas de encabezado sólo una nueva moda pasajera?
Personalmente, no sé si es una moda pasajera o no, pero estos archivos no son solo encabezados. Son encabezados con la parte del archivo .C (la implementación) adjunta al final. Son dos archivos diferentes pegados con el preprocesador de C, pero la parte de implementación nunca aparece a menos que el usuario #defina LIB_IMPLEMENTATION. Este paso de definición es el único paso de integración necesario para utilizar estos encabezados.
Desafortunadamente, escribir una buena biblioteca de encabezados es bastante difícil, por lo que cualquier biblioteca de encabezados aleatoria que exista probablemente no sea buena. STB y RJM son bibliotecas de encabezados bastante buenas y son una buena referencia para tener una idea de cómo es una buena biblioteca de encabezados. Mattias Gustavsson tiene mi colección favorita de encabezados.
- ¿Qué es la licencia?
Cada biblioteca contiene información de licencia al final del archivo. Se puede elegir entre dominio público y zlib.
- Estaba buscando un encabezado que había visto antes, pero falta. ¿A dónde fue?
Algunos de los encabezados impopulares o no tan útiles quedaron obsoletos y ahora están aquí.
- *¿Tiene alguna biblioteca de nivel superior? Estos parecen un nivel demasiado bajo.
Los lindos encabezados son de hecho de un nivel bastante bajo. Resuelven problemas específicos. Si estás buscando un marco de creación de juegos de nivel superior, te sugiero que pruebes Cute Framework, un marco de creación de juegos 2D construido en gran medida sobre los diversos encabezados lindos de bajo nivel que se ven aquí.