Я делаю это из учебника, и у меня есть именно код из учебника. Но почему-то не работает. Итак, я отладил и увидел, что у него была ошибка 36060, также известная как GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER, насколько я знаю, и я действительно не понимаю, почему. Я искал ответы, и все говорили о glReadBuffer (GL_NONE); Но даже с этим я получаю ту же ошибку.
bool ShadowMapFBO::Init(unsigned int WindowWidth, unsigned int WindowHeight)
{
// Create the FBO
glGenFramebuffers(1, &m_fbo);
// Create the depth buffer
glGenTextures(1, &m_shadowMap);
glBindTexture(GL_TEXTURE_2D, m_shadowMap);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
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);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_shadowMap, 0);
// Disable writes to the color buffer
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (Status != GL_FRAMEBUFFER_COMPLETE) {
printf("FB error, status: 0x%x\n", Status);
return false;
}
return true;
}
РЕДАКТИРОВАТЬ: кажется, что glReadBuffer не работает вообще, и я не знаю почему. Я попытался glGetError, и я не получил ошибку
Я решил проблему. Похоже, мне пришлось добавить glBindFramebuffer (GL_READ_FRAMEBUFFER, m_fbo);
Похоже, если вам это не нужно, если у вас есть видеокарта nvidia. У меня была интегрированная видеокарта Intel, и поэтому она не работала.
Других решений пока нет …