The code is very simple:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <GL/glew.h>
#include <windows.h>
#include <GL/glut.h>
typedef unsigned char BYTE;
int main(int argc, char **argv) {
int texSize = 4;
int i;
//to store read back data
GLuint result[4texSizetexSize];
//to store source data
GLuint* data = (GLuint*)malloc(4*texSize*texSize*sizeof(GLuint));
for (i=0; i<texSize*texSize*4; i++)
{
data[i] = 1; //whatever values
}
glutInit (&argc, argv);
glutCreateWindow("TEST1");
glewInit();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,texSize,0.0,texSize);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glViewport(0,0,texSize,texSize);
// Create FBO
GLuint fb;
glGenFramebuffersEXT(1,&fb);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fb);
//create texture buffer
GLuint fboTex;
glGenTextures (1, &fboTex);
glBindTexture(GL_TEXTURE_RECTANGLE_ARB,fboTex);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA32UI,texSize,texSize,0,GL_RGBA_INTEGER,GL_UNSIGNED_INT,data);
//create render buffer
GLuint rboId;
glGenRenderbuffersEXT(1, &rboId);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboId);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, texSize, texSize);
//bind FBO with render buffer and texutre buffer
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_RECTANGLE_ARB,fboTex,0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,rboId);
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Read back the texture data
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadPixels(0, 0, texSize, texSize,GL_RGBA_INTEGER,GL_UNSIGNED_INT,result);
//out put data
for (i=0; i<texSize*texSize*4; i++)
printf("%u
",result[i]);
free(data);
glDeleteFramebuffersEXT (1,&fb);
glDeleteTextures(1,&fboTex);
return 0;
}