| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 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 |  | 
| Alec Mouri | 43fe6fc | 2019-12-23 07:46:19 -0800 | [diff] [blame] | 19 | #include <EGL/egl.h> | 
|  | 20 | #include <system/window.h> | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 21 |  | 
| Alec Mouri | 43fe6fc | 2019-12-23 07:46:19 -0800 | [diff] [blame] | 22 | #include "SkiaPipeline.h" | 
| Derek Sollenberger | 5a5a648 | 2018-09-19 13:52:13 -0400 | [diff] [blame] | 23 | #include "renderstate/RenderState.h" | 
|  | 24 |  | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 25 | namespace android { | 
| Stan Iliev | 7bc3bc6 | 2017-05-24 13:28:36 -0400 | [diff] [blame] | 26 |  | 
|  | 27 | class Bitmap; | 
|  | 28 |  | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 29 | namespace uirenderer { | 
|  | 30 | namespace skiapipeline { | 
|  | 31 |  | 
| Derek Sollenberger | 5a5a648 | 2018-09-19 13:52:13 -0400 | [diff] [blame] | 32 | class SkiaOpenGLPipeline : public SkiaPipeline, public IGpuContextCallback { | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 33 | public: | 
|  | 34 | SkiaOpenGLPipeline(renderthread::RenderThread& thread); | 
| Derek Sollenberger | 5a5a648 | 2018-09-19 13:52:13 -0400 | [diff] [blame] | 35 | virtual ~SkiaOpenGLPipeline(); | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 36 |  | 
|  | 37 | renderthread::MakeCurrentResult makeCurrent() override; | 
|  | 38 | renderthread::Frame getFrame() override; | 
| Alec Mouri | 3afb397 | 2022-05-27 22:03:11 +0000 | [diff] [blame] | 39 | renderthread::IRenderPipeline::DrawResult draw(const renderthread::Frame& frame, | 
|  | 40 | const SkRect& screenDirty, const SkRect& dirty, | 
|  | 41 | const LightGeometry& lightGeometry, | 
|  | 42 | LayerUpdateQueue* layerUpdateQueue, | 
|  | 43 | const Rect& contentDrawBounds, bool opaque, | 
|  | 44 | const LightInfo& lightInfo, | 
|  | 45 | const std::vector<sp<RenderNode> >& renderNodes, | 
|  | 46 | FrameInfoVisualizer* profiler) override; | 
| Derek Sollenberger | 25833d2 | 2019-01-14 13:55:55 -0500 | [diff] [blame] | 47 | GrSurfaceOrigin getSurfaceOrigin() override { return kBottomLeft_GrSurfaceOrigin; } | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 48 | bool swapBuffers(const renderthread::Frame& frame, bool drew, const SkRect& screenDirty, | 
| John Reck | 1bcacfd | 2017-11-03 10:12:19 -0700 | [diff] [blame] | 49 | FrameInfo* currentFrameInfo, bool* requireSwap) override; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 50 | DeferredLayerUpdater* createTextureLayer() override; | 
| John Reck | 8ddbc59 | 2020-05-07 16:11:18 -0700 | [diff] [blame] | 51 | bool setSurface(ANativeWindow* surface, renderthread::SwapBehavior swapBehavior) override; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 52 | void onStop() override; | 
|  | 53 | bool isSurfaceReady() override; | 
|  | 54 | bool isContextReady() override; | 
|  | 55 |  | 
|  | 56 | static void invokeFunctor(const renderthread::RenderThread& thread, Functor* functor); | 
| John Reck | b90d4cb | 2018-04-19 17:05:35 -0700 | [diff] [blame] | 57 |  | 
| Derek Sollenberger | 5a5a648 | 2018-09-19 13:52:13 -0400 | [diff] [blame] | 58 | protected: | 
|  | 59 | void onContextDestroyed() override; | 
|  | 60 |  | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 61 | private: | 
|  | 62 | renderthread::EglManager& mEglManager; | 
|  | 63 | EGLSurface mEglSurface = EGL_NO_SURFACE; | 
| Derek Sollenberger | 289380f | 2022-08-30 14:24:22 -0400 | [diff] [blame] | 64 | sp<ANativeWindow> mNativeWindow; | 
|  | 65 | renderthread::SwapBehavior mSwapBehavior = renderthread::SwapBehavior::kSwap_discardBuffer; | 
| Stan Iliev | 500a0c3 | 2016-10-26 10:30:09 -0400 | [diff] [blame] | 66 | }; | 
|  | 67 |  | 
|  | 68 | } /* namespace skiapipeline */ | 
|  | 69 | } /* namespace uirenderer */ | 
|  | 70 | } /* namespace android */ |