OpenGLPipeline.h revision 768e39335b668e8ef25fef30ab42b2d6d29a4735
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 Frame; 30 31 32class OpenGLPipeline : public IRenderPipeline { 33public: 34 OpenGLPipeline(RenderThread& thread); 35 virtual ~OpenGLPipeline() {} 36 37 MakeCurrentResult makeCurrent() override; 38 Frame getFrame() override; 39 bool draw(const Frame& frame, const SkRect& screenDirty, const SkRect& dirty, 40 const FrameBuilder::LightGeometry& lightGeometry, 41 LayerUpdateQueue* layerUpdateQueue, 42 const Rect& contentDrawBounds, bool opaque, 43 const BakedOpRenderer::LightInfo& lightInfo, 44 const std::vector< sp<RenderNode> >& renderNodes, 45 FrameInfoVisualizer* profiler) override; 46 bool swapBuffers(const Frame& frame, bool drew, const SkRect& screenDirty, 47 FrameInfo* currentFrameInfo, bool* requireSwap) override; 48 bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) override; 49 Layer* createTextureLayer() override; 50 bool setSurface(Surface* window, SwapBehavior swapBehavior) override; 51 void onStop() override; 52 bool isSurfaceReady() override; 53 bool isContextReady() override; 54 void onDestroyHardwareResources() override; 55 void renderLayers(const FrameBuilder::LightGeometry& lightGeometry, 56 LayerUpdateQueue* layerUpdateQueue, bool opaque, 57 const BakedOpRenderer::LightInfo& lightInfo) override; 58 TaskManager* getTaskManager() override; 59 60private: 61 EglManager& mEglManager; 62 EGLSurface mEglSurface = EGL_NO_SURFACE; 63 bool mBufferPreserved = false; 64 RenderThread& mRenderThread; 65}; 66 67} /* namespace renderthread */ 68} /* namespace uirenderer */ 69} /* namespace android */ 70