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
3 changed files with 2 additions and 7 deletions

View File

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

View File

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

View File

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