mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-03 08:05:40 +00:00
Merge pull request #600 from TomHarte/MacCrash
Reintroduces proper locking of the Mac OpenGL context.
This commit is contained in:
commit
72b4bf9c98
@ -52,16 +52,20 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt
|
|||||||
|
|
||||||
- (void)drawAtTime:(const CVTimeStamp *)now frequency:(double)frequency
|
- (void)drawAtTime:(const CVTimeStamp *)now frequency:(double)frequency
|
||||||
{
|
{
|
||||||
// Draw the display now regardless of other activity.
|
[self redrawWithEvent:CSOpenGLViewRedrawEventTimer];
|
||||||
[self performWithGLContext:^{
|
|
||||||
[self.delegate openGLViewRedraw:self event:CSOpenGLViewRedrawEventTimer];
|
|
||||||
CGLFlushDrawable([[self openGLContext] CGLContextObj]);
|
|
||||||
}];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect
|
- (void)drawRect:(NSRect)dirtyRect
|
||||||
{
|
{
|
||||||
[self.delegate openGLViewRedraw:self event:CSOpenGLViewRedrawEventAppKit];
|
[self redrawWithEvent:CSOpenGLViewRedrawEventAppKit];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)redrawWithEvent:(CSOpenGLViewRedrawEvent)event
|
||||||
|
{
|
||||||
|
[self performWithGLContext:^{
|
||||||
|
[self.delegate openGLViewRedraw:self event:event];
|
||||||
|
CGLFlushDrawable([[self openGLContext] CGLContextObj]);
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)invalidate
|
- (void)invalidate
|
||||||
|
@ -679,14 +679,16 @@ void ScanTarget::update(int output_width, int output_height) {
|
|||||||
void ScanTarget::draw(int output_width, int output_height) {
|
void ScanTarget::draw(int output_width, int output_height) {
|
||||||
while(is_drawing_.test_and_set());
|
while(is_drawing_.test_and_set());
|
||||||
|
|
||||||
// Copy the accumulation texture to the target.
|
if(accumulation_texture_) {
|
||||||
test_gl(glBindFramebuffer, GL_FRAMEBUFFER, target_framebuffer_);
|
// Copy the accumulation texture to the target.
|
||||||
test_gl(glViewport, 0, 0, (GLsizei)output_width, (GLsizei)output_height);
|
test_gl(glBindFramebuffer, GL_FRAMEBUFFER, target_framebuffer_);
|
||||||
|
test_gl(glViewport, 0, 0, (GLsizei)output_width, (GLsizei)output_height);
|
||||||
|
|
||||||
test_gl(glClearColor, 0.0f, 0.0f, 0.0f, 0.0f);
|
test_gl(glClearColor, 0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
test_gl(glClear, GL_COLOR_BUFFER_BIT);
|
test_gl(glClear, GL_COLOR_BUFFER_BIT);
|
||||||
accumulation_texture_->bind_texture();
|
accumulation_texture_->bind_texture();
|
||||||
accumulation_texture_->draw(float(output_width) / float(output_height), 4.0f / 255.0f);
|
accumulation_texture_->draw(float(output_width) / float(output_height), 4.0f / 255.0f);
|
||||||
|
}
|
||||||
|
|
||||||
is_drawing_.clear();
|
is_drawing_.clear();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user