aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets.c
blob: c6efaebc1d2f3448bc668ef529a6b73c8df61ce6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include "assets.h"

const char textureAssetPaths[TEXTURE_ASSET_COUNT][FT_NAMEMAX] = {
  "mint.png",
  "nickel.png",
  "tree.png",
  "bush.png",
  "flower.png"
};

const char imageAssetPaths[IMAGE_ASSET_COUNT][FT_NAMEMAX] = {
  "skybox.png"
};

const char shaderAssetNames[SHADER_ASSET_COUNT][FT_NAMEMAX] = {
  "skybox",
  "instancing"
};

const char modelAssetPaths[MODEL_ASSET_COUNT][FT_NAMEMAX] = {
  "UtilityPole.obj",
  "Samantha.obj"
};

void initShaderAssets(Shader shaders[SHADER_ASSET_COUNT])
{
  // Skybox.
  Shader shader = shaders[SKYBOX_SHADER];
  SetShaderValue(shader, GetShaderLocation(shader, "environmentMap"),
                 (int[1]){ MATERIAL_MAP_CUBEMAP }, SHADER_UNIFORM_INT);

  // Instancing.
  shader = shaders[INSTANCING_SHADER];
  shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp");
}

void initAssets(Assets* assets)
{
  // Textures.
  for (int index = 0; index < TEXTURE_ASSET_COUNT; ++index)
  {
    assets->textures[index] = LoadTexture(
      TextFormat("assets/images/%s", textureAssetPaths[index]));
  }

  // Images;
  for (int index = 0; index < IMAGE_ASSET_COUNT; ++index)
  {
    assets->images[index] = LoadImage(
      TextFormat("assets/images/%s", imageAssetPaths[index]));
  }

  // Shaders.
  for (int index = 0; index < SHADER_ASSET_COUNT; ++index)
  {
    assets->shaders[index] = LoadShader(
      TextFormat("assets/shaders/glsl%i/%s.vs", GLSL_VERSION,
                 shaderAssetNames[index]),
      TextFormat("assets/shaders/glsl%i/%s.fs", GLSL_VERSION,
                 shaderAssetNames[index]));
  }

  initShaderAssets(assets->shaders);

  // Models.
  for (int index = 0; index < MODEL_ASSET_COUNT; ++index)
  {
    assets->models[index] = LoadModel(
      TextFormat("assets/models/%s", modelAssetPaths[index]));
  }
}

void closeAssets(Assets* assets)
{
  for (int index = 0; index < TEXTURE_ASSET_COUNT; ++index)
  {
    UnloadTexture(assets->textures[index]);
  }

  for (int index = 0; index < IMAGE_ASSET_COUNT; ++index)
  {
    UnloadImage(assets->images[index]);
  }

  for (int index = 0; index < SHADER_ASSET_COUNT; ++index)
  {
    UnloadShader(assets->shaders[index]);
  }

  for (int index = 0; index < MODEL_ASSET_COUNT; ++index)
  {
    UnloadModel(assets->models[index]);
  }
}