From 117078270d4f3d4491746e4ac8c054731ddd2a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 11 Mar 2014 15:46:55 +0100 Subject: add text buffer code --- src/geometry/text_buffer.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/geometry/text_buffer.cpp (limited to 'src/geometry/text_buffer.cpp') diff --git a/src/geometry/text_buffer.cpp b/src/geometry/text_buffer.cpp new file mode 100644 index 0000000000..92580cdc32 --- /dev/null +++ b/src/geometry/text_buffer.cpp @@ -0,0 +1,33 @@ +#include +#include +#include + +#include + +using namespace llmr; + +const double TextVertexBuffer::angleFactor = 128 / M_PI; + + +size_t TextVertexBuffer::add(const GlyphPosition& pos) { + size_t idx = index(); + void *data = addElement(); + + int16_t *shorts = static_cast(data); + shorts[0] = pos.x; + shorts[1] = pos.y; + shorts[2] = round(pos.ox * 64); // use 1/64 pixels for placement + shorts[3] = round(pos.oy * 64); + + uint8_t *ubytes = static_cast(data); + ubytes[8] = pos.tx / 4; + ubytes[9] = pos.ty / 4; + ubytes[10] = pos.labelminzoom * 10; + ubytes[11] = pos.minzoom * 10; // 1/10 zoom levels: z16 == 160. + ubytes[12] = fmin(pos.maxzoom, 25) * 10; // 1/10 zoom levels: z16 == 160. + ubytes[13] = (int16_t)round(pos.angle * angleFactor) % 256; + ubytes[14] = util::max((int16_t)round(pos.rangefrom * angleFactor), (int16_t)0) % 256; + ubytes[15] = util::min((int16_t)round(pos.rangeto * angleFactor), (int16_t)255) % 256; + + return idx; +} -- cgit v1.2.1