blob: 801750a9a5fd8ee1cb5ba62557e60fad6d3929cc [file] [log] [blame]
// Copyright (C) 2022 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <EGL/egl.h>
#include <EGL/eglext.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#include <atomic>
#include <future>
#include "ColorBuffer.h"
#include "Display.h"
#include "Hwc2.h"
namespace gfxstream {
namespace gl {
class DisplayGl : public gfxstream::Display {
public:
DisplayGl(TextureDraw* textureDraw): mTextureDraw(textureDraw) {}
~DisplayGl() {}
struct PostLayer {
ColorBuffer* colorBuffer = nullptr;
std::optional<ComposeLayer> layerOptions;
// TODO: This should probably be removed and TextureDraw should
// only use drawLayer() but this is currently needed to support
// existing draw paths without depending on FrameBuffer directly.
struct OverlayOptions {
float rotation;
float dx;
float dy;
};
std::optional<OverlayOptions> overlayOptions;
};
// TODO(b/233939967): move to generic Display.
struct Post {
uint32_t frameWidth = 0;
uint32_t frameHeight = 0;
std::vector<PostLayer> layers;
};
std::shared_future<void> post(const Post& request);
void viewport(int width, int height);
void clear();
void exit();
void setupContext();
protected:
void bindToSurfaceImpl(gfxstream::DisplaySurface* surface) override {}
void surfaceUpdated(gfxstream::DisplaySurface* surface) override {}
void unbindFromSurfaceImpl() override {}
private:
int mViewportWidth = 0;
int mViewportHeight = 0;
TextureDraw* mTextureDraw = nullptr;
};
} // namespace gl
} // namespace gfxstream