move some options from swap chain to engine configuration and fix not working VSync
This commit is contained in:
@@ -81,10 +81,13 @@ namespace OpenVulkano::Vulkan
|
||||
{ preTransform = vk::SurfaceTransformFlagBitsKHR::eIdentity; }
|
||||
else { preTransform = surfaceCapabilities.currentTransform; }
|
||||
|
||||
uint32_t usingImages = std::max(preferredImageCount, surfaceCapabilities.minImageCount);
|
||||
EngineConfiguration* config = EngineConfiguration::GetEngineConfiguration();
|
||||
uint32_t usingImages = std::max(config->GetPrefferedSwapChainImageCount(), surfaceCapabilities.minImageCount);
|
||||
if (surfaceCapabilities.maxImageCount > 0) //GPU has limit of swap chain images
|
||||
usingImages = std::min(usingImages, surfaceCapabilities.maxImageCount);
|
||||
Logger::RENDER->debug("GPU supports {0} to {1} swap chain images. Preferred: {2}, Using: {3}", surfaceCapabilities.minImageCount, surfaceCapabilities.maxImageCount, preferredImageCount, usingImages);
|
||||
Logger::RENDER->debug("GPU supports {0} to {1} swap chain images. Preferred: {2}, Using: {3}",
|
||||
surfaceCapabilities.minImageCount, surfaceCapabilities.maxImageCount,
|
||||
config->GetPrefferedSwapChainImageCount(), usingImages);
|
||||
|
||||
const vk::SwapchainCreateInfoKHR createInfo({}, surface, usingImages, surfaceFormat.format,
|
||||
surfaceFormat.colorSpace, size, 1,
|
||||
@@ -151,6 +154,9 @@ namespace OpenVulkano::Vulkan
|
||||
vk::PresentModeKHR SwapChain::ChosePresentMode()
|
||||
{
|
||||
std::vector<vk::PresentModeKHR> presentModes = device->physicalDevice.getSurfacePresentModesKHR(surface);
|
||||
EngineConfiguration* config = EngineConfiguration::GetEngineConfiguration();
|
||||
const bool useVSync = config->GetVSync();
|
||||
const int32_t fpsCap = config->GetFpsCap();
|
||||
#ifdef DEBUG
|
||||
std::string availableModes = "";
|
||||
for (const auto& presentMode : presentModes)
|
||||
@@ -158,12 +164,13 @@ namespace OpenVulkano::Vulkan
|
||||
if (availableModes.length() > 0) availableModes += ", ";
|
||||
availableModes += vk::to_string(presentMode);
|
||||
}
|
||||
Logger::RENDER->debug("Available swap chain present modes {0}. Searching best mode for: vsync={1}", availableModes, useVsync);
|
||||
Logger::RENDER->debug("Available swap chain present modes {0}. Searching best mode for: vsync={1}", availableModes, useVSync);
|
||||
#endif
|
||||
vk::PresentModeKHR mode = vk::PresentModeKHR::eFifo;
|
||||
if (useVsync)
|
||||
if (useVSync)
|
||||
{
|
||||
if (Utils::Contains(presentModes, vk::PresentModeKHR::eMailbox)) mode = vk::PresentModeKHR::eMailbox;
|
||||
if (fpsCap != 0 && Utils::Contains(presentModes, vk::PresentModeKHR::eMailbox))
|
||||
mode = vk::PresentModeKHR::eMailbox;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user