summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/build-shaders.py6
-rw-r--r--src/mbgl/shader/shader.cpp16
-rw-r--r--src/mbgl/shader/shader.hpp11
3 files changed, 18 insertions, 15 deletions
diff --git a/scripts/build-shaders.py b/scripts/build-shaders.py
index c1d7f7f28d..3f3b776710 100755
--- a/scripts/build-shaders.py
+++ b/scripts/build-shaders.py
@@ -34,11 +34,13 @@ def write_header():
#ifndef MBGL_SHADER_SHADERS
#define MBGL_SHADER_SHADERS
+#include <mbgl/platform/gl.hpp>
+
namespace mbgl {
struct shader_source {
- const char *vertex;
- const char *fragment;
+ const GLchar *vertex;
+ const GLchar *fragment;
};
enum {
diff --git a/src/mbgl/shader/shader.cpp b/src/mbgl/shader/shader.cpp
index c69518c8c8..e8deefc8ff 100644
--- a/src/mbgl/shader/shader.cpp
+++ b/src/mbgl/shader/shader.cpp
@@ -14,20 +14,21 @@
using namespace mbgl;
Shader::Shader(const char *name_, const GLchar *vertSource, const GLchar *fragSource)
- : name(name_),
- program(0) {
+ : name(name_)
+ , program(0)
+{
util::stopwatch stopwatch("shader compilation", Event::Shader);
program = MBGL_CHECK_ERROR(glCreateProgram());
- if (!compileShader(&vertShader, GL_VERTEX_SHADER, vertSource)) {
+ if (!compileShader(&vertShader, GL_VERTEX_SHADER, &vertSource)) {
Log::Error(Event::Shader, "Vertex shader %s failed to compile: %s", name, vertSource);
MBGL_CHECK_ERROR(glDeleteProgram(program));
program = 0;
throw util::ShaderException(std::string { "Vertex shader " } + name + " failed to compile");
}
- if (!compileShader(&fragShader, GL_FRAGMENT_SHADER, fragSource)) {
+ if (!compileShader(&fragShader, GL_FRAGMENT_SHADER, &fragSource)) {
Log::Error(Event::Shader, "Fragment shader %s failed to compile: %s", name, fragSource);
MBGL_CHECK_ERROR(glDeleteShader(vertShader));
vertShader = 0;
@@ -69,13 +70,12 @@ Shader::Shader(const char *name_, const GLchar *vertSource, const GLchar *fragSo
}
-bool Shader::compileShader(GLuint *shader, GLenum type, const GLchar *source) {
+bool Shader::compileShader(GLuint *shader, GLenum type, const GLchar *source[]) {
GLint status;
*shader = MBGL_CHECK_ERROR(glCreateShader(type));
- const GLchar *strings[] = { source };
- const GLsizei lengths[] = { static_cast<GLsizei>(std::strlen(source)) };
- MBGL_CHECK_ERROR(glShaderSource(*shader, 1, strings, lengths));
+ const GLsizei lengths = static_cast<GLsizei>(std::strlen(*source));
+ MBGL_CHECK_ERROR(glShaderSource(*shader, 1, source, &lengths));
MBGL_CHECK_ERROR(glCompileShader(*shader));
diff --git a/src/mbgl/shader/shader.hpp b/src/mbgl/shader/shader.hpp
index 3290224796..dab7cd8522 100644
--- a/src/mbgl/shader/shader.hpp
+++ b/src/mbgl/shader/shader.hpp
@@ -12,9 +12,10 @@ namespace mbgl {
class Shader : private util::noncopyable {
public:
- Shader(const char *name, const char *vertex, const char *fragment);
+ Shader(const GLchar *name, const GLchar *vertex, const GLchar *fragment);
+
~Shader();
- const char *name;
+ const GLchar *name;
uint32_t program;
inline uint32_t getID() const {
@@ -27,10 +28,10 @@ protected:
GLint a_pos = -1;
private:
- bool compileShader(uint32_t *shader, uint32_t type, const char *source);
+ bool compileShader(GLuint *shader, GLenum type, const GLchar *source[]);
- uint32_t vertShader = 0;
- uint32_t fragShader = 0;
+ GLuint vertShader = 0;
+ GLuint fragShader = 0;
};
}