Я пытаюсь заставить мультисэмплинг работать с моим буфером кадров (для постобработки). Я могу заставить его почти работать, игнорируя буфер глубины, но у меня возникают проблемы с лицами, которые не отображаются.
Я настроил свой обычный буфер кадра следующим образом
glBindTexture(GL_TEXTURE_2D, m_Texture);
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGB, 1280, 720, 0, GL_RGB, GL_UNSIGNED_BYTE, 0
);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glFramebufferTexture2D(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_Texture, 0
);
// Create color render buffer
glGenRenderbuffers(1, &m_TexColorBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_TexColorBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB, 1280, 720);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_TexColorBuffer);
// Create depth render buffer (This is optional)
glGenRenderbuffers(1, &m_RBODepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_RBODepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 1280, 720);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_RBODepthBuffer);
Затем я также создаю кадровый буфер Multi-Sampling, подобный этому.
glEnable(GL_MULTISAMPLE);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, m_Texture);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGB, 1280, 720, GL_FALSE);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, m_Texture, 0);
glGenRenderbuffers(1, &m_TexColorBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_TexColorBuffer);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_RGB, 1280, 720);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_TexColorBuffer);
/* glGenRenderbuffers(1, &m_RBODepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_RBODepthBuffer);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_DEPTH_COMPONENT24, 1280, 720);
glFramebufferRenderbuffer(
GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_RBODepthBuffer
);*/
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_Texture, 0);
Этот код (с закомментированным разделом в буфере глубины) действительно создает текстуру с несколькими образцами, которая отображается правильно, но без глубины я получаю лица, которые не отображаются или нормали в неправильном направлении (так что с углов, которые я вижу внутри модели). Но если я раскомментирую этот раздел, то
glCheckFramebufferStatus(GL_FRAMEBUFFER)
возвращается
36182
с последующим
Error 00000506 after convex fill
и в итоге черный экран.
Я использую glBlitFramebuffer для копирования многовыборочного fbo в одновыборочное fbo (которое работает, но с проблемами, упомянутыми ранее).
На самом деле застрял на этом этапе и нигде не могу найти решение!
m_Texture
к тому же месту прикрепления цвета, что иm_TexColorBuffer
? У вас может быть только одно изображение для каждого места прикрепления; присоединение другого приведет к отсоединению предыдущего. - person Nicol Bolas   schedule 07.02.2018int i = 2; i = 4;
Конечно, это устанавливает 4 вi
, но если вы хотите поместить 4 вi
, есть намного более разумный способ сделать это. - person Nicol Bolas   schedule 08.02.2018