From 4f0c2c0fb8d8b72a1db86a4f41ff0748499b724b Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 31 Jan 2012 19:16:44 +0000 Subject: [PATCH] More openGL shader fixes. VST fix for Wavelab. --- .../VST/juce_VST_Wrapper.cpp | 10 ++++++++-- .../juce_opengl/native/juce_OpenGLExtensions.h | 3 ++- .../opengl/juce_OpenGLGraphicsContext.cpp | 17 ++++++++++++----- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 5efad9846a..eda2a3ef7d 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -188,6 +188,10 @@ namespace mouseWheelHook = 0; } } + + #if JUCE_WINDOWS + static bool messageThreadIsDefinitelyCorrect = false; + #endif } //============================================================================== @@ -315,6 +319,10 @@ public: SharedMessageThread::deleteInstance(); #endif shutdownJuce_GUI(); + + #if JUCE_WINDOWS + messageThreadIsDefinitelyCorrect = false; + #endif } } @@ -1320,8 +1328,6 @@ private: { if (getHostType().isWavelab() || getHostType().isCubaseBridged()) { - static bool messageThreadIsDefinitelyCorrect = false; - if (! messageThreadIsDefinitelyCorrect) { MessageManager::getInstance()->setCurrentThreadAsMessageThread(); diff --git a/modules/juce_opengl/native/juce_OpenGLExtensions.h b/modules/juce_opengl/native/juce_OpenGLExtensions.h index 89c5931109..f3090134fb 100644 --- a/modules/juce_opengl/native/juce_OpenGLExtensions.h +++ b/modules/juce_opengl/native/juce_OpenGLExtensions.h @@ -69,7 +69,8 @@ USE_FUNCTION (glGetUniformLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\ USE_FUNCTION (glGetAttribLocation, GLint, (GLuint p1, const GLchar* p2), (p1, p2))\ USE_FUNCTION (glVertexAttribPointer, void, (GLuint p1, GLint p2, GLenum p3, GLboolean p4, GLsizei p5, const GLvoid* p6), (p1, p2, p3, p4, p5, p6))\ - USE_FUNCTION (glEnableVertexAttribArray, void, (GLuint p1), (p1))\ + USE_FUNCTION (glEnableVertexAttribArray, void, (GLuint p1), (p1))\ + USE_FUNCTION (glDisableVertexAttribArray, void, (GLuint p1), (p1))\ USE_FUNCTION (glUniform1f, void, (GLint p1, GLfloat p2), (p1, p2))\ USE_FUNCTION (glUniform1i, void, (GLint p1, GLint p2), (p1, p2))\ USE_FUNCTION (glUniform2f, void, (GLint p1, GLfloat p2, GLfloat p3), (p1, p2, p3))\ diff --git a/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp b/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp index 2704cd9b25..82c7d16486 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp @@ -267,6 +267,12 @@ public: context.extensions.glEnableVertexAttribArray (colourAttribute.attributeID); } + void unbindAttributes (OpenGLContext& context) + { + context.extensions.glDisableVertexAttribArray (positionAttribute.attributeID); + context.extensions.glDisableVertexAttribArray (colourAttribute.attributeID); + } + OpenGLShaderProgram::Attribute positionAttribute, colourAttribute; private: @@ -514,8 +520,8 @@ public: "uniform " JUCE_MEDIUMP " vec4 imageLimits;" \ JUCE_DECLARE_MATRIX_UNIFORM JUCE_DECLARE_VARYING_COLOUR JUCE_DECLARE_VARYING_PIXELPOS #define JUCE_GET_IMAGE_PIXEL "texture2D (imageTexture, vec2 (texturePos.x, 1.0 - texturePos.y))" - #define JUCE_CLAMP_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits.xy, imageLimits.zw);" - #define JUCE_MOD_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (mod (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits.zw + imageLimits.xy), imageLimits.xy, imageLimits.zw);" + #define JUCE_CLAMP_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (" JUCE_MATRIX_TIMES_FRAGCOORD ", vec2 (0, 0), imageLimits.zw + imageLimits.xy);" + #define JUCE_MOD_TEXTURE_COORD JUCE_HIGHP " vec2 texturePos = clamp (mod (" JUCE_MATRIX_TIMES_FRAGCOORD ", imageLimits.zw + imageLimits.xy), vec2 (0, 0), imageLimits.zw + imageLimits.xy);" struct ImageProgram : public ShaderBase { @@ -1236,10 +1242,10 @@ struct StateHelpers void setShader (const Rectangle& bounds, ShaderQuadQueue& quadQueue, ShaderPrograms::ShaderBase& shader) { - if (activeShader != &(shader.program)) + if (activeShader != &shader) { quadQueue.flush(); - activeShader = &(shader.program); + activeShader = &shader; shader.program.use(); shader.bindAttributes (context); @@ -1263,6 +1269,7 @@ struct StateHelpers if (activeShader != nullptr) { quadQueue.flush(); + activeShader->unbindAttributes (context); activeShader = nullptr; context.extensions.glUseProgram (0); } @@ -1273,7 +1280,7 @@ struct StateHelpers bool canUseShaders; private: - OpenGLShaderProgram* activeShader; + ShaderPrograms::ShaderBase* activeShader; Rectangle currentBounds; CurrentShader& operator= (const CurrentShader&);