Я внедряю функцию записи геймплея в кроссплатформенную игру 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?
Задача ещё не решена.
Других решений пока нет …