#pragma once
#include <whiteout/common_types.h>
#include <cstdint>
namespace whiteout::textures::gif {
static constexpr u8 GIF_TRAILER = 0x3B;
static constexpr u8 GIF_EXTENSION_INTRODUCER = 0x21;
static constexpr u8 GIF_IMAGE_SEPARATOR = 0x2C;
static constexpr u8 GIF_GRAPHIC_CONTROL_LABEL = 0xF9;
static constexpr u8 GIF_APPLICATION_EXTENSION_LABEL = 0xFF;
static constexpr u8 GIF_BLOCK_TERMINATOR = 0x00;
#pragma pack(push, 1)
struct GifHeader {
u8 signature[3]; u8 version[3]; };
static_assert(sizeof(GifHeader) == 6, "GifHeader must be 6 bytes");
struct LogicalScreenDescriptor {
u16 width;
u16 height;
u8 packed; u8 bgColorIndex;
u8 pixelAspectRatio;
};
static_assert(sizeof(LogicalScreenDescriptor) == 7, "LogicalScreenDescriptor must be 7 bytes");
struct GraphicControlExtension {
u8 introducer; u8 label; u8 blockSize; u8 packed; u16 delayTime; u8 transparentIdx;
u8 terminator; };
static_assert(sizeof(GraphicControlExtension) == 8, "GraphicControlExtension must be 8 bytes");
struct ImageDescriptor {
u8 separator; u16 left;
u16 top;
u16 width;
u16 height;
u8 packed; };
static_assert(sizeof(ImageDescriptor) == 10, "ImageDescriptor must be 10 bytes");
#pragma pack(pop)
}