diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp index 06ae540487..6475cc85d4 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExporter.cpp @@ -67,11 +67,11 @@ ProjectExporter* ProjectExporter::createNewExporter (Project& project, const int { case 0: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (false)), false); break; case 1: exp = new XCodeProjectExporter (project, ValueTree (XCodeProjectExporter ::getValueTreeTypeName (true)), true); break; - case 3: exp = new MSVCProjectExporterVC2005 (project, ValueTree (MSVCProjectExporterVC2005::getValueTreeTypeName())); break; - case 4: exp = new MSVCProjectExporterVC2008 (project, ValueTree (MSVCProjectExporterVC2008::getValueTreeTypeName())); break; - case 5: exp = new MSVCProjectExporterVC2010 (project, ValueTree (MSVCProjectExporterVC2010::getValueTreeTypeName())); break; - case 6: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break; - case 7: exp = new AndroidProjectExporter (project, ValueTree (AndroidProjectExporter ::getValueTreeTypeName())); break; + case 2: exp = new MSVCProjectExporterVC2005 (project, ValueTree (MSVCProjectExporterVC2005::getValueTreeTypeName())); break; + case 3: exp = new MSVCProjectExporterVC2008 (project, ValueTree (MSVCProjectExporterVC2008::getValueTreeTypeName())); break; + case 4: exp = new MSVCProjectExporterVC2010 (project, ValueTree (MSVCProjectExporterVC2010::getValueTreeTypeName())); break; + case 5: exp = new MakefileProjectExporter (project, ValueTree (MakefileProjectExporter ::getValueTreeTypeName())); break; + case 6: exp = new AndroidProjectExporter (project, ValueTree (AndroidProjectExporter ::getValueTreeTypeName())); break; default: jassertfalse; return 0; } diff --git a/modules/juce_core/native/juce_linux_Network.cpp b/modules/juce_core/native/juce_linux_Network.cpp index c603b4807c..108b13bcc8 100644 --- a/modules/juce_core/native/juce_linux_Network.cpp +++ b/modules/juce_core/native/juce_linux_Network.cpp @@ -416,7 +416,7 @@ private: } else { - port = 0; // indicates the default port + port = 80; if (nextSlash >= 0) host = url.substring (7, nextSlash); diff --git a/modules/juce_opengl/native/juce_OpenGLExtensions.h b/modules/juce_opengl/native/juce_OpenGLExtensions.h index f3090134fb..181a5baaca 100644 --- a/modules/juce_opengl/native/juce_OpenGLExtensions.h +++ b/modules/juce_opengl/native/juce_OpenGLExtensions.h @@ -65,6 +65,7 @@ USE_FUNCTION (glUseProgram, void, (GLuint p1), (p1))\ USE_FUNCTION (glGetShaderiv, void, (GLuint p1, GLenum p2, GLint* p3), (p1, p2, p3))\ USE_FUNCTION (glGetShaderInfoLog, void, (GLuint p1, GLsizei p2, GLsizei* p3, GLchar* p4), (p1, p2, p3, p4))\ + USE_FUNCTION (glGetProgramInfoLog, void, (GLuint p1, GLsizei p2, GLsizei* p3, GLchar* p4), (p1, p2, p3, p4))\ USE_FUNCTION (glGetProgramiv, void, (GLuint p1, GLenum p2, GLint* p3), (p1, p2, p3))\ USE_FUNCTION (glGetUniformLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\ USE_FUNCTION (glGetAttribLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\ diff --git a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp index 47ca11e899..70697ca8ee 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp @@ -50,14 +50,13 @@ double OpenGLShaderProgram::getLanguageVersion() #endif } -void OpenGLShaderProgram::addShader (const char* const code, GLenum type) +bool OpenGLShaderProgram::addShader (const char* const code, GLenum type) { GLuint shaderID = context.extensions.glCreateShader (type); context.extensions.glShaderSource (shaderID, 1, (const GLchar**) &code, nullptr); context.extensions.glCompileShader (shaderID); - #if JUCE_DEBUG - GLint status = 0; + GLint status = GL_FALSE; context.extensions.glGetShaderiv (shaderID, GL_COMPILE_STATUS, &status); if (status == GL_FALSE) @@ -65,24 +64,42 @@ void OpenGLShaderProgram::addShader (const char* const code, GLenum type) GLchar infoLog [16384]; GLsizei infologLength = 0; context.extensions.glGetShaderInfoLog (shaderID, sizeof (infoLog), &infologLength, infoLog); - DBG (String (infoLog, infologLength)); + errorLog = String (infoLog, infologLength); + + #if JUCE_DEBUG + DBG (errorLog); jassertfalse; + #endif + + return false; } - #endif context.extensions.glAttachShader (programID, shaderID); context.extensions.glDeleteShader (shaderID); + return true; } -void OpenGLShaderProgram::link() noexcept +bool OpenGLShaderProgram::link() noexcept { context.extensions.glLinkProgram (programID); - #if JUCE_DEBUG - GLint status = 0; + GLint status = GL_FALSE; context.extensions.glGetProgramiv (programID, GL_LINK_STATUS, &status); - jassert (status != GL_FALSE); - #endif + + if (status == GL_FALSE) + { + GLchar infoLog [16384]; + GLsizei infologLength = 0; + context.extensions.glGetProgramInfoLog (programID, sizeof (infoLog), &infologLength, infoLog); + errorLog = String (infoLog, infologLength); + + #if JUCE_DEBUG + DBG (errorLog); + jassertfalse; + #endif + } + + return status != GL_FALSE; } void OpenGLShaderProgram::use() const noexcept diff --git a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h index 837739353f..53a96218f6 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h +++ b/modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h @@ -56,14 +56,22 @@ public: fails to compile correctly. The shaderType parameter could be GL_VERTEX_SHADER, GL_FRAGMENT_SHADER, etc. + + @returns true if the shader compiled successfully. If not, you can call + getLastError() to find out what happened. */ - void addShader (const char* const shaderSourceCode, GLenum shaderType); + bool addShader (const char* const shaderSourceCode, GLenum shaderType); /** Links all the compiled shaders into a usable program. If your app is built in debug mode, this method will assert if the program fails to link correctly. + @returns true if the program linked successfully. If not, you can call + getLastError() to find out what happened. */ - void link() noexcept; + bool link() noexcept; + + /** Get the output for the last shader compilation or link that failed. */ + const String& getLastError() const noexcept { return errorLog; } /** Selects this program into the current context. */ void use() const noexcept; @@ -132,6 +140,7 @@ public: private: const OpenGLContext& context; + String errorLog; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OpenGLShaderProgram); };