AlexsSyr | Дата: Понедельник, 22 Января 2018, 20:17 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Имеется следующий класс для множественной отрисовки.
Код #include "FBO.h"
bool FBO::Init(unsigned int W, unsigned int H, unsigned int count) { w = W; h = H;
glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
Log::PrintMessage("Создание FBO ...");
textures = new GLuint[count];
glGenTextures(count, textures); glGenTextures(1, &depthTexture);
for (unsigned int i = 0; i < count; i++) { glBindTexture(GL_TEXTURE_2D, textures[i]); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, w, h, 0, GL_RGBA, GL_FLOAT, NULL); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, textures[i], 0); }
// depth glBindTexture(GL_TEXTURE_2D, depthTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, w, h, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
GLenum* DrawBuffers = new GLenum[count]; for (unsigned int i = 0; i < count; i++) DrawBuffers[i] = GL_COLOR_ATTACHMENT0 + i;
glDrawBuffers(count, DrawBuffers);
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (Status != GL_FRAMEBUFFER_COMPLETE) { Log::PrintError("Не удалось создать FBO"); return false; }
// restore default FBO glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
Log::PrintMessage("FBO успешно создан");
return true; }
void FBO::Bind() { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glViewport(0, 0, w, h); }
void FBO::BindDefaultFBO() { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); }
FBO::FBO() { }
FBO::~FBO() { }
Может кто подсказать, как реализовать сглаживание при данном подходе к рендерингу ?
|
|
| |