mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-13 00:24:44 +00:00
Port ref_vk to SDL3.
* Makefile support for SDL3.
* Change API to match SDL3.
* Bump renderer API to version 7 and communicate SDL version to client.
61be37b183
This commit is contained in:
parent
4bd19bf982
commit
4fedab5914
3 changed files with 46 additions and 0 deletions
|
@ -31,6 +31,10 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
#include <SDL3/SDL.h>
|
||||||
|
#include <SDL3/SDL_vulkan.h>
|
||||||
|
#else
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <SDL_vulkan.h>
|
#include <SDL_vulkan.h>
|
||||||
|
@ -38,6 +42,7 @@
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_vulkan.h>
|
#include <SDL2/SDL_vulkan.h>
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "../../ref_shared.h"
|
#include "../../ref_shared.h"
|
||||||
|
|
|
@ -1680,7 +1680,11 @@ void QVk_SetWindow(SDL_Window *window)
|
||||||
*/
|
*/
|
||||||
void QVk_GetDrawableSize(int *width, int *height)
|
void QVk_GetDrawableSize(int *width, int *height)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
SDL_GetWindowSizeInPixels(vk_window, width, height);
|
||||||
|
#else
|
||||||
SDL_GL_GetDrawableSize(vk_window, width, height);
|
SDL_GL_GetDrawableSize(vk_window, width, height);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void QVk_WaitAndShutdownAll (void)
|
void QVk_WaitAndShutdownAll (void)
|
||||||
|
@ -1770,7 +1774,11 @@ qboolean QVk_Init(void)
|
||||||
vk_config.triangle_index_max_usage = 0;
|
vk_config.triangle_index_max_usage = 0;
|
||||||
vk_config.triangle_index_count = TRIANGLE_INDEX_CNT;
|
vk_config.triangle_index_count = TRIANGLE_INDEX_CNT;
|
||||||
|
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
if (!SDL_Vulkan_GetInstanceExtensions(&extCount))
|
||||||
|
#else
|
||||||
if (!SDL_Vulkan_GetInstanceExtensions(vk_window, &extCount, NULL))
|
if (!SDL_Vulkan_GetInstanceExtensions(vk_window, &extCount, NULL))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "%s() SDL_Vulkan_GetInstanceExtensions failed: %s",
|
R_Printf(PRINT_ALL, "%s() SDL_Vulkan_GetInstanceExtensions failed: %s",
|
||||||
__func__, SDL_GetError());
|
__func__, SDL_GetError());
|
||||||
|
@ -1785,6 +1793,14 @@ qboolean QVk_Init(void)
|
||||||
extCount++;
|
extCount++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
if ((wantedExtensions = (char **)SDL_Vulkan_GetInstanceExtensions(&extCount)) == NULL)
|
||||||
|
{
|
||||||
|
R_Printf(PRINT_ALL, "%s() SDL_Vulkan_GetInstanceExtensions failed: %s",
|
||||||
|
__func__, SDL_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#else
|
||||||
wantedExtensions = malloc(extCount * sizeof(char *));
|
wantedExtensions = malloc(extCount * sizeof(char *));
|
||||||
if (!SDL_Vulkan_GetInstanceExtensions(vk_window, &extCount, (const char **)wantedExtensions))
|
if (!SDL_Vulkan_GetInstanceExtensions(vk_window, &extCount, (const char **)wantedExtensions))
|
||||||
{
|
{
|
||||||
|
@ -1793,6 +1809,7 @@ qboolean QVk_Init(void)
|
||||||
free(wantedExtensions);
|
free(wantedExtensions);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// restore extensions count
|
// restore extensions count
|
||||||
if (r_validation->value > 0)
|
if (r_validation->value > 0)
|
||||||
|
@ -1908,7 +1925,9 @@ qboolean QVk_Init(void)
|
||||||
res = vkCreateInstance(&createInfo, NULL, &vk_instance);
|
res = vkCreateInstance(&createInfo, NULL, &vk_instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef USE_SDL3
|
||||||
free(wantedExtensions);
|
free(wantedExtensions);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (res != VK_SUCCESS)
|
if (res != VK_SUCCESS)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1575,7 +1575,11 @@ RE_InitContext(void *win)
|
||||||
#if SDL_VERSION_ATLEAST(2, 26, 0)
|
#if SDL_VERSION_ATLEAST(2, 26, 0)
|
||||||
// Figure out if we are high dpi aware.
|
// Figure out if we are high dpi aware.
|
||||||
int flags = SDL_GetWindowFlags(window);
|
int flags = SDL_GetWindowFlags(window);
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
RE_IsHighDPIaware = (flags & SDL_WINDOW_HIGH_PIXEL_DENSITY) ? true : false;
|
||||||
|
#else
|
||||||
RE_IsHighDPIaware = (flags & SDL_WINDOW_ALLOW_HIGHDPI) ? true : false;
|
RE_IsHighDPIaware = (flags & SDL_WINDOW_ALLOW_HIGHDPI) ? true : false;
|
||||||
|
#endif
|
||||||
if (RE_IsHighDPIaware)
|
if (RE_IsHighDPIaware)
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "%s() - HighDPI is enabled\n", __func__);
|
R_Printf(PRINT_ALL, "%s() - HighDPI is enabled\n", __func__);
|
||||||
|
@ -1595,7 +1599,11 @@ RE_InitContext(void *win)
|
||||||
|
|
||||||
qboolean Vkimp_CreateSurface(SDL_Window *window)
|
qboolean Vkimp_CreateSurface(SDL_Window *window)
|
||||||
{
|
{
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
if (!SDL_Vulkan_CreateSurface(window, vk_instance, NULL, &vk_surface))
|
||||||
|
#else
|
||||||
if (!SDL_Vulkan_CreateSurface(window, vk_instance, &vk_surface))
|
if (!SDL_Vulkan_CreateSurface(window, vk_instance, &vk_surface))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
R_Printf(PRINT_ALL, "%s() SDL_Vulkan_CreateSurface failed: %s",
|
R_Printf(PRINT_ALL, "%s() SDL_Vulkan_CreateSurface failed: %s",
|
||||||
__func__, SDL_GetError());
|
__func__, SDL_GetError());
|
||||||
|
@ -1667,7 +1675,12 @@ static int RE_PrepareForWindow(void)
|
||||||
R_Printf(PRINT_ALL, "%s() Loader import failed: %s", __func__, SDL_GetError());
|
R_Printf(PRINT_ALL, "%s() Loader import failed: %s", __func__, SDL_GetError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
volkInitializeCustom((void *)SDL_Vulkan_GetVkGetInstanceProcAddr());
|
||||||
|
#else
|
||||||
volkInitializeCustom(SDL_Vulkan_GetVkGetInstanceProcAddr());
|
volkInitializeCustom(SDL_Vulkan_GetVkGetInstanceProcAddr());
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
void *molten = dlopen("libMoltenVK.dylib", RTLD_LOCAL | RTLD_NOW);
|
void *molten = dlopen("libMoltenVK.dylib", RTLD_LOCAL | RTLD_NOW);
|
||||||
if (!molten)
|
if (!molten)
|
||||||
|
@ -1696,9 +1709,18 @@ GetRefAPI(refimport_t imp)
|
||||||
{
|
{
|
||||||
refexport_t refexport = {0};
|
refexport_t refexport = {0};
|
||||||
|
|
||||||
|
// Need to communicate the SDL major version to the client.
|
||||||
|
#ifdef USE_SDL3
|
||||||
|
SDL_Version ver;
|
||||||
|
#else
|
||||||
|
SDL_version ver;
|
||||||
|
#endif
|
||||||
|
SDL_VERSION(&ver);
|
||||||
|
|
||||||
ri = imp;
|
ri = imp;
|
||||||
|
|
||||||
refexport.api_version = API_VERSION;
|
refexport.api_version = API_VERSION;
|
||||||
|
refexport.framework_version = ver.major;
|
||||||
|
|
||||||
refexport.BeginRegistration = RE_BeginRegistration;
|
refexport.BeginRegistration = RE_BeginRegistration;
|
||||||
refexport.RegisterModel = RE_RegisterModel;
|
refexport.RegisterModel = RE_RegisterModel;
|
||||||
|
|
Loading…
Reference in a new issue