add stb_image, fix texture asset loading
This commit is contained in:
parent
d01a2e03a8
commit
8a7d4b30bd
7988
external/stb/stb_image.h
vendored
Normal file
7988
external/stb/stb_image.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
28
src/assets.c
28
src/assets.c
@ -14,6 +14,8 @@ static Asset Texture_Asset_Lookup[TEXTURE_ASSET_MAX];
|
|||||||
static AssetFile Shader_Assets[SHADER_ASSET_MAX];
|
static AssetFile Shader_Assets[SHADER_ASSET_MAX];
|
||||||
static Asset Shader_Asset_Lookup[SHADER_ASSET_MAX];
|
static Asset Shader_Asset_Lookup[SHADER_ASSET_MAX];
|
||||||
|
|
||||||
|
static b32 ASSET_HEADER_LOADED = false;
|
||||||
|
|
||||||
|
|
||||||
// ::Assets::Global::End::
|
// ::Assets::Global::End::
|
||||||
|
|
||||||
@ -40,16 +42,31 @@ static void LoadAssetPackHeader()
|
|||||||
|
|
||||||
static Asset LoadTextureAsset(TextureAsset asset_id)
|
static Asset LoadTextureAsset(TextureAsset asset_id)
|
||||||
{
|
{
|
||||||
|
if (!ASSET_HEADER_LOADED)
|
||||||
|
{
|
||||||
|
LoadAssetPackHeader();
|
||||||
|
}
|
||||||
|
|
||||||
Assert(asset_id < i32(TEXTURE_ASSET_MAX), "LoadTextureAsset failure: asset_id is higher than TEXTURE_ASSET_MAX");
|
Assert(asset_id < i32(TEXTURE_ASSET_MAX), "LoadTextureAsset failure: asset_id is higher than TEXTURE_ASSET_MAX");
|
||||||
|
|
||||||
Asset asset = Texture_Asset_Lookup[asset_id];
|
Asset asset = Texture_Asset_Lookup[asset_id];
|
||||||
|
|
||||||
if (asset.bytes == NULL)
|
if (asset.bytes == NULL)
|
||||||
{
|
{
|
||||||
AssetFile *asset_info = Texture_Assets + asset_id;
|
AssetFile *asset_info = Texture_Assets + asset_id;
|
||||||
asset.bytes = FLMemAlloc(asset_info->len);
|
u8 *img = FLMemAlloc(asset_info->len);
|
||||||
MemCpy(asset.bytes, &ASSET_PACK[asset_info->data_offset], asset_info->len);
|
MemCpy(img, &ASSET_PACK[asset_info->data_offset], asset_info->len);
|
||||||
|
|
||||||
|
int x, y, ch;
|
||||||
|
asset.bytes = stbi_load_from_memory(img, asset_info->len, &x, &y, &ch, 4);
|
||||||
|
|
||||||
asset.len = asset_info->len;
|
asset.len = asset_info->len;
|
||||||
|
asset.texture_meta.w = u32(x);
|
||||||
|
asset.texture_meta.h = u32(y);
|
||||||
|
|
||||||
Texture_Asset_Lookup[asset_id] = asset;
|
Texture_Asset_Lookup[asset_id] = asset;
|
||||||
|
|
||||||
|
FLMemFree(img);
|
||||||
}
|
}
|
||||||
|
|
||||||
return asset;
|
return asset;
|
||||||
@ -57,6 +74,11 @@ static Asset LoadTextureAsset(TextureAsset asset_id)
|
|||||||
|
|
||||||
static Asset LoadShaderAsset(ShaderAsset asset_id)
|
static Asset LoadShaderAsset(ShaderAsset asset_id)
|
||||||
{
|
{
|
||||||
|
if (!ASSET_HEADER_LOADED)
|
||||||
|
{
|
||||||
|
LoadAssetPackHeader();
|
||||||
|
}
|
||||||
|
|
||||||
Assert(asset_id < SHADER_ASSET_MAX, "LoadShaderAsset failure: asset_id is higher than SHADER_ASSET_MAX");
|
Assert(asset_id < SHADER_ASSET_MAX, "LoadShaderAsset failure: asset_id is higher than SHADER_ASSET_MAX");
|
||||||
|
|
||||||
Asset asset = Shader_Asset_Lookup[asset_id];
|
Asset asset = Shader_Asset_Lookup[asset_id];
|
||||||
@ -82,7 +104,7 @@ static void UnloadTextureAsset(Asset asset)
|
|||||||
{
|
{
|
||||||
Texture_Asset_Lookup[i].bytes = NULL;
|
Texture_Asset_Lookup[i].bytes = NULL;
|
||||||
Texture_Asset_Lookup[i].len = 0;
|
Texture_Asset_Lookup[i].len = 0;
|
||||||
FLMemFree(asset.bytes);
|
stbi_image_free(asset.bytes);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
src/assets.h
10
src/assets.h
@ -61,10 +61,20 @@ typedef enum ModelAssetTag_e
|
|||||||
MODEL_ASSET_TAG_MAX,
|
MODEL_ASSET_TAG_MAX,
|
||||||
} ModelAssetTag;
|
} ModelAssetTag;
|
||||||
|
|
||||||
|
typedef struct TextureAssetMeta
|
||||||
|
{
|
||||||
|
u32 w;
|
||||||
|
u32 h;
|
||||||
|
} TextureAssetMeta;
|
||||||
|
|
||||||
typedef struct Asset
|
typedef struct Asset
|
||||||
{
|
{
|
||||||
u8 *bytes;
|
u8 *bytes;
|
||||||
u64 len;
|
u64 len;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
TextureAssetMeta texture_meta;
|
||||||
|
};
|
||||||
} Asset;
|
} Asset;
|
||||||
|
|
||||||
typedef struct AssetTag
|
typedef struct AssetTag
|
||||||
|
|||||||
@ -6,10 +6,13 @@
|
|||||||
|
|
||||||
#define STB_SPRINTF_IMPLEMENTATION
|
#define STB_SPRINTF_IMPLEMENTATION
|
||||||
|
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
|
||||||
#define WINDOW_NAME "Video Game"
|
#define WINDOW_NAME "Video Game"
|
||||||
|
|
||||||
// ::ThirdParty::Include::Header::
|
// ::ThirdParty::Include::Header::
|
||||||
#include "stb/stb_sprintf.h"
|
#include "stb/stb_sprintf.h"
|
||||||
|
#include "stb/stb_image.h"
|
||||||
#include "xxhash/xxhash.h"
|
#include "xxhash/xxhash.h"
|
||||||
#include "fastlz/fastlz.h"
|
#include "fastlz/fastlz.h"
|
||||||
|
|
||||||
|
|||||||
@ -4,9 +4,14 @@
|
|||||||
|
|
||||||
#define STB_SPRINTF_IMPLEMENTATION
|
#define STB_SPRINTF_IMPLEMENTATION
|
||||||
|
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
|
||||||
#define WINDOW_NAME "Video Game"
|
#define WINDOW_NAME "Video Game"
|
||||||
|
|
||||||
#include "stb/stb_sprintf.h"
|
#include "stb/stb_sprintf.h"
|
||||||
|
#include "stb/stb_image.h"
|
||||||
|
#include "xxhash/xxhash.h"
|
||||||
|
#include "fastlz/fastlz.h"
|
||||||
|
|
||||||
#include "shared_types.h"
|
#include "shared_types.h"
|
||||||
#include "ds.h"
|
#include "ds.h"
|
||||||
|
|||||||
@ -18,8 +18,6 @@ i16 mouse_pos_y = 0;
|
|||||||
|
|
||||||
static void InitializeGame(Arena *arena, GameContext *ctx, Arena *ctx_arena)
|
static void InitializeGame(Arena *arena, GameContext *ctx, Arena *ctx_arena)
|
||||||
{
|
{
|
||||||
LoadAssetPackHeader();
|
|
||||||
|
|
||||||
Assert(InitRenderer(arena), "Failed to initialize the renderer");
|
Assert(InitRenderer(arena), "Failed to initialize the renderer");
|
||||||
|
|
||||||
ctx->gui.vertices = MakeArray(ctx_arena, GUIVertex, 128);
|
ctx->gui.vertices = MakeArray(ctx_arena, GUIVertex, 128);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user