2
내가 GPUImageTextureInput 및 GPUImageMovieWriter을 사용하고
,GPUImage 기록의 OpenGL ES 장면의 질감, 비디오
검은 색하지만 난 항상 검은 색 화면을 얻었다.
나는 무엇인가 놓치고 있습니까? 나는 이것에 일을 보냈다.
프레임 버퍼 및 텍스처 설정은 여기에 있습니다 :
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
검은 색 인 이유를 잘 모릅니다. 나는 당신이 ** glBindFramebuffer (GL_FRAMEBUFFER, 0) **을 놓치고 있다는 것을 알아 차릴 것이다. ** FBO가 여러 개이기 때문에 좋은 연습 인 ** drawInRect **의 끝에. 약간 틀린 것 - 당신의 drawInRect가 기하학을 두 번 드로잉하는 것처럼 보입니다. 보조 FBO가 있기 때문에 먼저 렌더링 할 수 있습니다. 그런 다음 모든 것을 단순한 쿼드 렌더링 텍스쳐로 렌더링하면 기본 FBO로 이동합니다. http://mickyd.wordpress.com/2012/05/20/creating-render-to-texture-secondary-framebuffer-objects-on-ios-using-opengl-es-2/ – MickyD
방금 렌더링하면 어떻게됩니까? 기하학 및 비디오 녹화의 지금 차례? – MickyD
렌더링 도형이 괜찮습니다. 화면에서는 볼 수 있지만 녹화 비디오는 검은 색입니다. – notedit