170 lines
3.8 KiB
C++
170 lines
3.8 KiB
C++
/* Copyright (c) 2019-2025, Arm Limited and Contributors
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 the "License";
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "debug_info.h"
|
|
#include "drawer.h"
|
|
#include "platform/configuration.h"
|
|
#include "platform/input_events.h"
|
|
#include "timer.h"
|
|
|
|
namespace vkb
|
|
{
|
|
class Window;
|
|
|
|
struct ApplicationOptions
|
|
{
|
|
bool benchmark_enabled{false};
|
|
Window *window{nullptr};
|
|
};
|
|
|
|
class Application
|
|
{
|
|
public:
|
|
Application();
|
|
|
|
virtual ~Application() = default;
|
|
|
|
/**
|
|
* @brief Prepares the application for execution
|
|
*/
|
|
virtual bool prepare(const ApplicationOptions &options);
|
|
|
|
/**
|
|
* @brief Updates the application
|
|
* @param delta_time The time since the last update
|
|
*/
|
|
virtual void update(float delta_time);
|
|
|
|
/**
|
|
* @brief Main loop sample overlay events
|
|
* @param delta_time The time taken since the last frame
|
|
* @param additional_ui Function that implements an additional Gui
|
|
*/
|
|
virtual void update_overlay(
|
|
float delta_time, const std::function<void()> &additional_ui = []() {});
|
|
|
|
/**
|
|
* @brief Handles cleaning up the application
|
|
*/
|
|
virtual void finish();
|
|
|
|
/**
|
|
* @brief Handles resizing of the window
|
|
* @param width New width of the window
|
|
* @param height New height of the window
|
|
*/
|
|
virtual bool resize(const uint32_t width, const uint32_t height);
|
|
|
|
/**
|
|
* @brief Handles input events of the window
|
|
* @param input_event The input event object
|
|
*/
|
|
virtual void input_event(const InputEvent &input_event);
|
|
|
|
/**
|
|
* @brief Returns the drawer object for the sample
|
|
*/
|
|
virtual Drawer *get_drawer();
|
|
|
|
const std::string &get_name() const;
|
|
|
|
void set_name(const std::string &name);
|
|
|
|
DebugInfo &get_debug_info();
|
|
|
|
inline bool should_close() const
|
|
{
|
|
return requested_close;
|
|
}
|
|
|
|
// request the app to close
|
|
// does not guarantee that the app will close immediately
|
|
inline void close()
|
|
{
|
|
requested_close = true;
|
|
}
|
|
|
|
/**
|
|
* @brief Set the shading language to be used for this sample (glsl, hlsl)
|
|
* @param language The shading language that the sample will use
|
|
*/
|
|
static void set_shading_language(const vkb::ShadingLanguage language);
|
|
|
|
/**
|
|
* @brief Returns the selected shading language to be used for this sample (glsl, hlsl)
|
|
*/
|
|
static vkb::ShadingLanguage get_shading_language();
|
|
|
|
/**
|
|
* @brief Returns the default folder for the currently selected shading language
|
|
*/
|
|
static std::string get_shader_folder();
|
|
|
|
protected:
|
|
float fps{0.0f};
|
|
|
|
float frame_time{0.0f}; // In ms
|
|
|
|
uint32_t frame_count{0};
|
|
|
|
uint32_t last_frame_count{0};
|
|
|
|
bool lock_simulation_speed{false};
|
|
|
|
Window *window{nullptr};
|
|
|
|
private:
|
|
std::string name{};
|
|
|
|
// The debug info of the app
|
|
DebugInfo debug_info{};
|
|
|
|
bool requested_close{false};
|
|
|
|
/** @brief Used to select between different shader languages, static so it can be changed from a plugin */
|
|
inline static vkb::ShadingLanguage shading_language{vkb::ShadingLanguage::GLSL};
|
|
};
|
|
|
|
inline void Application::set_shading_language(const vkb::ShadingLanguage language)
|
|
{
|
|
shading_language = language;
|
|
}
|
|
|
|
inline vkb::ShadingLanguage Application::get_shading_language()
|
|
{
|
|
return shading_language;
|
|
}
|
|
|
|
inline std::string Application::get_shader_folder()
|
|
{
|
|
switch (shading_language)
|
|
{
|
|
case ShadingLanguage::HLSL:
|
|
return "hlsl";
|
|
case ShadingLanguage::SLANG:
|
|
return "slang";
|
|
default:
|
|
return "glsl";
|
|
}
|
|
}
|
|
|
|
} // namespace vkb
|