mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
hwr2: Restore legacy OpenGL temporarily
This commit is contained in:
parent
b932607359
commit
fcb4dfe3d7
3 changed files with 223 additions and 27 deletions
|
|
@ -11,6 +11,9 @@
|
||||||
#include "hwr2/pass_imgui.hpp"
|
#include "hwr2/pass_imgui.hpp"
|
||||||
#include "hwr2/pass_software.hpp"
|
#include "hwr2/pass_software.hpp"
|
||||||
|
|
||||||
|
// KILL THIS WHEN WE KILL OLD OGL SUPPORT PLEASE
|
||||||
|
#include "sdl/ogl_sdl.h"
|
||||||
|
|
||||||
using namespace srb2;
|
using namespace srb2;
|
||||||
using namespace srb2::hwr2;
|
using namespace srb2::hwr2;
|
||||||
using namespace srb2::rhi;
|
using namespace srb2::rhi;
|
||||||
|
|
@ -32,6 +35,14 @@ void I_FinishUpdate(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
OglSdlFinishUpdate(cv_vidwait.value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO move this to srb2loop
|
// TODO move this to srb2loop
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
io.DisplaySize.x = vid.realwidth;
|
io.DisplaySize.x = vid.realwidth;
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,13 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen, SDL_bool
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
OglSdlSurface(vid.width, vid.height);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_GetWindowSize(window, &width, &height);
|
SDL_GetWindowSize(window, &width, &height);
|
||||||
vid.realwidth = static_cast<uint32_t>(width);
|
vid.realwidth = static_cast<uint32_t>(width);
|
||||||
vid.realheight = static_cast<uint32_t>(height);
|
vid.realheight = static_cast<uint32_t>(height);
|
||||||
|
|
@ -1256,6 +1263,12 @@ void I_UpdateNoBlit(void)
|
||||||
return;
|
return;
|
||||||
if (exposevideo)
|
if (exposevideo)
|
||||||
{
|
{
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
OglSdlFinishUpdate(cv_vidwait.value);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
exposevideo = SDL_FALSE;
|
exposevideo = SDL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
@ -1452,28 +1465,8 @@ void VID_PrepareModeList(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static SDL_bool Impl_CreateContext(void)
|
static void init_imgui()
|
||||||
{
|
{
|
||||||
// RHI always uses OpenGL 3.2 Core (for now)
|
|
||||||
if (!sdlglcontext)
|
|
||||||
{
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
|
||||||
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
|
||||||
sdlglcontext = SDL_GL_CreateContext(window);
|
|
||||||
}
|
|
||||||
if (sdlglcontext == NULL)
|
|
||||||
{
|
|
||||||
SDL_DestroyWindow(window);
|
|
||||||
I_Error("Failed to create a GL context: %s\n", SDL_GetError());
|
|
||||||
}
|
|
||||||
SDL_GL_MakeCurrent(window, sdlglcontext);
|
|
||||||
|
|
||||||
std::unique_ptr<rhi::SdlGlCorePlatform> platform = std::make_unique<rhi::SdlGlCorePlatform>();
|
|
||||||
platform->window = window;
|
|
||||||
g_rhi = std::make_unique<rhi::GlCoreRhi>(std::move(platform), reinterpret_cast<rhi::GlLoadFunc>(SDL_GL_GetProcAddress));
|
|
||||||
g_rhi_generation += 1;
|
|
||||||
|
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
ImGuiIO& io = ImGui::GetIO(); (void)io;
|
||||||
io.IniFilename = NULL;
|
io.IniFilename = NULL;
|
||||||
|
|
@ -1487,6 +1480,46 @@ static SDL_bool Impl_CreateContext(void)
|
||||||
io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
|
io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
|
||||||
}
|
}
|
||||||
ImGui::StyleColorsDark();
|
ImGui::StyleColorsDark();
|
||||||
|
}
|
||||||
|
|
||||||
|
static SDL_bool Impl_CreateContext(void)
|
||||||
|
{
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
if (!sdlglcontext)
|
||||||
|
sdlglcontext = SDL_GL_CreateContext(window);
|
||||||
|
if (sdlglcontext == NULL)
|
||||||
|
{
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
I_Error("Failed to create a GL context: %s\n", SDL_GetError());
|
||||||
|
}
|
||||||
|
init_imgui();
|
||||||
|
SDL_GL_MakeCurrent(window, sdlglcontext);
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// RHI always uses OpenGL 3.2 Core (for now)
|
||||||
|
if (!sdlglcontext)
|
||||||
|
{
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
|
||||||
|
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
|
||||||
|
sdlglcontext = SDL_GL_CreateContext(window);
|
||||||
|
}
|
||||||
|
if (sdlglcontext == NULL)
|
||||||
|
{
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
I_Error("Failed to create a GL context: %s\n", SDL_GetError());
|
||||||
|
}
|
||||||
|
init_imgui();
|
||||||
|
SDL_GL_MakeCurrent(window, sdlglcontext);
|
||||||
|
|
||||||
|
std::unique_ptr<rhi::SdlGlCorePlatform> platform = std::make_unique<rhi::SdlGlCorePlatform>();
|
||||||
|
platform->window = window;
|
||||||
|
g_rhi = std::make_unique<rhi::GlCoreRhi>(std::move(platform), reinterpret_cast<rhi::GlLoadFunc>(SDL_GL_GetProcAddress));
|
||||||
|
g_rhi_generation += 1;
|
||||||
|
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
@ -1514,6 +1547,9 @@ boolean VID_CheckRenderer(void)
|
||||||
{
|
{
|
||||||
boolean rendererchanged = false;
|
boolean rendererchanged = false;
|
||||||
boolean contextcreated = false;
|
boolean contextcreated = false;
|
||||||
|
#ifdef HWRENDER
|
||||||
|
rendermode_t oldrenderer = rendermode;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (dedicated)
|
if (dedicated)
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -1523,6 +1559,39 @@ boolean VID_CheckRenderer(void)
|
||||||
rendermode = static_cast<rendermode_t>(setrenderneeded);
|
rendermode = static_cast<rendermode_t>(setrenderneeded);
|
||||||
rendererchanged = true;
|
rendererchanged = true;
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
VID_CheckGLLoaded(oldrenderer);
|
||||||
|
|
||||||
|
// Initialise OpenGL before calling SDLSetMode!!!
|
||||||
|
// This is because SDLSetMode calls OglSdlSurface.
|
||||||
|
if (vid.glstate == VID_GL_LIBRARY_NOTLOADED)
|
||||||
|
{
|
||||||
|
VID_StartupOpenGL();
|
||||||
|
|
||||||
|
// Loaded successfully!
|
||||||
|
if (vid.glstate == VID_GL_LIBRARY_LOADED)
|
||||||
|
{
|
||||||
|
// Destroy the current window, if it exists.
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
SDL_DestroyWindow(window);
|
||||||
|
window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new window.
|
||||||
|
Impl_CreateWindow(static_cast<SDL_bool>(USE_FULLSCREEN));
|
||||||
|
|
||||||
|
// From there, the OpenGL context was already created.
|
||||||
|
contextcreated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (vid.glstate == VID_GL_LIBRARY_ERROR)
|
||||||
|
rendererchanged = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!contextcreated)
|
if (!contextcreated)
|
||||||
Impl_CreateContext();
|
Impl_CreateContext();
|
||||||
|
|
||||||
|
|
@ -1536,6 +1605,13 @@ boolean VID_CheckRenderer(void)
|
||||||
{
|
{
|
||||||
SCR_SetDrawFuncs();
|
SCR_SetDrawFuncs();
|
||||||
}
|
}
|
||||||
|
#ifdef HWRENDER
|
||||||
|
else if (rendermode == render_opengl && rendererchanged)
|
||||||
|
{
|
||||||
|
HWR_Switch();
|
||||||
|
V_SetPalette(0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return rendererchanged;
|
return rendererchanged;
|
||||||
}
|
}
|
||||||
|
|
@ -1664,14 +1740,63 @@ void I_StartupGraphics(void)
|
||||||
|
|
||||||
keyboard_started = true;
|
keyboard_started = true;
|
||||||
|
|
||||||
// TEMPORARY OVERRIDES FOR RHI - SOFTWARE ONLY
|
#if !defined(HAVE_TTF)
|
||||||
|
// Previously audio was init here for questionable reasons?
|
||||||
|
if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0)
|
||||||
|
{
|
||||||
|
CONS_Printf(M_GetText("Couldn't initialize SDL's Video System: %s\n"), SDL_GetError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Renderer choices
|
||||||
|
// Takes priority over the config.
|
||||||
|
if (M_CheckParm("-renderer"))
|
||||||
|
{
|
||||||
|
INT32 i = 0;
|
||||||
|
CV_PossibleValue_t *renderer_list = cv_renderer_t;
|
||||||
|
const char *modeparm = M_GetNextParm();
|
||||||
|
while (renderer_list[i].strvalue)
|
||||||
|
{
|
||||||
|
if (!stricmp(modeparm, renderer_list[i].strvalue))
|
||||||
|
{
|
||||||
|
chosenrendermode = static_cast<rendermode_t>(renderer_list[i].value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Choose Software renderer
|
||||||
|
else if (M_CheckParm("-software"))
|
||||||
chosenrendermode = render_soft;
|
chosenrendermode = render_soft;
|
||||||
rendermode = render_soft;
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
// Choose OpenGL renderer
|
||||||
|
else if (M_CheckParm("-opengl"))
|
||||||
|
chosenrendermode = render_opengl;
|
||||||
|
|
||||||
|
// Don't startup OpenGL
|
||||||
|
if (M_CheckParm("-nogl"))
|
||||||
|
{
|
||||||
|
vid.glstate = VID_GL_LIBRARY_ERROR;
|
||||||
|
if (chosenrendermode == render_opengl)
|
||||||
|
chosenrendermode = render_none;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (chosenrendermode != render_none)
|
||||||
|
rendermode = chosenrendermode;
|
||||||
|
|
||||||
borderlesswindow = M_CheckParm("-borderless") ? SDL_TRUE : SDL_FALSE;
|
borderlesswindow = M_CheckParm("-borderless") ? SDL_TRUE : SDL_FALSE;
|
||||||
|
|
||||||
VID_Command_ModeList_f();
|
VID_Command_ModeList_f();
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
VID_StartupOpenGL();
|
||||||
|
#endif
|
||||||
|
|
||||||
VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT));
|
VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT));
|
||||||
|
|
||||||
vid.width = BASEVIDWIDTH; // Default size for startup
|
vid.width = BASEVIDWIDTH; // Default size for startup
|
||||||
|
|
@ -1701,10 +1826,60 @@ void I_StartupGraphics(void)
|
||||||
|
|
||||||
void VID_StartupOpenGL(void)
|
void VID_StartupOpenGL(void)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, "VID_StartupOpenGL called (no longer going to use)");
|
#ifdef HWRENDER
|
||||||
|
static boolean glstartup = false;
|
||||||
|
if (!glstartup)
|
||||||
|
{
|
||||||
|
CONS_Printf("VID_StartupOpenGL()...\n");
|
||||||
|
*(void**)&HWD.pfnInit = hwSym("Init",NULL);
|
||||||
|
*(void**)&HWD.pfnFinishUpdate = NULL;
|
||||||
|
*(void**)&HWD.pfnDraw2DLine = hwSym("Draw2DLine",NULL);
|
||||||
|
*(void**)&HWD.pfnDrawPolygon = hwSym("DrawPolygon",NULL);
|
||||||
|
*(void**)&HWD.pfnDrawIndexedTriangles = hwSym("DrawIndexedTriangles",NULL);
|
||||||
|
*(void**)&HWD.pfnRenderSkyDome = hwSym("RenderSkyDome",NULL);
|
||||||
|
*(void**)&HWD.pfnSetBlend = hwSym("SetBlend",NULL);
|
||||||
|
*(void**)&HWD.pfnClearBuffer = hwSym("ClearBuffer",NULL);
|
||||||
|
*(void**)&HWD.pfnSetTexture = hwSym("SetTexture",NULL);
|
||||||
|
*(void**)&HWD.pfnUpdateTexture = hwSym("UpdateTexture",NULL);
|
||||||
|
*(void**)&HWD.pfnDeleteTexture = hwSym("DeleteTexture",NULL);
|
||||||
|
*(void**)&HWD.pfnReadRect = hwSym("ReadRect",NULL);
|
||||||
|
*(void**)&HWD.pfnGClipRect = hwSym("GClipRect",NULL);
|
||||||
|
*(void**)&HWD.pfnClearMipMapCache = hwSym("ClearMipMapCache",NULL);
|
||||||
|
*(void**)&HWD.pfnSetSpecialState = hwSym("SetSpecialState",NULL);
|
||||||
|
*(void**)&HWD.pfnSetPalette = hwSym("SetPalette",NULL);
|
||||||
|
*(void**)&HWD.pfnGetTextureUsed = hwSym("GetTextureUsed",NULL);
|
||||||
|
*(void**)&HWD.pfnDrawModel = hwSym("DrawModel",NULL);
|
||||||
|
*(void**)&HWD.pfnCreateModelVBOs = hwSym("CreateModelVBOs",NULL);
|
||||||
|
*(void**)&HWD.pfnSetTransform = hwSym("SetTransform",NULL);
|
||||||
|
*(void**)&HWD.pfnPostImgRedraw = hwSym("PostImgRedraw",NULL);
|
||||||
|
*(void**)&HWD.pfnFlushScreenTextures=hwSym("FlushScreenTextures",NULL);
|
||||||
|
*(void**)&HWD.pfnStartScreenWipe = hwSym("StartScreenWipe",NULL);
|
||||||
|
*(void**)&HWD.pfnEndScreenWipe = hwSym("EndScreenWipe",NULL);
|
||||||
|
*(void**)&HWD.pfnDoScreenWipe = hwSym("DoScreenWipe",NULL);
|
||||||
|
*(void**)&HWD.pfnDrawIntermissionBG=hwSym("DrawIntermissionBG",NULL);
|
||||||
|
*(void**)&HWD.pfnMakeScreenTexture= hwSym("MakeScreenTexture",NULL);
|
||||||
|
*(void**)&HWD.pfnMakeScreenFinalTexture=hwSym("MakeScreenFinalTexture",NULL);
|
||||||
|
*(void**)&HWD.pfnDrawScreenFinalTexture=hwSym("DrawScreenFinalTexture",NULL);
|
||||||
|
|
||||||
|
*(void**)&HWD.pfnCompileShaders = hwSym("CompileShaders",NULL);
|
||||||
|
*(void**)&HWD.pfnCleanShaders = hwSym("CleanShaders",NULL);
|
||||||
|
*(void**)&HWD.pfnSetShader = hwSym("SetShader",NULL);
|
||||||
|
*(void**)&HWD.pfnUnSetShader = hwSym("UnSetShader",NULL);
|
||||||
|
|
||||||
|
*(void**)&HWD.pfnSetShaderInfo = hwSym("SetShaderInfo",NULL);
|
||||||
|
*(void**)&HWD.pfnLoadCustomShader = hwSym("LoadCustomShader",NULL);
|
||||||
|
|
||||||
|
vid.glstate = HWD.pfnInit() ? VID_GL_LIBRARY_LOADED : VID_GL_LIBRARY_ERROR; // let load the OpenGL library
|
||||||
|
|
||||||
|
if (vid.glstate == VID_GL_LIBRARY_ERROR)
|
||||||
|
{
|
||||||
rendermode = render_soft;
|
rendermode = render_soft;
|
||||||
setrenderneeded = 0;
|
setrenderneeded = 0;
|
||||||
}
|
}
|
||||||
|
glstartup = true;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void I_ShutdownGraphics(void)
|
void I_ShutdownGraphics(void)
|
||||||
{
|
{
|
||||||
|
|
@ -1721,6 +1896,14 @@ void I_ShutdownGraphics(void)
|
||||||
}
|
}
|
||||||
graphics_started = false;
|
graphics_started = false;
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (GLUhandle)
|
||||||
|
hwClose(GLUhandle);
|
||||||
|
if (sdlglcontext)
|
||||||
|
{
|
||||||
|
SDL_GL_DeleteContext(sdlglcontext);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
SDL_QuitSubSystem(SDL_INIT_VIDEO);
|
||||||
framebuffer = SDL_FALSE;
|
framebuffer = SDL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef __SDL_OGL_SDL_H__
|
#ifndef __SDL_OGL_SDL_H__
|
||||||
#define __SDL_OGL_SDL_H__
|
#define __SDL_OGL_SDL_H__
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
#include "../v_video.h"
|
#include "../v_video.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue