A возможно решение состоит в том, чтобы использовать стандартный кадровый буфер, предоставляемый оконной системой, который равен 0.
Мне не нравится это решение , потому что я не знаю, почему я не могу сгенерировать FrameBuffer или я могу использовать стандартный кадровый буфер, предоставляемый оконной системой.
Вот мой модифицированный код:
RenderingEngine2::RenderingEngine2()
{
// Create & bind the color buffer so that the caller can allocate its space.
glGenRenderbuffers(1, &m_renderbuffer);
checkGlError("01 - glGenRenderbuffers");
glBindRenderbuffer(GL_RENDERBUFFER, m_renderbuffer);
checkGlError("02 - glBindRenderbuffer");
LOG("RenderingEngine2::RenderingEngine2()");
}
void RenderingEngine2::Initialize(int width, int height)
{
LOG("RenderingEngine2::Initialize");
/*
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA4, width, height);
// Create the framebuffer object and attach the color buffer.
glGenFramebuffers(1, &m_framebuffer);
*/
m_framebuffer = (GLuint) 0;
checkGlError("03 - glGenFramebuffers");
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
checkGlError("04 - glBindFramebuffer");
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
m_renderbuffer);
checkGlError("05 - glFramebufferRenderbuffer");
GLint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(status == GL_FRAMEBUFFER_COMPLETE)
{
LOG("Framebuffer completed");
}
else
{
LOGE("Framebuffer error: (0x%x)", status);
}
glViewport(0, 0, width, height);
checkGlError("06 - glViewPort");
m_simpleProgram = BuildProgram(SimpleVertexShader, SimpleFragmentShader);
glUseProgram(m_simpleProgram);
checkGlError("07 - glUseProgram");
// Initialize the projection matrix.
ApplyOrtho(2, 3);
// Initialize rotation animation state.
OnRotate(DeviceOrientationPortrait);
m_currentAngle = m_desiredAngle;
}