GPUImage, выдающий несколько ошибок GL_INVALID_, как только используется какой-либо класс GPUImage
Я пытаюсь интегрировать GPUImage в проект cocos2d-swift (SpriteBuilder), чтобы я мог использовать видеофильтры в своем приложении. Я получил GPUImage, работающий нормально в примерах, поэтому я перешел и добавил фреймворк и последовал README, чтобы получить GPUImage в мой экспортированный проект SpriteBuilder, который загружает MainScene. Однако, как только я пытаюсь использовать что-либо из GPUImage, я получаю кучу ошибок OpenGL, и приложение вылетает.
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized commit] 179
OpenGL error GL_INVALID_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized commit] 179
OpenGL error GL_INVALID_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized prepare] 170
OpenGL error GL_INVALID_VALUE detected at -[CCGraphicsBufferGLUnsynchronized prepare] 170
OpenGL error GL_INVALID_VALUE detected at -[CCGLView presentFrame] 463
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized commit] 179
OpenGL error GL_INVALID_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized commit] 179
OpenGL error GL_INVALID_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at CCRenderStateGLTransition 285
OpenGL error GL_INVALID_FRAMEBUFFER_OPERATION detected at -[CCGraphicsBufferGLUnsynchronized prepare] 170
OpenGL error GL_INVALID_VALUE detected at -[CCGraphicsBufferGLUnsynchronized prepare] 170
OpenGL error GL_INVALID_VALUE detected at -[CCGLView presentFrame] 463
Я закомментировал все и постарался раскомментировать построчно, чтобы увидеть причину сбоя, и это происходит всякий раз, когда создается экземпляр любого из классов GPUImage. В этом случае простое создание объекта GPUImageMovie вызывает сбой:
let movieFile = GPUImageMovie(playerItem: playerItem)
Создание GPUImageGrayscaleFilter или GPUImageView также вызывает это. Все, что мне нужно, чтобы иметь возможность делать в своем приложении, это отображать видео или камеру и применять к ней фильтр, довольно простой сам по себе; но как только появился cocos2d-swft, появилось много проблем.
Я вижу, что некоторые люди упоминают о группах общего доступа и контекстах gl, и что GPUImage и cocos2d конфликтуют друг с другом, но я пока не нашел человека, объясняющего, как на самом деле заставить его работать.
Весь файл MainScene.swift выглядит следующим образом (в сцене есть кнопка, которая вызывает функцию playVideo, вот и все).
import Foundation
import GPUImage
class MainScene: CCNode {
func playVideo() {
let mediaURL : NSURL! = NSBundle.mainBundle().URLForResource("BigBuckBunny_640x360", withExtension: "m4v")
let mainPlayer : AVPlayer! = AVPlayer()
let playerItem : AVPlayerItem! = AVPlayerItem(URL: mediaURL)
let movieFile = GPUImageMovie(playerItem: playerItem)
movieFile.runBenchmark = false
movieFile.playAtActualSpeed = true
let filter = GPUImageGrayscaleFilter()
movieFile.addTarget(filter)
let mainView = CCDirector.sharedDirector().view;
let filterView : GPUImageView! = GPUImageView(frame: CGRectMake(0, 0, 640, 360))
mainView.addSubview(filterView)
filter.addTarget(filterView)
movieFile.startProcessing()
mainPlayer.play()
}
}