17e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu/* 27e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * Copyright 2017 The Android Open Source Project 37e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * 47e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * Licensed under the Apache License, Version 2.0 (the "License"); 57e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * you may not use this file except in compliance with the License. 67e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * You may obtain a copy of the License at 77e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * 87e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * http://www.apache.org/licenses/LICENSE-2.0 97e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * 107e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * Unless required by applicable law or agreed to in writing, software 117e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * distributed under the License is distributed on an "AS IS" BASIS, 127e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * See the License for the specific language governing permissions and 147e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu * limitations under the License. 157e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu */ 167e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 177e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu#pragma once 187e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 197e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu#include <cstdint> 207e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 217e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu#include <EGL/egl.h> 227e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 237e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wustruct ANativeWindow; 247e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 257e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wunamespace android { 267e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wunamespace RE { 277e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 287e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wuclass Surface { 297e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wupublic: 30144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual ~Surface() = 0; 31144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 32144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual void setCritical(bool enable) = 0; 33144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual void setAsync(bool enable) = 0; 34144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 35144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual void setNativeWindow(ANativeWindow* window) = 0; 36144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual void swapBuffers() const = 0; 37144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 38144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryRedSize() const = 0; 39144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryGreenSize() const = 0; 40144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryBlueSize() const = 0; 41144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryAlphaSize() const = 0; 42144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 43144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryWidth() const = 0; 44144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique virtual int32_t queryHeight() const = 0; 45144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique}; 46144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 47144e116f45f196396f0d59d5fc09766ab618f885Lloyd Piquenamespace impl { 48144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 49144e116f45f196396f0d59d5fc09766ab618f885Lloyd Piqueclass RenderEngine; 50144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique 51144e116f45f196396f0d59d5fc09766ab618f885Lloyd Piqueclass Surface final : public RE::Surface { 52144e116f45f196396f0d59d5fc09766ab618f885Lloyd Piquepublic: 537e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu Surface(const RenderEngine& engine); 547e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu ~Surface(); 557e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 567e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu Surface(const Surface&) = delete; 577e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu Surface& operator=(const Surface&) = delete; 587e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 59144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique // RE::Surface implementation 60144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique void setCritical(bool enable) override { mCritical = enable; } 61144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique void setAsync(bool enable) override { mAsync = enable; } 627e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 63144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique void setNativeWindow(ANativeWindow* window) override; 64144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique void swapBuffers() const override; 657e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 66144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryRedSize() const override; 67144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryGreenSize() const override; 68144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryBlueSize() const override; 69144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryAlphaSize() const override; 707e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 71144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryWidth() const override; 72144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique int32_t queryHeight() const override; 737e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 747e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wuprivate: 757e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLint queryConfig(EGLint attrib) const; 767e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLint querySurface(EGLint attrib) const; 777e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 787e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu // methods internal to RenderEngine 79144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique friend class RenderEngine; 807e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu bool getAsync() const { return mAsync; } 817e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLSurface getEGLSurface() const { return mEGLSurface; } 827e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 837e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLDisplay mEGLDisplay; 847e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLConfig mEGLConfig; 857e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 867e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu bool mCritical = false; 877e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu bool mAsync = false; 887e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 897e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu ANativeWindow* mWindow = nullptr; 907e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu EGLSurface mEGLSurface = EGL_NO_SURFACE; 917e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu}; 927e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu 93144e116f45f196396f0d59d5fc09766ab618f885Lloyd Pique} // namespace impl 947e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu} // namespace RE 957e60ecc269aa83758b96b97d709b91b00dee1e13Chia-I Wu} // namespace android 96