Moved settings into separate public struct, read fullscreen arg for all platforms (Refs #268)
This commit is contained in:
parent
792d8347be
commit
06cd53e7b3
2 changed files with 33 additions and 30 deletions
|
|
@ -12,7 +12,7 @@ std::vector<const char*> VulkanExampleBase::args;
|
|||
|
||||
VkResult VulkanExampleBase::createInstance(bool enableValidation)
|
||||
{
|
||||
this->enableValidation = enableValidation;
|
||||
this->settings.validation = enableValidation;
|
||||
|
||||
VkApplicationInfo appInfo = {};
|
||||
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
|
||||
|
|
@ -39,14 +39,14 @@ VkResult VulkanExampleBase::createInstance(bool enableValidation)
|
|||
instanceCreateInfo.pApplicationInfo = &appInfo;
|
||||
if (enabledExtensions.size() > 0)
|
||||
{
|
||||
if (enableValidation)
|
||||
if (settings.validation)
|
||||
{
|
||||
enabledExtensions.push_back(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
|
||||
}
|
||||
instanceCreateInfo.enabledExtensionCount = (uint32_t)enabledExtensions.size();
|
||||
instanceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data();
|
||||
}
|
||||
if (enableValidation)
|
||||
if (settings.validation)
|
||||
{
|
||||
instanceCreateInfo.enabledLayerCount = vkDebug::validationLayerCount;
|
||||
instanceCreateInfo.ppEnabledLayerNames = vkDebug::validationLayerNames;
|
||||
|
|
@ -564,16 +564,22 @@ void VulkanExampleBase::submitFrame()
|
|||
|
||||
VulkanExampleBase::VulkanExampleBase(bool enableValidation)
|
||||
{
|
||||
settings.validation = enableValidation;
|
||||
|
||||
// Parse command line arguments
|
||||
for (size_t i = 0; i < args.size(); i++)
|
||||
{
|
||||
if (args[i] == std::string("-validation"))
|
||||
{
|
||||
this->enableValidation = true;
|
||||
settings.validation = true;
|
||||
}
|
||||
if (args[i] == std::string("-vsync"))
|
||||
{
|
||||
enableVSync = true;
|
||||
settings.vsync = true;
|
||||
}
|
||||
if (args[i] == std::string("-fullscreen"))
|
||||
{
|
||||
settings.fullscreen = true;
|
||||
}
|
||||
if ((args[i] == std::string("-w")) || (args[i] == std::string("-width")))
|
||||
{
|
||||
|
|
@ -601,7 +607,7 @@ VulkanExampleBase::VulkanExampleBase(bool enableValidation)
|
|||
#if defined(_WIN32)
|
||||
// Enable console if validation is active
|
||||
// Debug message callback will output to it
|
||||
if (this->enableValidation)
|
||||
if (this->settings.validation)
|
||||
{
|
||||
setupConsole("Vulkan validation output");
|
||||
}
|
||||
|
|
@ -651,7 +657,7 @@ VulkanExampleBase::~VulkanExampleBase()
|
|||
|
||||
delete vulkanDevice;
|
||||
|
||||
if (enableValidation)
|
||||
if (settings.validation)
|
||||
{
|
||||
vkDebug::freeDebugCallback(instance);
|
||||
}
|
||||
|
|
@ -675,7 +681,7 @@ void VulkanExampleBase::initVulkan()
|
|||
VkResult err;
|
||||
|
||||
// Vulkan instance
|
||||
err = createInstance(enableValidation);
|
||||
err = createInstance(settings.validation);
|
||||
if (err)
|
||||
{
|
||||
vkTools::exitFatal("Could not create Vulkan instance : \n" + vkTools::errorString(err), "Fatal error");
|
||||
|
|
@ -686,7 +692,7 @@ void VulkanExampleBase::initVulkan()
|
|||
#endif
|
||||
|
||||
// If requested, we enable the default validation layers for debugging
|
||||
if (enableValidation)
|
||||
if (settings.validation)
|
||||
{
|
||||
// The report flags determine what type of messages for the layers will be displayed
|
||||
// For validating (debugging) an appplication the error and warning bits should suffice
|
||||
|
|
@ -777,15 +783,6 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
{
|
||||
this->windowInstance = hinstance;
|
||||
|
||||
bool fullscreen = false;
|
||||
for (auto arg : args)
|
||||
{
|
||||
if (arg == std::string("-fullscreen"))
|
||||
{
|
||||
fullscreen = true;
|
||||
}
|
||||
}
|
||||
|
||||
WNDCLASSEX wndClass;
|
||||
|
||||
wndClass.cbSize = sizeof(WNDCLASSEX);
|
||||
|
|
@ -811,7 +808,7 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
int screenWidth = GetSystemMetrics(SM_CXSCREEN);
|
||||
int screenHeight = GetSystemMetrics(SM_CYSCREEN);
|
||||
|
||||
if (fullscreen)
|
||||
if (settings.fullscreen)
|
||||
{
|
||||
DEVMODE dmScreenSettings;
|
||||
memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
|
||||
|
|
@ -827,11 +824,11 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
{
|
||||
if (MessageBox(NULL, "Fullscreen Mode not supported!\n Switch to window mode?", "Error", MB_YESNO | MB_ICONEXCLAMATION) == IDYES)
|
||||
{
|
||||
fullscreen = FALSE;
|
||||
settings.fullscreen = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -841,7 +838,7 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
DWORD dwExStyle;
|
||||
DWORD dwStyle;
|
||||
|
||||
if (fullscreen)
|
||||
if (settings.fullscreen)
|
||||
{
|
||||
dwExStyle = WS_EX_APPWINDOW;
|
||||
dwStyle = WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
|
||||
|
|
@ -855,8 +852,8 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
RECT windowRect;
|
||||
windowRect.left = 0L;
|
||||
windowRect.top = 0L;
|
||||
windowRect.right = fullscreen ? (long)screenWidth : (long)width;
|
||||
windowRect.bottom = fullscreen ? (long)screenHeight : (long)height;
|
||||
windowRect.right = settings.fullscreen ? (long)screenWidth : (long)width;
|
||||
windowRect.bottom = settings.fullscreen ? (long)screenHeight : (long)height;
|
||||
|
||||
AdjustWindowRectEx(&windowRect, dwStyle, FALSE, dwExStyle);
|
||||
|
||||
|
|
@ -874,7 +871,7 @@ HWND VulkanExampleBase::setupWindow(HINSTANCE hinstance, WNDPROC wndproc)
|
|||
hinstance,
|
||||
NULL);
|
||||
|
||||
if (!fullscreen)
|
||||
if (!settings.fullscreen)
|
||||
{
|
||||
// Center on screen
|
||||
uint32_t x = (GetSystemMetrics(SM_CXSCREEN) - windowRect.right) / 2;
|
||||
|
|
@ -1584,5 +1581,5 @@ void VulkanExampleBase::initSwapchain()
|
|||
|
||||
void VulkanExampleBase::setupSwapChain()
|
||||
{
|
||||
swapChain.create(&width, &height, enableVSync);
|
||||
swapChain.create(&width, &height, settings.vsync);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,8 +48,6 @@
|
|||
class VulkanExampleBase
|
||||
{
|
||||
private:
|
||||
// Set to true if v-sync will be forced for the swapchain
|
||||
bool enableVSync = false;
|
||||
// fps timer (one second interval)
|
||||
float fpsTimer = 0.0f;
|
||||
// Get window title with example name, device, et.
|
||||
|
|
@ -63,8 +61,6 @@ private:
|
|||
// Called if the window is resized and some resources have to be recreatesd
|
||||
void windowResize();
|
||||
protected:
|
||||
// Is true when example is created validation layers enabled
|
||||
bool enableValidation = false;
|
||||
// Last frame time, measured using a high performance timer (if available)
|
||||
float frameTimer = 1.0f;
|
||||
// Frame counter to display fps
|
||||
|
|
@ -138,6 +134,16 @@ public:
|
|||
uint32_t width = 1280;
|
||||
uint32_t height = 720;
|
||||
|
||||
/** @brief Example settings that can be changed e.g. by command line arguments */
|
||||
struct Settings {
|
||||
/** @brief Activates validation layers (and message output) when set to true */
|
||||
bool validation = false;
|
||||
/** @brief Set to true if fullscreen mode has been requested via command line */
|
||||
bool fullscreen = false;
|
||||
/** @brief Set to true if v-sync will be forced for the swapchain */
|
||||
bool vsync = false;
|
||||
} settings;
|
||||
|
||||
VkClearColorValue defaultClearColor = { { 0.025f, 0.025f, 0.025f, 1.0f } };
|
||||
|
||||
float zoom = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue