aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets.c
blob: 3eb0a8aeec5b24093c8743d8b463e3c7135d3111 (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
95
96
97
98
99
100
101
102
103
#include "assets.h"

const char textureAssetPaths[TEXTURE_ASSET_COUNT][FT_NAMEMAX] = {
  "mint.png",
  "nickel.png",
  "tree.png",
  "bush.png",
  "flower.png",
  "Samantha.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 initModelAssets(Assets* assets)
{
  assets->models[SAMANTHA_MODEL].materials[0]
    .maps[MATERIAL_MAP_DIFFUSE].texture = assets->textures[SAMANTHA_TEXTURE];
}  

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]));
  }

  initModelAssets(assets);
}

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]);
  }
}