GPUImage记录OpenGL ES场景的纹理,视频是黑色的

时间:2014-07-11 05:16:56

标签: opengl-es textures gpuimage

我正在使用GPUImageTextureInput和GPUImageMovieWriter,

但我总是有一段黑色视频。

我错过了什么吗?我花了几天时间。

frameBuffer和纹理设置在这里:

self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:[[[GPUImageContext sharedImageProcessingContext] context] sharegroup]];



[EAGLContext setCurrentContext:self.context];
    GLenum status;

glGenFramebuffers(1, &newFrameBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, newFrameBuffer);




glGenTextures(1, &outputTexture);
glBindTexture(GL_TEXTURE_2D, outputTexture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,  640, 1136 , 0, GL_RGBA,
             GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, outputTexture, 0);

和电影作家:

    textureInput = [[GPUImageTextureInput alloc] initWithTexture:outputTexture size:size];

NSURL *movieURL = [NSURL fileURLWithPath:
                          [NSString stringWithFormat:@"%@%f.mp4", NSTemporaryDirectory(),
                           [[NSDate date] timeIntervalSince1970]]];



movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(640, 1136)];
movieWriter.encodingLiveVideo = YES;


[textureInput addTarget:movieWriter];

double delayToStartRecording = 1.0;
dispatch_time_t sstartTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC);
dispatch_after(sstartTime, dispatch_get_main_queue(), ^(void){
    NSLog(@"Start recording");

    //videoCamera.audioEncodingTarget = movieWriter;
    [movieWriter startRecording];

    started = YES;

    //        NSError *error = nil;
    //        if (![videoCamera.inputCamera lockForConfiguration:&error])
    //        {
    //            NSLog(@"Error locking for configuration: %@", error);
    //        }
    //        [videoCamera.inputCamera setTorchMode:AVCaptureTorchModeOn];
    //        [videoCamera.inputCamera unlockForConfiguration];

    double delayInSeconds = 20.0;
    dispatch_time_t stopTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(stopTime, dispatch_get_main_queue(), ^(void){




        [movieWriter finishRecordingWithCompletionHandler:^{
            NSLog(@"Movie completed");
            finished = YES;

        }];

        //            [videoCamera.inputCamera lockForConfiguration:nil];
        //            [videoCamera.inputCamera setTorchMode:AVCaptureTorchModeOff];
        //            [videoCamera.inputCamera unlockForConfiguration];
    });
});

和drawInRect

[(GLKView*)self.view bindDrawable];

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

glBindVertexArrayOES(_vertexArray);

// Render the object with GLKit
[self.effect prepareToDraw];

glDrawArrays(GL_TRIANGLES, 0, 36);

// Render the object again with ES2
glUseProgram(_program);

glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);

glDrawArrays(GL_TRIANGLES, 0, 36);

glFlush();


//[EAGLContext setCurrentContext:self.context];

glBindFramebuffer(GL_FRAMEBUFFER, newFrameBuffer);
glViewport(0,0, 640,1138);

glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);

glBindVertexArrayOES(_vertexArray);

// Render the object with GLKit
[self.effect prepareToDraw];

glDrawArrays(GL_TRIANGLES, 0, 36);

// Render the object again with ES2
glUseProgram(_program);

glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);

glDrawArrays(GL_TRIANGLES, 0, 36);

glFlush();

// some GPUImage code

1 个答案:

答案 0 :(得分:0)

我的帧缓冲输出/输出纹理也是黑色的。我尝试了很多东西,几天开关调试,主要是关注Brad Larson的CubeExample。

一旦我添加了这个电话,事情就开始出现了:

glBindTexture(GL_TEXTURE_2D, 0)

呼叫glTexImage2DglFramebufferTexture2D

这是该示例项目供参考。 https://github.com/BradLarson/GPUImage/tree/master/examples/iOS/CubeExample