mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-06-02 03:18:47 +02:00
668f623256
An exceptional signal handler allows us to convert an OS signal into a C++ exception, this allows us to alleviate a lot of crashes that would otherwise occur from signals being thrown during execution of games and be able to handle them gracefully.
37 lines
1.1 KiB
C++
37 lines
1.1 KiB
C++
// 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{};
|
|
};
|
|
}
|