I am currently trying to read pixel data from a frame buffer in order to capture the screen in iOS. The GlreadPixels command works great when using the following code to configure the frame buffer: -
//buffers // Create a depth buffer that has the same size as the color buffer. glGenRenderbuffersOES(1, &m_depthRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_depthRenderbuffer); glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24_OES, width, height); // Create the framebuffer object. glGenFramebuffersOES(1, &framebuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, m_colorRenderbuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, m_depthRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer);
but when I use the depth buffer and colorbuffer for Multi-Sampling glreadpixels (), do not write any data in pixels, as with the earlier code .... for multisampling I use the following code: -
glGenFramebuffersOES(1, &sampleFramebuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, sampleFramebuffer); //GLuint sampleColorRenderbuffer; glGenRenderbuffersOES(1, &sampleColorRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, sampleColorRenderbuffer); glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_RGBA8_OES, width, height); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, sampleColorRenderbuffer); //glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_RGBA8_OES, width, height); //glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, sampleColorRenderbuffer); GLuint sampleDepthRenderbuffer; glGenRenderbuffersOES(1, &sampleDepthRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, sampleDepthRenderbuffer); glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES, 4, GL_DEPTH_COMPONENT24_OES, width, height); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, sampleDepthRenderbuffer); //glBindRenderbufferOES(GL_RENDERBUFFER_OES,sampleColorRenderbuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, m_colorRenderbuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, sampleFramebuffer);
I use the following code to read pixel data: -
CGRect screenBounds = [[UIScreen mainScreen] bounds]; int backingWidth = screenBounds.size.width; int backingHeight =screenBounds.size.height; glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); NSInteger myDataLength = backingWidth * backingHeight * 4; buffer= (GLuint *) malloc(myDataLength); glReadPixels(0, 0, backingWidth, backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
Any idea how to capture the correct pixel data using multiple sampling technology .... or am I doing something wrong? Please guide me in the right direction. Thanks