All you have to do is create the FBOs textures with the desired width and height and adjust the viewport accordingly when rendering, as shown in [this Shadow Map tutorial by Fabien Sanglard][1].

First create the FBO and it's textures with the desired dimensions. Here `fbo_intermediary_colortexture` is the FBO id, `window_width` and `window_height` are what the name implies and `intermediaryTextureSizeRatio` is a float that tells how much the FBO texture dimensions should be reduced:

 void createFrameBuffer()
 {
 // Color texture
 	glGenTextures(1, &fbo_intermediary_colortexture);
 	glBindTexture(GL_TEXTURE_2D, fbo_intermediary_colortexture);
 	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
 	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, window_width * intermediaryTextureSizeRatio, window_height * intermediaryTextureSizeRatio, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
 	glBindTexture(GL_TEXTURE_2D, 0);
 
 	// FBO
 	glGenFramebuffersEXT(1, &fbo_intermediary);
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_intermediary);
 	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, fbo_intermediary_colortexture, 0);
 
 	// Test
 	if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT)
 		cout << "Couldn't create frame buffer" << endl;
 
 	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 }

After that, when rendering, just adjust the viewport dimensions accordingly to where it's being done (in that case, first on the FBO, and then on the screen):

 // Rendering on the FBO, first bind the created FBO and then adjust the viewport dimensions
 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo_intermediary);
 glViewport(0,0, window_width * intermediaryTextureSizeRatio, window_height * intermediaryTextureSizeRatio);
 
 /** rendering to off screen FBO goes here **/
 
 // Then bind the screen frame buffer, adjust the viewport dimensions again, and render
 // Notice that the window dimensions are not being multiplied by the reducing factor here
 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 glViewport(0,0, window_width, window_height);
 
 /** rendering to screen goes here **/

You can check the generated textures dimensions with [gDEBugger][2] or some similar application.

One last thing: be warned that, as shown in the aforementioned tutorial, some artifacts will certainly rise from a small texture being rendered on a bigger screen, which can be a bad outcome depending on the scenario.


 [1]: http://fabiensanglard.net/shadowmapping/index.php
 [2]: http://www.gremedy.com/