void Canvas::renderWindow(WindowPtr pWindow, MCFBOPtr pFBO, const IntRect& viewport) { GLContext* pContext = pWindow->getGLContext(); pContext->activate(); GLContextManager::get()->uploadDataForContext(); renderFX(pContext); glm::mat4 projMat; if (pFBO) { pFBO->activate(pContext); glm::vec2 size = m_pRootNode->getSize(); projMat = glm::ortho(0.f, size.x, 0.f, size.y); glViewport(0, 0, GLsizei(size.x), GLsizei(size.y)); } else { glproc::BindFramebuffer(GL_FRAMEBUFFER, 0); projMat = glm::ortho(float(viewport.tl.x), float(viewport.br.x), float(viewport.br.y), float(viewport.tl.y)); IntPoint windowSize = pWindow->getSize(); glViewport(0, 0, windowSize.x, windowSize.y); } { ScopeTimer Timer(VATransferProfilingZone); m_pVertexArray->update(pContext); } clearGLBuffers(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, !pFBO); GLContext::checkError("Canvas::renderWindow: glViewport()"); m_pVertexArray->activate(pContext); { ScopeTimer timer(RootRenderProfilingZone); m_pRootNode->maybeRender(pContext, projMat); } renderOutlines(pContext, projMat); }