macOS 10.14 Mojave、iOS 12和tvOS 12中开始抛弃OpenGL,鼓励转到Matel。这是好事,毕竟后者的效率确实更高。但转换的代价是很高的,是需要时间的,也伴随着磨人的过程。
工作的iMac更新到Mojave后,编译项目时发现画面渲染不正常,一想就是踩了坑。搜索了好一会儿,尝试了各种办法终于能用了,在这记录一下。
OpenGL.framework没有变,变的是NSOpenGLContext,它的某些改变导致GL的渲染时机发生了变化,简单说就是该画的时候不画了。NSOpenGLContext中有个update方法,要想正常渲染画面就得在开始渲染前调用一次,特别是采取“非事件驱动”方式的OpenGL程序。对于Cocos2d-x来说就是在CCDirector的mainLoop之前;原生的可以覆写setLayer,在[super setLayer]之后调用。
使用GLUT的项目也有解决方法,只需要在glutInitWindowSize(size, size)之后调用glutReshapeWindow(size*2, size*2),再在display最后调用glutPostRedisplay就好了。
以上