Add basic input system
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user