double GLWebViewState::setupDrawing(IntRect& viewRect, SkRect& visibleRect, IntRect& webViewRect, int titleBarHeight, IntRect& screenClip, float scale) { int left = viewRect.x(); int top = viewRect.y(); int width = viewRect.width(); int height = viewRect.height(); ShaderProgram* shader = TilesManager::instance()->shader(); if (shader->program() == -1) { XLOG("Reinit shader"); shader->init(); } shader->setViewport(visibleRect, scale); shader->setViewRect(viewRect); shader->setWebViewRect(webViewRect); shader->setTitleBarHeight(titleBarHeight); shader->setScreenClip(screenClip); shader->resetBlending(); shader->calculateAnimationDelta(); glViewport(left + shader->getAnimationDeltaX(), top - shader->getAnimationDeltaY(), width, height); double currentTime = WTF::currentTime(); setViewport(visibleRect, scale); m_zoomManager.processNewScale(currentTime, scale); return currentTime; }