rename shader line -> plain

This commit is contained in:
Konstantin Käfer
2014-01-28 17:37:36 +01:00
parent 4c08a9081b
commit 43ab6732d9
11 changed files with 44 additions and 57 deletions

View File

@@ -2,7 +2,7 @@
#define LLMR_RENDERER_PAINTER
#include "shader-fill.hpp"
#include "shader-line.hpp"
#include "shader-plain.hpp"
#include "shader-outline.hpp"
#include "../map/tile.hpp"
@@ -42,7 +42,7 @@ public:
void drawClippingMask();
bool switchShader(Shader *shader);
bool switchShader(std::shared_ptr<Shader> shader);
private:
void setupShaders();
@@ -56,10 +56,10 @@ private:
Style& style;
float matrix[16];
Shader *currentShader;
FillShader *fillShader;
LineShader *lineShader;
OutlineShader *outlineShader;
std::shared_ptr<Shader> currentShader;
std::shared_ptr<FillShader> fillShader;
std::shared_ptr<PlainShader> plainShader;
std::shared_ptr<OutlineShader> outlineShader;
uint32_t tile_stencil_buffer;
uint32_t tile_border_buffer;

View File

@@ -1,13 +1,13 @@
#ifndef LLMR_RENDERER_SHADER_LINE
#define LLMR_RENDERER_SHADER_LINE
#ifndef LLMR_RENDERER_SHADER_PLAIN
#define LLMR_RENDERER_SHADER_PLAIN
#include "shader.hpp"
namespace llmr {
class LineShader : public Shader {
class PlainShader : public Shader {
public:
LineShader();
PlainShader();
int32_t a_pos;
int32_t u_matrix;

View File

@@ -8,7 +8,7 @@ namespace llmr {
class Shader {
public:
Shader(const char *vertex, const char *fragment);
~Shader();
virtual ~Shader();
// Make noncopyable
Shader(const Shader&) = delete;

View File

@@ -12,8 +12,8 @@ struct shader_source {
enum {
FILL_SHADER,
LINE_SHADER,
OUTLINE_SHADER,
PLAIN_SHADER,
SHADER_COUNT
};

View File

@@ -215,7 +215,8 @@ void restart(void *) {
void request(void *, Tile::Ptr tile) {
assert((bool)tile);
NSString *urlTemplate = @"http://api.tiles.mapbox.com/v3/mapbox.mapbox-streets-v4/%d/%d/%d.vector.pbf";
// NSString *urlTemplate = @"http://api.tiles.mapbox.com/v3/mapbox.mapbox-streets-v4/%d/%d/%d.vector.pbf";
NSString *urlTemplate = @"http://localhost:3333/gl/tiles/plain/%d-%d-%d.vector.pbf";
NSString *urlString = [NSString
stringWithFormat:urlTemplate,
tile->id.z,

View File

@@ -8,7 +8,7 @@ SET(llmr_SOURCES
map/vector_tile.cpp
renderer/painter.cpp
renderer/shader-fill.cpp
renderer/shader-line.cpp
renderer/shader-plain.cpp
renderer/shader-outline.cpp
renderer/shader.cpp
renderer/fill_bucket.cpp
@@ -37,7 +37,7 @@ SET(llmr_HEADERS
../include/llmr/platform/platform.hpp
../include/llmr/renderer/painter.hpp
../include/llmr/renderer/shader-fill.hpp
../include/llmr/renderer/shader-line.hpp
../include/llmr/renderer/shader-plain.hpp
../include/llmr/renderer/shader-outline.hpp
../include/llmr/renderer/shader.hpp
../include/llmr/shader/shaders.hpp

View File

@@ -44,10 +44,7 @@ Painter::Painter(Transform& transform, Settings& settings, Style& style)
: transform(transform),
settings(settings),
style(style),
currentShader(NULL),
fillShader(NULL),
lineShader(NULL),
outlineShader(NULL) {
currentShader(NULL) {
}
@@ -55,7 +52,7 @@ void Painter::setup() {
setupShaders();
assert(fillShader);
assert(lineShader);
assert(plainShader);
assert(outlineShader);
// Set up the stencil quad we're using to generate the stencil mask.
@@ -78,24 +75,13 @@ void Painter::setup() {
}
void Painter::setupShaders() {
fillShader = new FillShader();
lineShader = new LineShader();
outlineShader = new OutlineShader();
fillShader = std::make_shared<FillShader>();
plainShader = std::make_shared<PlainShader>();
outlineShader = std::make_shared<OutlineShader>();
}
void Painter::teardown() {
glDeleteBuffers(1, &tile_stencil_buffer);
if (fillShader) {
delete fillShader;
fillShader = NULL;
}
if (lineShader) {
delete lineShader;
lineShader = NULL;
}
}
void Painter::changeMatrix(const Tile::Ptr& tile) {
@@ -110,8 +96,8 @@ void Painter::changeMatrix(const Tile::Ptr& tile) {
}
void Painter::drawClippingMask() {
switchShader(lineShader);
glUniformMatrix4fv(lineShader->u_matrix, 1, GL_FALSE, matrix);
switchShader(plainShader);
glUniformMatrix4fv(plainShader->u_matrix, 1, GL_FALSE, matrix);
glColorMask(false, false, false, false);
@@ -132,8 +118,8 @@ void Painter::drawClippingMask() {
// Draw the clipping mask
glBindBuffer(GL_ARRAY_BUFFER, tile_stencil_buffer);
glVertexAttribPointer(lineShader->a_pos, 2, GL_SHORT, false, 0, BUFFER_OFFSET(0));
glUniform4f(lineShader->u_color, 1.0f, 0.0f, 1.0f, 1.0f);
glVertexAttribPointer(plainShader->a_pos, 2, GL_SHORT, false, 0, BUFFER_OFFSET(0));
glUniform4f(plainShader->u_color, 1.0f, 0.0f, 1.0f, 1.0f);
glDrawArrays(GL_TRIANGLES, 0, sizeof(tile_stencil_vertices));
// glEnable(GL_STENCIL_TEST);
@@ -340,23 +326,23 @@ void Painter::renderDebug(const Tile::Ptr& tile) {
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
// draw tile outline
switchShader(lineShader);
glUniformMatrix4fv(lineShader->u_matrix, 1, GL_FALSE, matrix);
switchShader(plainShader);
glUniformMatrix4fv(plainShader->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);
glVertexAttribPointer(plainShader->a_pos, 2, GL_SHORT, false, 0, BUFFER_OFFSET(0));
glUniform4f(plainShader->u_color, 1.0f, 1.0f, 1.0f, 1.0f);
glLineWidth(4.0f);
glDrawArrays(GL_LINE_STRIP, 0, sizeof(tile_border_vertices));
// draw debug info
switchShader(lineShader);
glUniformMatrix4fv(lineShader->u_matrix, 1, GL_FALSE, matrix);
switchShader(plainShader);
glUniformMatrix4fv(plainShader->u_matrix, 1, GL_FALSE, matrix);
tile->debugFontBuffer->bind();
glVertexAttribPointer(lineShader->a_pos, 2, GL_SHORT, GL_FALSE, 0, BUFFER_OFFSET(0));
glUniform4f(lineShader->u_color, 1.0f, 1.0f, 1.0f, 1.0f);
glVertexAttribPointer(plainShader->a_pos, 2, GL_SHORT, GL_FALSE, 0, BUFFER_OFFSET(0));
glUniform4f(plainShader->u_color, 1.0f, 1.0f, 1.0f, 1.0f);
glLineWidth(4.0f);
glDrawArrays(GL_LINES, 0, tile->debugFontBuffer->length());
glUniform4f(lineShader->u_color, 0.0f, 0.0f, 0.0f, 1.0f);
glUniform4f(plainShader->u_color, 0.0f, 0.0f, 0.0f, 1.0f);
glLineWidth(2.0f);
glDrawArrays(GL_LINES, 0, tile->debugFontBuffer->length());
@@ -382,7 +368,7 @@ void Painter::renderBackground() {
/**
* @return boolean whether the shader was actually switched
*/
bool Painter::switchShader(Shader *shader) {
bool Painter::switchShader(std::shared_ptr<Shader> shader) {
if (currentShader != shader) {
glUseProgram(shader->program);

View File

@@ -1,16 +1,16 @@
#include <llmr/renderer/shader-line.hpp>
#include <llmr/renderer/shader-plain.hpp>
#include <llmr/shader/shaders.hpp>
#include <llmr/platform/gl.hpp>
using namespace llmr;
LineShader::LineShader()
PlainShader::PlainShader()
: Shader(
shaders[LINE_SHADER].vertex,
shaders[LINE_SHADER].fragment
shaders[PLAIN_SHADER].vertex,
shaders[PLAIN_SHADER].fragment
) {
if (!valid) {
fprintf(stderr, "invalid line shader\n");
fprintf(stderr, "invalid plain shader\n");
return;
}

View File

@@ -8,12 +8,12 @@ const shader_source llmr::shaders[SHADER_COUNT] = {
.vertex = "attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n}\n",
.fragment = "uniform vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n",
},
[LINE_SHADER] = {
.vertex = "attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n float z = step(32767.0, a_pos.x) * 2.0;\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n }\n",
.fragment = "uniform vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n",
},
[OUTLINE_SHADER] = {
.vertex = "attribute vec2 a_pos;\nuniform mat4 u_matrix;\nuniform vec2 u_world;\n\nvarying vec2 v_pos;\n\nvoid main() {\n // If the x coordinate is the maximum integer, we move the z coordinates out\n // of the view plane so that the triangle gets clipped. This makes it easier\n // for us to create degenerate triangle strips.\n float z = step(32767.0, a_pos.x) * 2.0;\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n\n v_pos = (gl_Position.xy + 1.0) / 2.0 * u_world;\n}\n",
.fragment = "uniform vec4 u_color;\n\nvarying vec2 v_pos;\n\nvoid main() {\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = smoothstep(1.0, 0.0, dist);\n gl_FragColor = u_color * alpha;\n}\n",
},
[PLAIN_SHADER] = {
.vertex = "attribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n float z = step(32767.0, a_pos.x) * 2.0;\n gl_Position = u_matrix * vec4(a_pos, z, 1);\n }\n",
.fragment = "uniform vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n",
}
};