#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 |