void Statistic::realize() { Transform::realize(); WindowPtr myWindow = boost::static_pointer_cast<spark::Window>(getRoot()); StatisticPtr ptr = boost::static_pointer_cast<Statistic>(shared_from_this()); spark::EventCallbackPtr myFrameCB = EventCallbackPtr(new StatisticCB(ptr, &Statistic::onFrame)); myWindow->addEventListener(StageEvent::FRAME, myFrameCB); int myStatisticHeight = 0; ContainerPtr myContainer = boost::static_pointer_cast<spark::Container>(shared_from_this()); ComponentPtr myCreated = SparkComponentFactory::get().loadSparkComponentsFromString(myContainer->getApp(), "<Text name=\"fps\" y=\"-10\" maxWidth=\"0\" z=\"100\" text=\"fps:\" height=\"-16\" color=\"[1.0,0.0,0.0, 1.0]\" fontsize=\"16\"/>"); myContainer->addChild(myCreated); _myFPSText = boost::static_pointer_cast<spark::Text>(myCreated); myCreated = SparkComponentFactory::get().loadSparkComponentsFromString(myContainer->getApp(), "<Text name=\"memory_usage\" y=\"-30\" z=\"100\" maxWidth=\"0\" text=\"memory:\" height=\"-16\" color=\"[1.0,0.0,0.0, 1.0]\" fontsize=\"16\"/>"); myContainer->addChild(myCreated); _myMemoryText = boost::static_pointer_cast<spark::Text>(myCreated); myStatisticHeight += _myFPSText->getTextSize()[1]; myCreated = SparkComponentFactory::get().loadSparkComponentsFromString(myContainer->getApp(), "<Text name=\"battery_level\" y=\"-50\" z=\"100\" maxWidth=\"0\" text=\"memory:\" height=\"-16\" color=\"[1.0,0.0,0.0, 1.0]\" fontsize=\"16\"/>"); myContainer->addChild(myCreated); _myBatteryLevelText = boost::static_pointer_cast<spark::Text>(myCreated); myStatisticHeight += _myFPSText->getTextSize()[1]; setY(myWindow->getSize()[1] - myStatisticHeight); setX(10); }
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); }