From 751ad2ed6e147d2648a14884660bc8ed1834bcc9 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 1 Nov 2013 10:44:32 +0000 Subject: [PATCH] Added some GL shader helper functions. --- .../opengl/juce_OpenGLShaderProgram.cpp | 15 +++++++++++++-- .../juce_opengl/opengl/juce_OpenGLShaderProgram.h | 12 +++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp index b98b4cefb0..ff5eea52f7 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp @@ -51,10 +51,18 @@ double OpenGLShaderProgram::getLanguageVersion() #endif } -bool OpenGLShaderProgram::addShader (const char* const code, GLenum type) +bool OpenGLShaderProgram::addShader (StringRef code, GLenum type) { GLuint shaderID = context.extensions.glCreateShader (type); - context.extensions.glShaderSource (shaderID, 1, (const GLchar**) &code, nullptr); + + #if JUCE_STRING_UTF_TYPE == 8 + const GLchar* c = code.text; + #else + String codeString (code.text); + const GLchar* c = codeString.toRawUTF8(); + #endif + + context.extensions.glShaderSource (shaderID, 1, &c, nullptr); context.extensions.glCompileShader (shaderID); GLint status = GL_FALSE; @@ -83,6 +91,9 @@ bool OpenGLShaderProgram::addShader (const char* const code, GLenum type) return true; } +bool OpenGLShaderProgram::addVertexShader (StringRef code) { return addShader (code, GL_VERTEX_SHADER); } +bool OpenGLShaderProgram::addFragmentShader (StringRef code) { return addShader (code, GL_FRAGMENT_SHADER); } + bool OpenGLShaderProgram::link() noexcept { context.extensions.glLinkProgram (programID); diff --git a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h index 4e83532c2c..afacc57db7 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h +++ b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h @@ -59,7 +59,17 @@ public: @returns true if the shader compiled successfully. If not, you can call getLastError() to find out what happened. */ - bool addShader (const char* const shaderSourceCode, GLenum shaderType); + bool addShader (StringRef shaderSourceCode, GLenum shaderType); + + /** Compiles and adds a fragment shader to this program. + This is equivalent to calling addShader() with a type of GL_VERTEX_SHADER. + */ + bool addVertexShader (StringRef shaderSourceCode); + + /** Compiles and adds a fragment shader to this program. + This is equivalent to calling addShader() with a type of GL_FRAGMENT_SHADER. + */ + bool addFragmentShader (StringRef shaderSourceCode); /** Links all the compiled shaders into a usable program. If your app is built in debug mode, this method will assert if the program