diff options
Diffstat (limited to 'src/world.c')
-rw-r--r-- | src/world.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/world.c b/src/world.c index 828aaa3..a5af6e7 100644 --- a/src/world.c +++ b/src/world.c @@ -473,8 +473,28 @@ Seed generateWorldPlants(World* world, Seed seed, int start, int end) return seed; } -Seed generateWorldUtilityPoles(World* world, Seed seed, int start, int end) +Seed generateWorldUtilityPoles(World* world, const Assets* assets, Seed seed, + int start, int end) { + world->utilityPoleTransforms = (Matrix*)FT_CALLOC(WORLD_UTILITY_POLE_COUNT, + sizeof(Matrix)); + + if (world->utilityPoleTransforms == NULL) + { + ALLOCATION_ERROR; + return seed; + } + + // Instancing shader. + Shader shader = assets->shaders[INSTANCING_SHADER]; + shader.locs[SHADER_LOC_MATRIX_MVP] = GetShaderLocation(shader, "mvp"); + shader.locs[SHADER_LOC_MATRIX_MODEL] = GetShaderLocationAttrib(shader, + "instance"); + shader.locs[SHADER_LOC_MATRIX_VIEW] = GetShaderLocation(shader, "view"); + shader.locs[SHADER_LOC_MATRIX_PROJECTION] = GetShaderLocation(shader, + "projection"); + assets->models[UTILITY_POLE_MODEL].materials[0].shader = shader; + for (int index = start; index < end; ++index) { FT_RANDOM16(seed); @@ -523,7 +543,7 @@ Texture generateGroundTexture() return texture; } -World createWorld(Seed seed) +World createWorld(Seed seed, const Assets* assets) { World world; world.size = WORLD_SIZE; @@ -573,7 +593,7 @@ World createWorld(Seed seed) // Utility poles. start = end; end = WORLD_UTILITY_POLE_COUNT + start; - seed = generateWorldUtilityPoles(&world, seed, start, end); + seed = generateWorldUtilityPoles(&world, assets, seed, start, end); // Items. start = end; @@ -655,6 +675,7 @@ void freeWorld(World world) UnloadTexture( world.heightmap.materials[0].maps[MATERIAL_MAP_DIFFUSE].texture); UnloadModel(world.heightmap); + FT_FREE(world.utilityPoleTransforms); freeWorldBVH(world.bvh); } |