diff options
Diffstat (limited to 'src/mbgl/renderer/terrain_bucket.cpp')
-rw-r--r-- | src/mbgl/renderer/terrain_bucket.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/mbgl/renderer/terrain_bucket.cpp b/src/mbgl/renderer/terrain_bucket.cpp new file mode 100644 index 000000000..5dc3ddf36 --- /dev/null +++ b/src/mbgl/renderer/terrain_bucket.cpp @@ -0,0 +1,44 @@ +#include <mbgl/renderer/terrain_bucket.hpp> +#include <mbgl/style/layers/terrain_layer.hpp> +#include <mbgl/shader/terrain_shader.hpp> +#include <mbgl/shader/terrain_prepare_shader.hpp> +#include <mbgl/renderer/painter.hpp> +#include <mbgl/gl/gl.hpp> +#include <mbgl/gl/context.hpp> + +namespace mbgl { + +using namespace style; + +TerrainBucket::TerrainBucket(PremultipliedImage&&) { + // TODO +} + +TerrainBucket::TerrainBucket(DEMPyramid&& pyramid_) : pyramid(std::move(pyramid_)) { +} + +void TerrainBucket::upload(gl::Context& context) { + if (!pyramid.levels.empty()) { + dem = context.createTexture(pyramid.levels.front().image); + for (size_t l = 1; l < pyramid.levels.size(); l++) { + auto& image = pyramid.levels[l].image; + MBGL_CHECK_ERROR(glTexImage2D(GL_TEXTURE_2D, l, GL_RGBA, image.size.width, image.size.height, 0, + GL_RGBA, GL_UNSIGNED_BYTE, image.data.get())); + } + } + + uploaded = true; +} + +void TerrainBucket::render(Painter& painter, + PaintParameters& parameters, + const Layer& layer, + const RenderTile& tile) { + painter.renderTerrain(parameters, *this, *layer.as<TerrainLayer>(), tile); +} + +bool TerrainBucket::hasData() const { + return true; +} + +} // namespace mbgl |