//Setup output texture
GLuint img;
glGenTextures(1, &img);
glBindTexture(GL_TEXTURE_2D, img);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F_ARB, size, size, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D,0,0,0,size,size,GL_RED,GL_FLOAT,data);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, img, 0);
checkFramebufferStatus();
checkGLErrors("Output Texture Creation");
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
checkGLErrors("Frame Buffer binding");
checkFramebufferStatus();
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glClearColor( 0.0f, 0.0f, 0.2f, 1.0f );
glPolygonMode(GL_FRONT, GL_FILL);
glBegin( GL_QUADS );
glTexCoord2f(0.0, 1.0);
glVertex2f(0.0, 0.0);
glTexCoord2f(1.0, 1.0);
glVertex2f(size, 0.0);
glTexCoord2f(1.0, 0.0);
glVertex2f(size, size);
glTexCoord2f(0.0, 0.0);
glVertex2f(0.0, size);
glEnd();
checkFramebufferStatus();
checkGLErrors("Render to FBO");
//Reading values from frameBuffer to array with flaots
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadPixels(0, 0, size, size,GL_RED,GL_FLOAT,pixels);