diff options
-rwxr-xr-x | scripts/build-shaders.py | 6 | ||||
-rw-r--r-- | src/mbgl/shader/shader.cpp | 16 | ||||
-rw-r--r-- | src/mbgl/shader/shader.hpp | 11 |
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; }; } |