From e5acfb329827802fe2259f91701dc8762c2573b6 Mon Sep 17 00:00:00 2001 From: nathan Date: Fri, 8 Aug 2025 12:48:10 -0600 Subject: Mesh instancing test working --- src/world.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'src/world.c') 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); } -- cgit v1.2.3