Use CVDisplayLinkIsRunning() rather than tracking started state since the OS can apparently shutdown the thread on its own in some scenarios

This commit is contained in:
Kovid Goyal 2019-06-28 17:46:59 +05:30
parent 710e146d22
commit 86305fdeb3
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 2 additions and 7 deletions

View File

@ -245,11 +245,8 @@ bool refreshMonitorScreen(_GLFWmonitor* monitor)
void _glfwClearDisplayLinks() {
[_glfw.ns.displayLinks.lock lock];
for (size_t i = 0; i < _glfw.ns.displayLinks.count; i++) {
if (_glfw.ns.displayLinks.entries[i].displayLinkStarted) {
CVDisplayLinkStop(_glfw.ns.displayLinks.entries[i].displayLink);
_glfw.ns.displayLinks.entries[i].displayLinkStarted = false;
}
if (_glfw.ns.displayLinks.entries[i].displayLink) {
CVDisplayLinkStop(_glfw.ns.displayLinks.entries[i].displayLink);
CVDisplayLinkRelease(_glfw.ns.displayLinks.entries[i].displayLink);
_glfw.ns.displayLinks.entries[i].displayLink = nil;
}

View File

@ -144,7 +144,6 @@ typedef struct _GLFWDisplayLinkNS
{
CVDisplayLinkRef displayLink;
CGDirectDisplayID displayID;
bool displayLinkStarted;
bool renderFrameRequested;
} _GLFWDisplayLinkNS;

View File

@ -78,9 +78,8 @@ requestRenderFrame(_GLFWwindow *w, GLFWcocoarenderframefun callback) {
_GLFWDisplayLinkNS *dl = &_glfw.ns.displayLinks.entries[i];
if (dl->displayID == displayID) {
dl->renderFrameRequested = true;
if (!dl->displayLinkStarted) {
if (!CVDisplayLinkIsRunning(dl->displayLink)) {
CVDisplayLinkStart(dl->displayLink);
dl->displayLinkStarted = true;
}
break;
}