Tôi đang sử dụng Xcode 4.5.1 và thử nghiệm trên iPhone5 với iOS6.Chụp khung hình trong Xcode không thành công
Tôi đã sử dụng chức năng chụp khung không có vấn đề, nhưng đột nhiên nó ngừng hoạt động. Khi tôi nhấn nút chụp khung, có vẻ như khung được chụp và điện thoại sẽ chuyển sang màn hình trống, chỉ đột nhiên chuyển về màn hình ứng dụng và ứng dụng tiếp tục chạy. Tôi vẫn có thể gỡ lỗi và tạm dừng ứng dụng, nhưng không có cách nào để lấy lại khung hình. Tôi không thấy bất kỳ lỗi nào trong bảng điều khiển.
Lý do nó ngừng hoạt động là đoạn mã này. Mã này được cho là để render một thứ gì đó cho một rendertexture, nhưng rendertexture có vẻ trống. Tôi muốn sử dụng chức năng chụp khung hình để tìm hiểu những gì sai, nhưng mã tự nó sẽ không cho phép tôi chụp ... :(
Bất cứ ý tưởng tại sao
// ------------- init function -----------------
// Create the framebuffer and bind it
glGenFramebuffers(1, &g_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
//Create the destination texture, and attach it to the framebuffer’s color attachment point.
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_texture, 0);
//Test the framebuffer for completeness
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
if(status != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"failed to make complete framebuffer object %x", status);
} else {
NSLog(@"SkyPlugin initialized");
}
// ----------------- on update ------------------
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
glGetIntegerv(GL_VIEWPORT, oldViewPort);
// set the framebuffer and clear
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glViewport(0, 0, 32, 32);
//glClearColor(0.9f, 0.1f, 0.1f, 1.0f);
glDisable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
// Set shader
glUseProgram(m_program);
// do some glEnableVertexAttribArray
// ...
// texture setting
glActiveTexture(GL_TEXTURE0);
glUniform1i(m_uniform, 0);
ResourceManager* resourceManager = ResourceManager::GetInstance();
glBindTexture(GL_TEXTURE_2D, m_texture[0]);
// ----------- Draw -----------
// Draws a full-screen quad to copy textures
static const vertexDataUV quad[] = {
{/*v:*/{-1.f,-1.f,0}, /*t:*/{0,0}},
{/*v:*/{-1.f,1,0}, /*t:*/{0,1}},
{/*v:*/{1,-1.f,0}, /*t:*/{1,0}},
{/*v:*/{1,1,0}, /*t:*/{1,1}}
};
static const GLubyte indeces[] = {0,2,1,3};
glVertexAttribPointer(m_posAttrib, 3, GL_FLOAT, 0, sizeof(vertexDataUV), &quad[0].vertex);
glVertexAttribPointer(m_texCoordAttrib, 2, GL_FLOAT, 0, sizeof(vertexDataUV), &quad[0].uv);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indeces);
// ------------ End
// go back to the main framebuffer!
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
glViewport(oldViewPort[0], oldViewPort[1], oldViewPort[2], oldViewPort[3]);
glEnable(GL_DEPTH_TEST);
//glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
Chỉnh sửa: (2012/Tháng Mười/28)
tôi phát hiện ra lý do tại sao các mã trên đã không được làm việc. tôi quên để ràng buộc một render đệm! các mã bên dưới công trình, nhưng vẫn chụp khung thất bại khi mã này đang hoạt động ...
Trên init,
// Tạo bộ dựng hình và liên kết nó glGenRenderbuffers (1, & g_renderbuffer); glBindRenderbuffer (GL_RENDERBUFFER, g_renderbuffer); glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8_OES, w, h);
// Create the framebuffer and bind it
glGenFramebuffers(1, &g_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, g_renderbuffer);
//Create the destination texture, and attach it to the framebuffer’s color attachment point.
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_texture, 0);
On cập nhật,
glGetIntegerv(GL_RENDERBUFFER_BINDING, &oldRBO);
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
glGetIntegerv(GL_VIEWPORT, oldViewPort);
// set the framebuffer and clear
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, g_renderbuffer);
glViewport(0, 0, 32, 32);
// ... draw stuff ...
Kết thúc cập nhật,
// go back to the main framebuffer!
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
glBindRenderbuffer(GL_RENDERBUFFER, oldRBO);
Chúng tôi có chính xác cùng một vấn đề.Không biết nguyên nhân là gì :( – Split
Nhật ký duy nhất tôi có thể nhận được cho đến thời điểm này là: ' 10/28/12 7: 02: 19.818 PM Xcode [5371]: [MT] DVTAssertions: Cảnh báo trong/SourceCache/GPUDebuggeriOSSupport/GPUDebuggeriOSSupport-51,8/GPUiOSReplayController.m: 127 chi tiết: replayer chấm dứt không đúng Object: Phương pháp: -_handleGuestAppStatusChangeNotification: Ðề tài: {name = (null), num = 1} Hãy nộp lỗi tại http://bugreport.apple.com với thông báo cảnh báo này và bất kỳ thông tin hữu ích nào mà bạn có thể cung cấp. ' –
endavid