When a GLKView
is resized, there are some behind-the-scenes operations that take place on the buffers and context of that GLKView
. During the time it takes to perform these behind-the-scenes operations, drawing to the GLKView
does not produce correct results.
In my scenario, I have a GLKView
that has setNeedsDisplay
enabled, so that anytime I need to update it's contents on screen, I just call -setNeedsDisplay
on that
GLKView
. I'm using GLKView
to draw images, so if I need to draw an image with a different size, I need to also change the size of the GLKView
.
The problem: When I change the size of the GLKView
and call setNeedsDisplay
on that view, the result on screen is not correct. This is because the GLKView
is not done finishing the behind-the-scenes operations invoked by the new size change before it tries to draw the new image.
I found a work-around to this by calling: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
instead of just setNeedsDisplay
on the GLKView
. This basically forces the main thread to wait for all the behind-the-scenes openGL operations to be completed before calling setNeedsDisplay
. Although this works ok, I am wondering if there is a better solution. For example, is there an openGL call to make the thread wait for all openGL operations to be completed before continuing?
The solution was to reset the CIContext
object after the GLKView
has been resized.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With