rename shader line -> plain
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
|
||||
@@ -12,8 +12,8 @@ struct shader_source {
|
||||
|
||||
enum {
|
||||
FILL_SHADER,
|
||||
LINE_SHADER,
|
||||
OUTLINE_SHADER,
|
||||
PLAIN_SHADER,
|
||||
SHADER_COUNT
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user