Run Guest on Main Emulator Thread + Remove Mutex/GroupMutex + Introduce PresentationEngine

This commit is contained in:
◱ PixelyIon
2020-10-28 21:30:39 +05:30
committed by ◱ PixelyIon
parent 779884edcf
commit 3cde568c51
34 changed files with 380 additions and 418 deletions

View File

@ -0,0 +1,36 @@
// SPDX-License-Identifier: MPL-2.0
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
#pragma once
#include <kernel/types/KEvent.h>
#include "texture.h"
struct ANativeWindow;
namespace skyline::gpu {
class PresentationEngine {
private:
const DeviceState &state;
std::mutex windowMutex;
std::condition_variable windowConditional;
jobject surface; //!< The Surface object backing the ANativeWindow
u64 frameTimestamp{}; //!< The timestamp of the last frame being shown
public:
texture::Dimensions resolution{};
i32 format{};
std::shared_ptr<kernel::type::KEvent> vsyncEvent; //!< Signalled every time a frame is drawn
std::shared_ptr<kernel::type::KEvent> bufferEvent; //!< Signalled every time a buffer is freed
PresentationEngine(const DeviceState &state);
~PresentationEngine();
void UpdateSurface(jobject newSurface);
void Present(const std::shared_ptr<Texture>& texture);
ANativeWindow *window{};
};
}