summaryrefslogtreecommitdiff
path: root/include/llmr/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'include/llmr/renderer')
-rw-r--r--include/llmr/renderer/painter.hpp55
-rw-r--r--include/llmr/renderer/shader-fill.hpp19
-rw-r--r--include/llmr/renderer/shader-line.hpp19
-rw-r--r--include/llmr/renderer/shader.hpp23
4 files changed, 116 insertions, 0 deletions
diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp
new file mode 100644
index 0000000000..ac6012b0d0
--- /dev/null
+++ b/include/llmr/renderer/painter.hpp
@@ -0,0 +1,55 @@
+#ifndef LLMR_RENDERER_PAINTER
+#define LLMR_RENDERER_PAINTER
+
+#include "../platform/gl.hpp"
+
+#include "shader-fill.hpp"
+#include "shader-line.hpp"
+
+namespace llmr {
+
+class platform;
+class transform;
+class tile;
+
+class painter {
+public:
+ painter(class platform *platform);
+
+ void setup();
+ void teardown();
+
+ void resize(GLuint new_width, GLuint new_height);
+ void viewport();
+
+
+ void clear();
+ void render(tile *tile);
+
+ void switchShader(Shader *shader, float matrix[16]);
+ void setTransform(transform *transform);
+
+private:
+ void setupShaders();
+ void changeMatrix();
+
+public:
+
+private:
+ platform *platform;
+ transform *transform;
+ GLuint width, height;
+ GLfloat matrix[16];
+
+ Shader *currentShader;
+ FillShader *fillShader;
+ LineShader *lineShader;
+
+ GLuint vertexArray;
+ GLuint triangleVertexBuffer;
+ GLuint fillVertexBuffer;
+};
+
+}
+
+#endif
diff --git a/include/llmr/renderer/shader-fill.hpp b/include/llmr/renderer/shader-fill.hpp
new file mode 100644
index 0000000000..165266e4b5
--- /dev/null
+++ b/include/llmr/renderer/shader-fill.hpp
@@ -0,0 +1,19 @@
+#ifndef LLMR_RENDERER_SHADER_FILL
+#define LLMR_RENDERER_SHADER_FILL
+
+#include "shader.hpp"
+
+namespace llmr {
+
+class FillShader : public Shader {
+public:
+ FillShader(const GLchar *vertex, const GLchar *fragment);
+
+ GLint a_pos;
+ GLint u_matrix;
+ GLint u_color;
+};
+
+}
+
+#endif
diff --git a/include/llmr/renderer/shader-line.hpp b/include/llmr/renderer/shader-line.hpp
new file mode 100644
index 0000000000..60e27146f9
--- /dev/null
+++ b/include/llmr/renderer/shader-line.hpp
@@ -0,0 +1,19 @@
+#ifndef LLMR_RENDERER_SHADER_LINE
+#define LLMR_RENDERER_SHADER_LINE
+
+#include "shader.hpp"
+
+namespace llmr {
+
+class LineShader : public Shader {
+public:
+ LineShader(const GLchar *vertex, const GLchar *fragment);
+
+ GLint a_pos;
+ GLint u_matrix;
+ GLint u_color;
+};
+
+}
+
+#endif
diff --git a/include/llmr/renderer/shader.hpp b/include/llmr/renderer/shader.hpp
new file mode 100644
index 0000000000..d178a1d9c8
--- /dev/null
+++ b/include/llmr/renderer/shader.hpp
@@ -0,0 +1,23 @@
+#ifndef LLMR_RENDERER_SHADER
+#define LLMR_RENDERER_SHADER
+
+#include "../platform/gl.hpp"
+#include <vector>
+
+namespace llmr {
+
+class Shader {
+public:
+ Shader(const GLchar *vertex, const GLchar *fragment);
+ ~Shader();
+ bool valid;
+ GLuint program;
+ std::vector<GLuint> attributes;
+
+private:
+ bool compileShader(GLuint *shader, GLenum type, const GLchar *source);
+};
+
+}
+
+#endif