Esempio n. 1
0
void FrameBufferObject::Begin(GraphicsState & glstate, std::ostream & error_output, float viewscale)
{
	CheckForOpenGLErrors("before FBO begin", error_output);

	assert(inited);
	assert(framebuffer_object > 0);
	assert(!textures.empty());

	glstate.BindFramebuffer(GL_FRAMEBUFFER, framebuffer_object);

	CheckForOpenGLErrors("FBO bind to framebuffer", error_output);

	FrameBufferTexture * tex = textures.back();
	if (tex->GetTarget() == FrameBufferTexture::CUBEMAP)
	{
		glFramebufferTexture2D(GL_FRAMEBUFFER, tex->GetAttachment(), tex->GetSide(), tex->GetId(), 0);
		CheckForOpenGLErrors("FBO cubemap side attachment", error_output);
	}

	assert(CheckStatus(error_output));

	glstate.SetViewport(int(tex->GetW() * viewscale), int(tex->GetH() * viewscale));

	CheckForOpenGLErrors("during FBO begin", error_output);
}