Ok, it seems to take more conditions than what I described before to happen. I now tried doing that in the juce demo as well and it works fine there. (OS X btw, 10.8 & 10.6)
But it does reproduce when doing this:
In the juce demo plugin, add:
class AnOpenGLThingy : public Component, public OpenGLRenderer {
public:
AnOpenGLThingy();
void paint (Graphics&) {}
void newOpenGLContextCreated() {}
void openGLContextClosing() {}
void renderOpenGL();
OpenGLContext openGLContext;
};
...
Slider delaySlider;
+ AnOpenGLThingy thing;
ScopedPointer<ResizableCornerComponent> resizer;
...
AnOpenGLThingy::AnOpenGLThingy() {
openGLContext.setRenderer (this);
openGLContext.setComponentPaintingEnabled (true);
openGLContext.attachTo(*this);
}
void AnOpenGLThingy::renderOpenGL() {
glBegin(GL_TRIANGLES);
glColor3ub(255, 0, 0);
glVertex2d(-1, -1);
glVertex2d(1, -1);
glVertex2d(-1, 1);
glColor3ub(0, 255, 0);
glVertex2d(1, -1);
glVertex2d(-1, 1);
glVertex2d(1, 1);
glEnd();
}
...
resizeLimits.setSizeLimits (150, 150, 800, 300);
+ addAndMakeVisible(&thing);
+
// set our component's initial size to be the last one that was stored in the filter's settings
...
delaySlider.setBounds (200, 60, 150, 40);
+ thing.setBounds(50, 50, 50, 50);
When changing AnOpenGLThingy to use
openGLContext.setComponentPaintingEnabled (false);
It does not paint properly anymore.
Reproduced when running in JUCE’s demo host, AU Lab & Logic.
It seems that it doesn’t happen in JuceDemo because updateViewportSize is also called by when the component is being resized and it seems that this always happen when it’s inside a DocumentWindow, while it doesn’t necessarily happen inside a plugin window.