Я внедряю функцию записи геймплея в кроссплатформенную игру Cocos2d-x. Мне удалось реализовать эти функции для iOS и Android, но я изо всех сил пытаюсь добиться хорошей производительности на macOS. Я успешно реализовал запись геймплея с помощью функции glReadPixels, но производительность очень низкая. Я получаю около 10-15 кадров в секунду на моем Macbook Pro. Я пытался реализовать AVCaptureSession для записи всего экрана, а затем обрезать необходимую область, как в образце AVScreenShack от Apple, но я получаю ошибки Cocos2d-x Renderer.
Журнал ошибок выглядит так:
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/2d/CCParticleSystemQuad.cpp postStep 458
OpenGL error 0x0506 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCFrameBuffer.cpp applyFBO 445
FrameBuffer Status Error 33305
OpenGL error 0x0506 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCFrameBuffer.cpp applyFBO 445
FrameBuffer Status Error 33305
FrameBuffer Status Error 33305
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCRenderer.cpp saveRenderState 161
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCTextureAtlas.cpp drawNumberOfQuads 691
FrameBuffer Status Error 33305
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCRenderer.cpp restoreRenderState 192
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/2d/CCParticleSystemQuad.cpp postStep 458
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/2d/CCParticleSystemQuad.cpp postStep 458
OpenGL error 0x0506 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCFrameBuffer.cpp applyFBO 445
FrameBuffer Status Error 33305
OpenGL error 0x0506 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCFrameBuffer.cpp applyFBO 445
FrameBuffer Status Error 33305
FrameBuffer Status Error 33305
OpenGL error 0x0501 in /Users/milosz/Documents/job/butterflix/blix/cocos2d/cocos/renderer/CCRenderer.cpp saveRenderState 161
Моя первая мысль заключалась в том, что AVCaptureSession использует NSOpengGLContext для рендеринга кадров, поэтому я проверил, не изменился ли контекст, но это не так. Я также пробовал CVOpenGLTextureCache в соответствии с методом, который я использую на iOS, но безуспешно.
Однако, когда я запускаю пример AVScreenShack во время игры, он записывает весь экран и не мешает рендереру Cocos2d-x. Я думаю, это потому, что оба приложения работают в отдельных основных потоках, и поэтому не возникает никаких условий гонки. Могу ли я воспроизвести такое поведение в одном приложении для Mac? Или есть другой способ записать геймплей Cocos2d-x с приемлемой производительностью на MacOS?