Ну если конкретнее, то это уже примеры использования, а ты гришь ты эти ФБО итак юзаешь. Позволь догадаться, ты хочешь ФБО в класс инкапсулировать, так что тебе хочется узнать, чего в него напихать. Ну тогда вот: 8 цветовых аттачментов, 1 буффер глубины ЛИБО 1 буффер глубины@трафарет ЛИБО 1 буффер трафарета (раздельно глубина и трафарет не поддерживаются).
Рисовка может одновременно идти в таргеты лишь одного фреймбуффера. Но не обязательно во все сразу. Функция glDrawBuffers даёт выбрать, в какие таргеты активного фреймбуффера рисовать и в каком порядке. Ну вот например если у тебя 4 текстуры приаттачено к ФБО, и ты хочешь рисовать в ту, что прицеплена к аттачмент поинту №2, то делаешь так:
GLuint targets[4] = { GL_COLOR_ATTACHMENT2, GL_NONE, GL_NONE, GL_NONE };
glBindFramebuffer(MyFBO);
glDrawBuffers(4,targets);
Эквивалентно, но не так наглядно:
glDrawBuffers(1,targets);
Потому что GL_NONE - дефолт для всех неуказанных таргетов.
Можно и не рисовать цвет вообще:
glDrawBuffer(GL_NONE);
В таком случае будет писаться лишь буффер глубины, если такой аттачмент имеется.
О, кстать, не забудь, что glViewport не имеет никакого отношения к ФБО, так что когда переключаешься с одного ФБО на другой всегда помни вьюпорт перенастраивать. Возможно, имеет смысл размеры вьюпорта в классе ФБО хранить, кстать.
Насчёт дравбуфферов не уверен, помнит ли ФБО свои дравтаргеты, но помойму нужно указывать их каждый раз при переключении ФБО.