Application error on GPUImageVideoCamera in glDrawArrays

As an integrated GPUImage for one of our applications. I have often encountered errors at one point. My source code is described here.

glActiveTexture(GL_TEXTURE5);
glBindTexture(GL_TEXTURE_2D, chrominanceTexture);
glUniform1i(yuvConversionChrominanceTextureUniform, 5);

glUniformMatrix3fv(yuvConversionMatrixUniform, 1, GL_FALSE, _preferredConversion);

glVertexAttribPointer(yuvConversionPositionAttribute, 2, GL_FLOAT, 0, 0, squareVertices);
glVertexAttribPointer(yuvConversionTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0,                [GPUImageFilter textureCoordinatesForRotation:internalRotation]);
glDisableVertexAttribArray(GL_TRIANGLE_STRIP);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

      

During debugging, we discovered that Crash appears on glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)

this line.

Can anyone help me with this crash.

// Declaration In Interterface

GPUImageVideoCamera * videoCamera; GPUImageOutput * filter; @property (weak, non-atomic) IBOutlet GPUImageView * cameraView;

// Implementation // To Blend Live Image

filter = [[GPUImageNormalBlendFilter alloc] init];
[videoCamera addTarget:filter];
[filter addTarget:cameraView];

    GPUImagePicture *overlayImage = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:[arrayOfFrames objectAtIndex:index]] smoothlyScaleOutput:YES];
    [overlayImage processImage];
    [overlayImage addTarget:filter];

      

We apply the filter using the given sequence. GPUImageVideoCamera -> GPUImageNormalBlendFilter -> GPUImageView

(void)convertYUVToRGBOutput;
{
@autoreleasepool {
@try {
[GPUImageContext setActiveShaderProgram:yuvConversionProgram];

    int rotatedImageBufferWidth = imageBufferWidth, rotatedImageBufferHeight = imageBufferHeight;

    if (GPUImageRotationSwapsWidthAndHeight(internalRotation))
    {
        rotatedImageBufferWidth = imageBufferHeight;
        rotatedImageBufferHeight = imageBufferWidth;
    }

    outputFramebuffer = [[GPUImageContext sharedFramebufferCache] fetchFramebufferForSize:CGSizeMake(rotatedImageBufferWidth, rotatedImageBufferHeight) textureOptions:self.outputTextureOptions onlyTexture:NO];
    [outputFramebuffer activateFramebuffer];

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    static const GLfloat squareVertices[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f,  1.0f,
        1.0f,  1.0f,
    };

    glActiveTexture(GL_TEXTURE4);
    glBindTexture(GL_TEXTURE_2D, luminanceTexture);
    glUniform1i(yuvConversionLuminanceTextureUniform, 4);

    glActiveTexture(GL_TEXTURE5);
    glBindTexture(GL_TEXTURE_2D, chrominanceTexture);
    glUniform1i(yuvConversionChrominanceTextureUniform, 5);

    glUniformMatrix3fv(yuvConversionMatrixUniform, 1, GL_FALSE, _preferredConversion);

    glVertexAttribPointer(yuvConversionPositionAttribute, 2, GL_FLOAT, 0, 0, squareVertices);
    glVertexAttribPointer(yuvConversionTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, [GPUImageFilter textureCoordinatesForRotation:internalRotation]);
    glDisableVertexAttribArray(GL_TRIANGLE_STRIP);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);  <—-  Causes Crash Over here

}
@catch (NSException *exception) {
    NSLog(@"Exception:%@",exception.description);
}

      

+3


source to share





All Articles