#pragma once #include "chronology.h" #include "config/types.h" #include "game/worldobject.h" #include "geoData.h" #include "gfx/models/texture.h" #include "gfx/renderable.h" class SceneShader; class Terrain : public GeoData, public WorldObject, public Renderable { public: template explicit Terrain(P &&... params) : GeoData {std::forward

(params)...} { generateMeshes(); } void render(const SceneShader & shader) const override; void shadows(const ShadowMapper &) const override; void tick(TickDuration) override; struct Vertex { GlobalPosition3D pos; Normal3D normal; }; void generateMeshes(); private: void afterChange() override; struct SurfaceArrayBuffer { glVertexArray vertexArray; glBuffer indicesBuffer; GLsizei count; }; glBuffer verticesBuffer; std::multimap meshes; Texture::Ptr grass = std::make_shared("grass.png"); };