- Added menu option to switch between light buffer Can be selected UBO or SSBO, the default is UBO, SSBO is recommended for the Quest 2 to prevent crash with some mods. From my test UBO is faster by ~5fps.

This commit is contained in:
Emanuele Disco 2021-07-11 10:08:52 +09:00
parent 440c189939
commit 71543d81cd
6 changed files with 23 additions and 2 deletions

View file

@ -25,6 +25,8 @@
**
**/
#include "version.h"
#include "gl/system/gl_system.h"
#include "gl/shaders/gl_shader.h"
#include "gl/dynlights/gl_lightbuffer.h"
@ -35,6 +37,10 @@
static const int ELEMENTS_PER_LIGHT = 4; // each light needs 4 vec4's.
static const int ELEMENT_SIZE = (4*sizeof(float));
CUSTOM_CVAR (Int, gl_light_buffer_type, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{
Printf("You must restart " GAMENAME " to switch the light buffer\n");
}
FLightBuffer::FLightBuffer()
{

View file

@ -442,7 +442,10 @@ bool FShader::Load(const char * name, const char * vert_prog_lump, const char *
unsigned int lightbuffertype = GLRenderer->mLights->GetBufferType();
unsigned int lightbuffersize = GLRenderer->mLights->GetBlockSize();
#ifdef __MOBILE__
vp_comb.Format(ES_VERSION_STR"\n#define SHADER_STORAGE_LIGHTS\n");
if (gl_light_buffer_type == 0)
vp_comb.Format(ES_VERSION_STR"\n#define NUM_UBO_LIGHTS %d\n", lightbuffersize);
else
vp_comb.Format(ES_VERSION_STR"\n#define SHADER_STORAGE_LIGHTS\n");
#else
if (lightbuffertype == GL_UNIFORM_BUFFER)
{

View file

@ -29,6 +29,7 @@ EXTERN_CVAR (Bool, gl_light_sprites);
EXTERN_CVAR (Bool, gl_light_particles);
EXTERN_CVAR (Bool, gl_light_shadowmap);
EXTERN_CVAR (Int, gl_shadowmap_quality);
EXTERN_CVAR (Int, gl_light_buffer_type);
EXTERN_CVAR(Int, gl_fogmode)
EXTERN_CVAR(Int, gl_lightmode)

View file

@ -212,7 +212,8 @@ void gl_LoadExtensions()
gl.glslversion = 3.3;
gl.flags |= RFL_NO_CLIP_PLANES;
gl.flags |= RFL_UINT_IDX;
gl.flags |= RFL_SHADER_STORAGE_BUFFER;
if (gl_light_buffer_type == 1)
gl.flags |= RFL_SHADER_STORAGE_BUFFER;
}
#else

View file

@ -2762,6 +2762,7 @@ GLLIGHTMNU_LIGHTPARTICLES = "Lights affect particles";
GLLIGHTMNU_LIGHTSHADOWMAP = "Light shadowmaps";
GLLIGHTMNU_LIGHTSHADOWMAPQUALITY = "Shadowmap quality";
GLLIGHTMNU_LIGHTSHADOWMAPFILTER = "Shadowmap filter";
GLLIGHTMNU_LIGHTBUFFERTYPE = "Light buffer type";
// OpenGL Preferences
GLPREFMNU_TITLE = "OPENGL PREFERENCES";
@ -2882,6 +2883,8 @@ OPTVAL_CLASSICZ = "Classic ZDoom";
OPTVAL_MODERN = "Modern (WASD)";
OPTVAL_MODERN2 = "Modern (ESDF)";
OPTVAL_MODERN3 = "Modern (OKL;)";
OPTVAL_UBO = "UBO (faster, unstable)";
OPTVAL_SSBO = "SSBO (slower)";
// QZDoom exclusive:

View file

@ -2588,6 +2588,12 @@ OptionValue "FogMode"
2, "$OPTVAL_RADIAL"
}
OptionValue "LightBuffer"
{
0, "$OPTVAL_UBO"
1, "$OPTVAL_SSBO"
}
OptionValue "FuzzStyle"
{
0, "$OPTVAL_SHADOW"
@ -2669,6 +2675,7 @@ OptionMenu "GLLightOptions" protected
Option "$GLLIGHTMNU_LIGHTSPRITES", gl_light_sprites, "YesNo"
Option "$GLLIGHTMNU_LIGHTPARTICLES", gl_light_particles, "YesNo"
Option "$GLLIGHTMNU_LIGHTSHADOWMAP", gl_light_shadowmap, "YesNo"
Option "$GLLIGHTMNU_LIGHTBUFFERTYPE", gl_light_buffer_type, "LightBuffer"
Option "$GLLIGHTMNU_LIGHTSHADOWMAPQUALITY", gl_shadowmap_quality, "ShadowMapQuality"
Option "$GLLIGHTMNU_LIGHTSHADOWMAPFILTER", gl_shadowmap_filter, "ShadowMapFilter"
}