OpenGLPipeline.h revision 0df6209a02d0ea99d2dff3a46ed9febd5925df4b
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#pragma once 18 19#include "CanvasContext.h" 20#include "BakedOpDispatcher.h" 21#include "BakedOpRenderer.h" 22#include "FrameBuilder.h" 23#include "IRenderPipeline.h" 24 25namespace android { 26namespace uirenderer { 27namespace renderthread { 28 29class OpenGLPipeline : public IRenderPipeline { 30public: 31 OpenGLPipeline(RenderThread& thread); 32 virtual ~OpenGLPipeline() {} 33 34 MakeCurrentResult makeCurrent() override; 35 Frame getFrame() override; 36 bool draw(const Frame& frame, const SkRect& screenDirty, const SkRect& dirty, 37 const FrameBuilder::LightGeometry& lightGeometry, 38 LayerUpdateQueue* layerUpdateQueue, 39 const Rect& contentDrawBounds, bool opaque, 40 const BakedOpRenderer::LightInfo& lightInfo, 41 const std::vector< sp<RenderNode> >& renderNodes, 42 FrameInfoVisualizer* profiler) override; 43 bool swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, 44 FrameInfo* currentFrameInfo, bool* requireSwap) override; 45 bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) override; 46 DeferredLayerUpdater* createTextureLayer() override; 47 bool setSurface(Surface* window, SwapBehavior swapBehavior) override; 48 void onStop() override; 49 bool isSurfaceReady() override; 50 bool isContextReady() override; 51 void onDestroyHardwareResources() override; 52 void renderLayers(const FrameBuilder::LightGeometry& lightGeometry, 53 LayerUpdateQueue* layerUpdateQueue, bool opaque, 54 const BakedOpRenderer::LightInfo& lightInfo) override; 55 TaskManager* getTaskManager() override; 56 bool createOrUpdateLayer(RenderNode* node, 57 const DamageAccumulator& damageAccumulator) override; 58 static void destroyLayer(RenderNode* node); 59 GrContext* getGrContext() override { return nullptr; } 60 61private: 62 EglManager& mEglManager; 63 EGLSurface mEglSurface = EGL_NO_SURFACE; 64 bool mBufferPreserved = false; 65 RenderThread& mRenderThread; 66}; 67 68} /* namespace renderthread */ 69} /* namespace uirenderer */ 70} /* namespace android */ 71