2021-06-25 21:10:10 -04:00
|
|
|
#include "GSH_VulkanAndroid.h"
|
2021-06-28 16:37:00 -04:00
|
|
|
#include <android/native_window.h>
|
|
|
|
#include "vulkan/StructDefs.h"
|
2021-06-25 21:10:10 -04:00
|
|
|
|
|
|
|
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
|
|
|
|
2021-09-01 17:27:02 -04:00
|
|
|
CreateSurface();
|
2021-06-25 21:10:10 -04:00
|
|
|
CGSH_Vulkan::InitializeImpl();
|
2021-09-01 17:27:02 -04:00
|
|
|
UpdateViewport();
|
|
|
|
}
|
2021-06-28 16:37:00 -04:00
|
|
|
|
2021-09-01 17:27:02 -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
|
|
|
|
2021-09-01 17:27:02 -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
|
|
|
}
|
2021-09-01 17:27:02 -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);
|
2021-06-25 21:10:10 -04:00
|
|
|
}
|
|
|
|
|
2021-09-01 17:27:02 -04:00
|
|
|
void CGSH_VulkanAndroid::UpdateViewport()
|
2021-06-25 21:10:10 -04:00
|
|
|
{
|
2021-09-01 17:27:02 -04:00
|
|
|
PRESENTATION_PARAMS presentationParams;
|
|
|
|
presentationParams.mode = PRESENTATION_MODE_FIT;
|
|
|
|
presentationParams.windowWidth = ANativeWindow_getWidth(m_window);
|
|
|
|
presentationParams.windowHeight = ANativeWindow_getHeight(m_window);
|
|
|
|
|
|
|
|
SetPresentationParams(presentationParams);
|
2021-06-25 21:10:10 -04:00
|
|
|
}
|