130 lines
2.6 KiB
C
130 lines
2.6 KiB
C
#if !defined(TEST_ASSET_BUILDER_H)
|
|
/* ========================================================================
|
|
$File: $
|
|
$Date: $
|
|
$Revision: $
|
|
$Creator: Casey Muratori $
|
|
$Notice: (C) Copyright 2015 by Molly Rocket, Inc. All Rights Reserved. $
|
|
======================================================================== */
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <memory.h>
|
|
#include "handmade_platform.h"
|
|
#include "handmade_file_formats.h"
|
|
#include "handmade_intrinsics.h"
|
|
#include "handmade_math.h"
|
|
|
|
#define ONE_PAST_MAX_FONT_CODEPOINT (0x10FFFF + 1)
|
|
|
|
#define USE_FONTS_FROM_WINDOWS 1
|
|
|
|
#if USE_FONTS_FROM_WINDOWS
|
|
#include <windows.h>
|
|
|
|
#define MAX_FONT_WIDTH 1024
|
|
#define MAX_FONT_HEIGHT 1024
|
|
|
|
global_variable VOID *GlobalFontBits;
|
|
global_variable HDC GlobalFontDeviceContext;
|
|
|
|
#else
|
|
#define STB_TRUETYPE_IMPLEMENTATION
|
|
#include "stb_truetype.h"
|
|
#endif
|
|
|
|
struct loaded_bitmap
|
|
{
|
|
int32 Width;
|
|
int32 Height;
|
|
int32 Pitch;
|
|
void *Memory;
|
|
|
|
void *Free;
|
|
};
|
|
|
|
struct loaded_font
|
|
{
|
|
HFONT Win32Handle;
|
|
TEXTMETRIC TextMetric;
|
|
r32 LineAdvance;
|
|
|
|
hha_font_glyph *Glyphs;
|
|
r32 *HorizontalAdvance;
|
|
|
|
u32 MinCodePoint;
|
|
u32 MaxCodePoint;
|
|
|
|
u32 MaxGlyphCount;
|
|
u32 GlyphCount;
|
|
|
|
u32 *GlyphIndexFromCodePoint;
|
|
u32 OnePastHighestCodepoint;
|
|
};
|
|
|
|
enum asset_type
|
|
{
|
|
AssetType_Sound,
|
|
AssetType_Bitmap,
|
|
AssetType_Font,
|
|
AssetType_FontGlyph,
|
|
};
|
|
|
|
struct loaded_font;
|
|
struct asset_source_font
|
|
{
|
|
loaded_font *Font;
|
|
};
|
|
|
|
struct asset_source_font_glyph
|
|
{
|
|
loaded_font *Font;
|
|
u32 Codepoint;
|
|
};
|
|
|
|
struct asset_source_bitmap
|
|
{
|
|
char *FileName;
|
|
};
|
|
|
|
struct asset_source_sound
|
|
{
|
|
char *FileName;
|
|
u32 FirstSampleIndex;
|
|
};
|
|
|
|
struct asset_source
|
|
{
|
|
asset_type Type;
|
|
union
|
|
{
|
|
asset_source_bitmap Bitmap;
|
|
asset_source_sound Sound;
|
|
asset_source_font Font;
|
|
asset_source_font_glyph Glyph;
|
|
};
|
|
};
|
|
|
|
// TODO(casey): Are there larger numbers than 4096? Do we have evidence
|
|
// in the natural world of things that can exist in quantities _larger_ than 4096?
|
|
#define VERY_LARGE_NUMBER 4096 // NOTE(casey): 4096 should be enough for anybody
|
|
|
|
struct game_assets
|
|
{
|
|
u32 TagCount;
|
|
hha_tag Tags[VERY_LARGE_NUMBER];
|
|
|
|
u32 AssetTypeCount;
|
|
hha_asset_type AssetTypes[Asset_Count];
|
|
|
|
u32 AssetCount;
|
|
asset_source AssetSources[VERY_LARGE_NUMBER];
|
|
hha_asset Assets[VERY_LARGE_NUMBER];
|
|
|
|
hha_asset_type *DEBUGAssetType;
|
|
u32 AssetIndex;
|
|
};
|
|
|
|
#define TEST_ASSET_BUILDER_H
|
|
#endif
|