Play-/Source/ui_android/GSH_VulkanAndroid.cpp

63 lines
1.5 KiB
C++
Raw Normal View History

#include "GSH_VulkanAndroid.h"
2021-06-28 16:37:00 -04:00
#include <android/native_window.h>
#include "vulkan/StructDefs.h"
CGSH_VulkanAndroid::CGSH_VulkanAndroid(ANativeWindow* window)
: m_window(window)
{
//We'll probably need to keep 'window' as a Global JNI object
}
CGSHandler::FactoryFunction CGSH_VulkanAndroid::GetFactoryFunction(ANativeWindow* window)
{
return [window]() { return new CGSH_VulkanAndroid(window); };
}
void CGSH_VulkanAndroid::InitializeImpl()
{
2021-06-27 11:24:49 -04:00
m_instance = CreateInstance(true);
2021-06-28 16:37:00 -04:00
CreateSurface();
CGSH_Vulkan::InitializeImpl();
UpdateViewport();
}
2021-06-28 16:37:00 -04:00
void CGSH_VulkanAndroid::PresentBackbuffer()
{
}
void CGSH_VulkanAndroid::SetWindow(ANativeWindow* window)
{
m_window = window;
SendGSCall(
[this]() {
CreateSurface();
UpdateViewport();
},
true);
}
2021-06-28 16:37:00 -04:00
void CGSH_VulkanAndroid::CreateSurface()
{
if(m_context->surface != VK_NULL_HANDLE)
{
m_instance.vkDestroySurfaceKHR(m_instance, m_context->surface, nullptr);
m_context->surface = VK_NULL_HANDLE;
2021-06-28 16:37:00 -04:00
}
auto surfaceCreateInfo = Framework::Vulkan::AndroidSurfaceCreateInfoKHR();
surfaceCreateInfo.window = m_window;
auto result = m_instance.vkCreateAndroidSurfaceKHR(m_instance, &surfaceCreateInfo, nullptr, &m_context->surface);
CHECKVULKANERROR(result);
}
void CGSH_VulkanAndroid::UpdateViewport()
{
PRESENTATION_PARAMS presentationParams;
presentationParams.mode = PRESENTATION_MODE_FIT;
presentationParams.windowWidth = ANativeWindow_getWidth(m_window);
presentationParams.windowHeight = ANativeWindow_getHeight(m_window);
SetPresentationParams(presentationParams);
}