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()
    }
}

0 ответов

Другие вопросы по тегам