blob: 697f6952c94f91509899f6cdee4d9ec6c819343f [file] [log] [blame]
#pragma once
#include <GLES2/gl2.h>
#include <functional>
#include <future>
#include <memory>
#include <vector>
#include "Handle.h"
#include "render-utils/Renderer.h"
namespace gfxstream {
class ColorBuffer;
// Posting
enum class PostCmd {
Post = 0,
Viewport = 1,
Compose = 2,
Clear = 3,
Screenshot = 4,
Exit = 5,
Block = 6,
};
struct Post {
struct Block {
// schduledSignal will be set when the block task is scheduled.
std::promise<void> scheduledSignal;
// The block task won't stop until continueSignal is ready.
std::future<void> continueSignal;
};
using CompletionCallback =
std::function<void(std::shared_future<void> waitForGpu)>;
PostCmd cmd;
int composeVersion;
std::vector<char> composeBuffer;
std::unique_ptr<CompletionCallback> completionCallback = nullptr;
std::unique_ptr<Block> block = nullptr;
HandleType cbHandle = 0;
union {
ColorBuffer* cb;
struct {
int width;
int height;
} viewport;
struct {
ColorBuffer* cb;
int screenwidth;
int screenheight;
GLenum format;
GLenum type;
int rotation;
void* pixels;
Rect rect;
} screenshot;
};
};
} // namespace gfxstream