Problem with reading color buffer out.

Dear all, I want to read the color buffer out using the following code. Unfortunately, I got a all-zero result result. :doh: Could somebody kindly review this code below? Thanks in advance.

|
|
void showFrameBufferImage()
{
static int index = 0;
int nextIndex = 0;

index = (index + 1) % 2;
nextIndex = (index + 1) % 2;

const int glViewportWidth_ = osuCGDeskConfig_->windowWidth_, glViewportHeight_ = osuCGDeskConfig_->windowHeight_;
const int DATA_SIZE = glViewportWidth_ * glViewportHeight_ * 4;

framebufferImage_ = cv::Mat(glViewportHeight_, glViewportWidth_, cv::DataType<cv::Vec3f>::type);

glGenBuffers(2, PBO_);
glBindBuffer(GL_PIXEL_PACK_BUFFER, PBO_[index]);
glBufferData(GL_PIXEL_PACK_BUFFER, DATA_SIZE, 0, GL_STREAM_READ);
glBindBuffer(GL_PIXEL_PACK_BUFFER, PBO_[nextIndex]);
glBufferData(GL_PIXEL_PACK_BUFFER, DATA_SIZE, 0, GL_STREAM_READ);

glReadBuffer(GL_FRONT);

glBindBuffer(GL_PIXEL_PACK_BUFFER, PBO_[index]);
glReadPixels(0, 0, glViewportWidth_, glViewportHeight_, GL_RGBA, GL_UNSIGNED_BYTE, 0);

 // map the PBO that contain framebuffer pixels before processing it
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, PBO_[nextIndex]);
GLubyte* src_ = (GLubyte*)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);

if(src_)
{
	cv::Vec3f vec_;

	for(int i = 0; i < glViewportHeight_; i++)
		for(int j = 0; j < glViewportWidth_; j++)
		{
			vec_[0] = *(src_)/255.0;
			vec_[1] = *(++src_)/255.0;
			vec_[2] = *(++src_)/255.0;

			framebufferImage_.at<cv::Vec3f>(glViewportHeight_-1-i, j) = vec_;

			++src_;	//// skip alpha
		}

	glUnmapBuffer(GL_PIXEL_PACK_BUFFER);     // release pointer to the mapped buffer
}

glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
glDeleteBuffers(2, PBO_);

}
|

Please ignore this post; I gave up using pixel buffer objects and turned to rendering buffer objects.