Вы не можете прочитать мультисэмпловый буфер напрямую с помощью glReadPixels, так как это вызовет ошибку GL_INVALID_OPERATION. Вам нужно перейти на другую поверхность, чтобы графический процессор мог выполнить уменьшенную выборку. Вы можете переместиться в буфер, но существует проблема «теста корабля владельца пикселя». Лучше всего сделать еще один FBO. Давайте предположим, что вы сделали еще один FBO, и теперь вы хотите блит. Это требует GL_EXT_framebuffer_blit. Как правило, когда ваш драйвер поддерживает GL_EXT_framebuffer_multisample, он также поддерживает GL_EXT_framebuffer_blit, например, серии nVidia Geforce 8.
//Bind the MS FBO
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, multisample_fboID);
//Bind the standard FBO
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fboID);
//Let's say I want to copy the entire surface
//Let's say I only want to copy the color buffer only
//Let's say I don't need the GPU to do filtering since both surfaces have the same dimension
glBlitFramebufferEXT(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
//--------------------
//Bind the standard FBO for reading
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboID);
glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, pixels);
Источник: Мультисэмпл GL EXT framebuffer