0

異なる CIImage を表示する 2 つのクラスがあります。どちらも、次の例のように OpenGL オブジェクトを作成する方法は同じです。

_context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES3];
    _coreImageContext = [CIContext contextWithEAGLContext:_context];
    _localCameraView = [[GLKView alloc]initWithFrame:self.localCameraViewPlayingRect context:_context];
    _localCameraView.drawableDepthFormat = GLKViewDrawableDepthFormat24;
    _localCameraView.context = _context;
    glGenRenderbuffers(1, &_renderBuffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);

1 つの glkview で ciImage を表示した後、別の EAGLContext を開始して別の CIImage を表示します。別の openGL オブジェクトは、次のコードのように作成されます。

_context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES3];
        _coreImageContext = [CIContext contextWithEAGLContext:_context];
        _cameraView = [[GLKView alloc]initWithFrame:self.playingRect context:_context];
        _cameraView.drawableDepthFormat = GLKViewDrawableDepthFormat24;
        _cameraView.context = _context;
        glGenRenderbuffers(1, &_renderBuffer);
        glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);

私はciimageを表示するために同じ方法を使用しますが、それらは異なる方法です。1.

    if(_coreImageContext && _context)
{
    [_cameraConnectorLocker lock];
    if(_cameraConnectorLocker && _context)
    {
        [_coreImageContext drawImage:ciImage inRect:CGRectMake(0, 0, self.cameraView.drawableWidth, self.cameraView.drawableHeight) fromRect:[ciImage extent]];
        [_context presentRenderbuffer:GL_RENDERBUFFER];

    }
    [_cameraConnectorLocker unlock];
}

2.

if(_coreImageContext && _context)
{
    [_outputVideoLock lock];
    if (_coreImageContext && _context) {

        [_coreImageContext drawImage:image inRect:CGRectMake(0, 0, self.localCameraView.drawableWidth, self.localCameraView.drawableHeight) fromRect:[image extent]];
        [_context presentRenderbuffer:GL_RENDERBUFFER];

    }
    [_outputVideoLock unlock];
}

これら 2 つの EAGLContext オブジェクトが同時に作成された場合、2 つの GLKView は 2 つの異なるビデオを表示します。1 つが最初に作成され、次に別のものが後で作成された場合、後のものは正常に表示され、最初のものは動かなくなります。直し方がわからないのですが、どなたか教えていただけないでしょうか?どうもありがとう。

4

1 に答える 1