I have this map std::unordered_map<glm::ivec3, Chunk,IVec3Hasher> loadedChunks;
I added a hasher for ivec3:
struct IVec3Hasher
{
std::size_t operator()(const glm::ivec3& v) const
{
std::hash<int> hasher;
size_t h1 = hasher(v.x);
size_t h2 = hasher(v.y);
size_t h3 = hasher(v.z);
return h1 ^ (h2 << 1) ^ (h3 << 2);
}
};
Then it causes read access violation at loadedChunks.insert({glm::ivec3{ x,y,z }, chunk});
FastNoiseLite noise;
noise.SetNoiseType(FastNoiseLite::NoiseType_OpenSimplex2);
for (int x=0;x<terrainSize;x++)
{
for (int z=0;z<terrainSize;z++)
{
for (int y = 0; y < 3; y++)
{
Chunk chunk{ {x,y,z},true };
for (int bx = 0; bx < 16; bx++)
{
for (int by = 0; by < 16; by++)
{
for (int bz = 0; bz < 16; bz++)
{
glm::ivec3 blockPosition = { x * 16,y * 16,z * 16 };
float noiseValue = noise.GetNoise(static_cast<float>(blockPosition.x), static_cast<float>(blockPosition.y), static_cast<float>(blockPosition.z));
Block block;
if (noiseValue < -0.5f)
{
block = Block{ terrain::soil };
}
else
{
block = Block{ terrain::stone };
}
chunk.setBlock(blockPosition.x, blockPosition.y, blockPosition.z, block);
}
}
}
loadedChunks.insert({glm::ivec3{ x,y,z }, chunk});
}
}
}