Add basic input system

This commit is contained in:
2020-05-16 00:56:22 +02:00
parent 3e3cbad9c4
commit fc529b0694
29 changed files with 1926 additions and 493 deletions

View File

@@ -15,11 +15,12 @@
namespace openVulkanoCpp
{
/**
* \brief A simple GraphicsAppManager. It can only handle on window.
* \brief A simple GraphicsAppManager. It can only handle one window.
*/
class GraphicsAppManager : virtual public IGraphicsAppManager, virtual public IWindowHandler
class GraphicsAppManager final : virtual public IGraphicsAppManager, virtual public IWindowHandler
{
private:
IPlatform* platform;
IWindow* window;
IGraphicsApp* app;
IRenderer* renderer;
@@ -27,7 +28,7 @@ namespace openVulkanoCpp
bool paused = false, running = false;
float fpsTimer = 0, avgFps = 0, avgFrameTime = 0;
uint64_t frameCount = 0, lastFrameCount = 0;
Timer* frameTimer;
Timer frameTimer;
std::string windowTitleFormat;
public:
@@ -37,22 +38,21 @@ namespace openVulkanoCpp
Logger::SetupLogger();
if (!app)
{
const auto msg = "The app must not be null!";
constexpr auto msg = "The app must not be null!";
Logger::MANAGER->error(msg);
throw std::runtime_error(msg);
}
window = PlatformProducer::CreateBestWindow(renderApi);
platform = PlatformProducer::CreatePlatform(renderApi);
window = platform->MakeWindow();
renderer = PlatformProducer::CreateRenderManager(renderApi);
app->SetGraphicsAppManager(this);
window->SetWindowHandler(this);
frameTimer = new Timer();
}
~GraphicsAppManager() override
{
delete renderer;
delete window;
delete frameTimer;
delete platform;
}
public: // Getter
@@ -91,14 +91,14 @@ namespace openVulkanoCpp
void Pause() override
{
paused = true;
frameTimer->Stop();
frameTimer.Stop();
Logger::MANAGER->info("Graphics application paused");
}
void Resume() override
{
paused = false;
frameTimer->Start();
frameTimer.Start();
Logger::MANAGER->info("Graphics application resumed");
}
@@ -107,7 +107,7 @@ namespace openVulkanoCpp
{
running = true;
StartUp();
frameTimer->Reset();
frameTimer.Reset();
Loop(); // Runs the rendering loop
ShutDown();
}
@@ -119,9 +119,10 @@ namespace openVulkanoCpp
{
Logger::MANAGER->info("Initializing ...");
app->Init();
platform->Init();
window->Init(renderApi);
//TODO restore window settings if there are any set
renderer->Init((IGraphicsAppManager*)this, window);
renderer->Init(static_cast<IGraphicsAppManager*>(this), window);
windowTitleFormat = app->GetAppName() + " " + app->GetAppVersion() + " - " + renderer->GetMainRenderDeviceName() + " - {:.1f} fps ({:.1f} ms)";
Logger::MANAGER->info("Initialized");
}
@@ -139,7 +140,7 @@ namespace openVulkanoCpp
{
while (running)
{
window->Tick();
platform->Tick();
if (paused)
{ // The rendering is paused
// No need to burn cpu time if the app is paused
@@ -149,7 +150,7 @@ namespace openVulkanoCpp
{
app->Tick();
renderer->Tick();
frameTimer->Tick();
frameTimer.Tick();
UpdateFps();
}
}
@@ -160,6 +161,7 @@ namespace openVulkanoCpp
Logger::MANAGER->info("Shutting down ...");
renderer->Close();
window->Close();
platform->Close();
app->Close();
Logger::MANAGER->info("Shutdown complete");
}
@@ -167,7 +169,7 @@ namespace openVulkanoCpp
void UpdateFps()
{
frameCount++;
fpsTimer += frameTimer->GetTickSeconds();
fpsTimer += frameTimer.GetTickSeconds();
if(fpsTimer > 1.0f)
{