Mac OS 10.14 Mojave刚刚发布,自6月以来,我们似乎是任何文档,表明您是否仍然可以使用OpenGL进行编译,或者Apple是否可以阻止或省略正确的开发库 . 我目前正在开发基于OpenGL的图形程序,如果编译将不再起作用,则无法进行更新 . 有没有人测试过这个?
编辑:有没有其他人分享Esenthel的经验?
我在GLFW中的解决方法是在主绘制循环中调用show window .
bool needDraw = true; if (needDraw) { glfwShowWindow(window); glfwHideWindow(window); glfwShowWindow(window); needDraw = false; }
更新后我也遇到了这个问题 . 我正在使用glfw . 实际上,创建的窗口可以在调整大小或移动它之后显示所需的内容 . 我在主循环中添加了 glfwSetWindowPos(window, 100, 100); 来移动它以获得临时解决方案 .
glfwSetWindowPos(window, 100, 100);
我可以编译,但是在更新到最新的Mojave和Xcode之后,我的OpenGL应用程序根本无法工作 .
在一种情况下,我在系统GL呼叫期间挂起,在另一种情况下只是黑屏 . 输出中的一些错误与此处相同:https://stackoverflow.com/questions/52507950/unable-to-load-info-plist-error-xcode-10-under-macos-10-14-mojave#=
我建议你不要更新 .
我认为Xcode 10 OpenGL库中存在一些问题 .
代码在
http://people.bath.ac.uk/abscjkw/ComputerPrograms/C++programs/OpenGL/MojaveOpenGL.cpp
使用Xcode 10.0在Mojave中正常工作 . 窗口会自动调整大小以消除黑色 . OpenGL和GLUT框架从通常的位置/ System / Library / Frameworks添加到项目中
克里斯
我正在使用GLEW,GLUT,OpenGL 2.0和SDL 2.我可以编译和运行我的OpenGL应用程序 . 但是我必须更改我的框架搜索路径以包括:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks
现在放置OpenGL和GLUT框架 Headers ,因为我在旧的搜索路径System / Library / Frameworks中找不到任何OpenGL / GLUT Headers (尽管框架仍然存在,但没有包含 Headers ) . 我还必须确保我的包含是GLUT / glut.h而不仅仅是glut.h.
这给了我以下列形式的新警告信息:
[default]无法加载Info.plist异常(eGPUOverrides)“和”已保存的启用噪声消除设置与默认设置相同(= 1)
我还没有检查它们,它们的含义是什么 .
真正让我烦恼的是Esenthel所说的,编译和运行应用程序后只有一个黑屏 . 我发现如果你拖动应用程序窗口(我没有使用全屏),那么动画就会开始显示 . 显然动画是在后台,所有代码都在评估,但是在我拖动窗口之前只有黑屏 .
编辑:我正在使用Mojave和Xcode 10(不是测试版) .
我正在使用GLUT和OpenGL . 这个问题出现在Xcode 10.0和10.1 beta3上 .
如果调整窗口大小,图形会在大多数时间出现 .
所以我设计了一个使用reshape回调函数的解决方法 . 说我想激活1000x1000窗口 . 我用999x999激活它,然后在重塑时根据需要将其转换为1000x1000:
void reshape (int width, int height){ glutReshapeWindow (1000, 1000); }
主要是:
int main (int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize( 999,999 ); glutInitWindowPosition (0.0f, 0.0f); glutCreateWindow("example"); glutReshapeFunc (reshape); glutDisplayFunc(draw); glutKeyboardFunc(keyboard); glutIdleFunc(idle); glutMainLoop(); return 0; }
由于重塑回调在显示之前被触发,因此它现在正在工作 .
某些OpenGL代码失败的原因是因为在Mojave中,您的视图会自动进行图层备份 . 如果您的代码正在测试此条件:
[NSGraphicsContext currentContextDrawingToScreen]
它将返回NO并且该条件下的代码将不会运行(即:屏幕上没有绘制任何内容) .
不幸的是,你不能在Mojave中将WantsLayer设置为NO,它也行不通 .
通过下载Xcode 9.4.1“修复”了这个问题
编译并使用OpenGL视图使我的应用程序正常工作 .
我认为这与Layer-Backed Views有关 . 因为当我滚动我的OpenGL视图时,它正好在后面绘制了's became visible under some view.. and flickering. And I see it' . 但是当我停止滚动时 - 它会消失 .
截至今天(2018年10月21日),Mojave的OpenGL被窃听 . 您必须移动glfw窗口位置才能真正看到它的渲染内容 .
渲染循环中的这个变通方法代码对我有用: if(!init) { int x,y; glfwGetWindowPos(window,&x, &y); glfwSetWindowPos(window,x+1,y); init = true; }
if(!init) { int x,y; glfwGetWindowPos(window,&x, &y); glfwSetWindowPos(window,x+1,y); init = true; }
9 回答
我在GLFW中的解决方法是在主绘制循环中调用show window .
更新后我也遇到了这个问题 . 我正在使用glfw . 实际上,创建的窗口可以在调整大小或移动它之后显示所需的内容 . 我在主循环中添加了
glfwSetWindowPos(window, 100, 100);
来移动它以获得临时解决方案 .我可以编译,但是在更新到最新的Mojave和Xcode之后,我的OpenGL应用程序根本无法工作 .
在一种情况下,我在系统GL呼叫期间挂起,在另一种情况下只是黑屏 . 输出中的一些错误与此处相同:https://stackoverflow.com/questions/52507950/unable-to-load-info-plist-error-xcode-10-under-macos-10-14-mojave#=
我建议你不要更新 .
我认为Xcode 10 OpenGL库中存在一些问题 .
代码在
http://people.bath.ac.uk/abscjkw/ComputerPrograms/C++programs/OpenGL/MojaveOpenGL.cpp
使用Xcode 10.0在Mojave中正常工作 . 窗口会自动调整大小以消除黑色 . OpenGL和GLUT框架从通常的位置/ System / Library / Frameworks添加到项目中
克里斯
我正在使用GLEW,GLUT,OpenGL 2.0和SDL 2.我可以编译和运行我的OpenGL应用程序 . 但是我必须更改我的框架搜索路径以包括:
现在放置OpenGL和GLUT框架 Headers ,因为我在旧的搜索路径System / Library / Frameworks中找不到任何OpenGL / GLUT Headers (尽管框架仍然存在,但没有包含 Headers ) . 我还必须确保我的包含是GLUT / glut.h而不仅仅是glut.h.
这给了我以下列形式的新警告信息:
我还没有检查它们,它们的含义是什么 .
真正让我烦恼的是Esenthel所说的,编译和运行应用程序后只有一个黑屏 . 我发现如果你拖动应用程序窗口(我没有使用全屏),那么动画就会开始显示 . 显然动画是在后台,所有代码都在评估,但是在我拖动窗口之前只有黑屏 .
编辑:我正在使用Mojave和Xcode 10(不是测试版) .
我正在使用GLUT和OpenGL . 这个问题出现在Xcode 10.0和10.1 beta3上 .
如果调整窗口大小,图形会在大多数时间出现 .
所以我设计了一个使用reshape回调函数的解决方法 . 说我想激活1000x1000窗口 . 我用999x999激活它,然后在重塑时根据需要将其转换为1000x1000:
主要是:
由于重塑回调在显示之前被触发,因此它现在正在工作 .
某些OpenGL代码失败的原因是因为在Mojave中,您的视图会自动进行图层备份 . 如果您的代码正在测试此条件:
它将返回NO并且该条件下的代码将不会运行(即:屏幕上没有绘制任何内容) .
不幸的是,你不能在Mojave中将WantsLayer设置为NO,它也行不通 .
通过下载Xcode 9.4.1“修复”了这个问题
编译并使用OpenGL视图使我的应用程序正常工作 .
我认为这与Layer-Backed Views有关 . 因为当我滚动我的OpenGL视图时,它正好在后面绘制了's became visible under some view.. and flickering. And I see it' . 但是当我停止滚动时 - 它会消失 .
截至今天(2018年10月21日),Mojave的OpenGL被窃听 . 您必须移动glfw窗口位置才能真正看到它的渲染内容 .
渲染循环中的这个变通方法代码对我有用:
if(!init) { int x,y; glfwGetWindowPos(window,&x, &y); glfwSetWindowPos(window,x+1,y); init = true; }