From 2d008787fc113bf352674b7a1c7e57f47f8a635f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Thu, 16 Jan 2014 10:54:16 +0100 Subject: [PATCH] add tile border (debug) --- include/llmr/renderer/painter.hpp | 1 + src/renderer/painter.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index 3f6235d8f..0ae70eebd 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -39,6 +39,7 @@ private: LineShader *lineShader; uint32_t tile_stencil_buffer; + uint32_t tile_border_buffer; }; } diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 00acb1fb4..8c677e1cf 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -18,6 +18,14 @@ GLshort tile_stencil_vertices[] = { 4096, 4096 }; +GLshort tile_border_vertices[] = { + 0, 0, + 4095, 0, + 4095, 4095, + 0, 4095, + 0, 0 +}; + painter::painter(class transform *transform) : transform(transform), currentShader(NULL), @@ -37,6 +45,12 @@ void painter::setup() { glBindBuffer(GL_ARRAY_BUFFER, tile_stencil_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(tile_stencil_vertices), tile_stencil_vertices, GL_STATIC_DRAW); + // Set up the tile boundary lines we're using to draw the tile outlines. + glGenBuffers(1, &tile_border_buffer); + glBindBuffer(GL_ARRAY_BUFFER, tile_border_buffer); + glBufferData(GL_ARRAY_BUFFER, sizeof(tile_border_vertices), tile_border_vertices, GL_STATIC_DRAW); + + glEnable(GL_STENCIL_TEST); @@ -140,6 +154,19 @@ void painter::render(tile::ptr tile) { glUniform4f(lineShader->u_color, 0.0f, 0.0f, 0.0f, 1.0f); glLineWidth(1.0f); glDrawArrays(GL_LINE_STRIP, 0, tile->lineVertex.length()); + + + + + + // draw tile outline + switchShader(lineShader); + glUniformMatrix4fv(lineShader->u_matrix, 1, GL_FALSE, matrix); + glBindBuffer(GL_ARRAY_BUFFER, tile_border_buffer); + glVertexAttribPointer(lineShader->a_pos, 2, GL_SHORT, false, 0, BUFFER_OFFSET(0)); + glUniform4f(lineShader->u_color, 1.0f, 1.0f, 1.0f, 1.0f); + glLineWidth(4.0f); + glDrawArrays(GL_LINE_STRIP, 0, sizeof(tile_border_vertices)); } void painter::viewport() {