From 947d41ea9599ce8ca17114414becd4bcc99cc25d Mon Sep 17 00:00:00 2001 From: Spoike Date: Tue, 12 Oct 2021 04:42:01 +0000 Subject: [PATCH] Make use of webgl2 where available. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@6081 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/Makefile | 3 +++ engine/client/r_surf.c | 10 +++++++++- engine/gl/gl_draw.c | 6 +++--- engine/gl/gl_vidcommon.c | 9 +++++---- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/engine/Makefile b/engine/Makefile index 0c33df8c5..d755ff830 100644 --- a/engine/Makefile +++ b/engine/Makefile @@ -1790,6 +1790,9 @@ ifeq ($(FTE_TARGET),web) # EMCC_CFLAGS+= -s BINARYEN_TRAP_MODE='clamp' #fix bigfloat->int rounding crashes EMCC_CFLAGS+= -s LEGACY_GL_EMULATION=0 #simplify the opengl wrappers. EMCC_CFLAGS+= -s NO_FILESYSTEM=1 #we have our own. + EMCC_CFLAGS+= -s FILESYSTEM=0 #we have our own. + EMCC_CFLAGS+= -s ALLOW_MEMORY_GROWTH=1 #reduce crashes... + EMCC_CFLAGS+= -s MAX_WEBGL_VERSION=2 #make use of what we can. EMCC_LDFLAGS+=-s ERROR_ON_UNDEFINED_SYMBOLS=1 #fairly obvious. no runtime errors please. RELEASE_CFLAGS=-DOMIT_QCC -DGL_STATIC $(EMCC_CFLAGS) DEBUG_CFLAGS=-g4 -DOMIT_QCC -DGL_STATIC $(EMCC_CFLAGS) diff --git a/engine/client/r_surf.c b/engine/client/r_surf.c index b86c7502d..bf2b4460a 100644 --- a/engine/client/r_surf.c +++ b/engine/client/r_surf.c @@ -4030,7 +4030,15 @@ uploadfmt_t Surf_NameToFormat(const char *nam) if (!Q_strcasecmp(nam, "argb1555")) return PTI_ARGB1555; if (!Q_strcasecmp(nam, "rgbx8") || !Q_strcasecmp(nam, "bgrx8") || !Q_strcasecmp(nam, "rgba8") || !Q_strcasecmp(nam, "bgra8")) - return PTI_BGRX8; //most common formats... + { //most common format(s) for lightmaps in various engines... + if (sh_config.texfmt[PTI_BGRX8]) + return PTI_BGRX8; //probably fastest + if (sh_config.texfmt[PTI_RGBX8]) + return PTI_RGBX8; //no bgr? odd... + if (sh_config.texfmt[PTI_BGRA8]) + return PTI_BGRA8; //no padded formats at all? erk! + return PTI_RGBA8; //probably the slowest for pc hardware. + } if (!Q_strcasecmp(nam, "rgb8") || !Q_strcasecmp(nam, "bgr8")) return PTI_RGB8; //generally not recommended (misaligned so the gpu has to compensate) if (!Q_strcasecmp(nam, "l8")) diff --git a/engine/gl/gl_draw.c b/engine/gl/gl_draw.c index 031c8ea54..a91951b59 100644 --- a/engine/gl/gl_draw.c +++ b/engine/gl/gl_draw.c @@ -159,8 +159,8 @@ void GL_SetupFormats(void) if (!gl_config.webgl_ie) { //these should work on all gles2+webgl1 devices, but microsoft doesn't give a shit. glfmtc(PTI_RGB565, (ver>=3)?GL_RGB565:0, GL_RGB, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, tc_rgb); -// glfmtc(PTI_RGBA4444,(ver>=3)?GL_RGBA4:0, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, tc_rgba8); -// glfmtc(PTI_RGBA5551,(ver>=3)?GL_RGB555A1:0, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, tc_rgba1); + glfmtc(PTI_RGBA4444,(ver>=3)?GL_RGBA4:0, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, tc_rgba8); + glfmtc(PTI_RGBA5551,(ver>=3)?GL_RGB5_A1:0, GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, tc_rgba1); } if (GL_CheckExtension("GL_OES_texture_half_float")) glfmt(PTI_RGBA16F, (ver>=3)?GL_RGBA16F:0, GL_RGBA, GL_RGBA, GL_HALF_FLOAT_OES); //not to be confused with GL_HALF_FLOAT[_ARB] which has a different value @@ -226,7 +226,7 @@ void GL_SetupFormats(void) glfmtc(PTI_BGRA8_SRGB, GL_SRGB8_ALPHA8_EXT,GL_SRGB_ALPHA_EXT, GL_BGRA_EXT, GL_UNSIGNED_BYTE, tc_srgba8); } } - else if (ver >= 3.3) + else if (ver >= 3.3 && !gl_config_gles) { glfmtsw(PTI_BGR8, GL_RGB8, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, 0, GL_BLUE, GL_GREEN, GL_RED, GL_ONE); glfmtsw(PTI_BGRX8, GL_RGB8, GL_RGB, GL_RGBA, GL_UNSIGNED_BYTE, tc_rgb, GL_BLUE, GL_GREEN, GL_RED, GL_ONE); diff --git a/engine/gl/gl_vidcommon.c b/engine/gl/gl_vidcommon.c index 56c69b875..790a0fcc2 100644 --- a/engine/gl/gl_vidcommon.c +++ b/engine/gl/gl_vidcommon.c @@ -1190,10 +1190,11 @@ static qboolean GL_CheckExtensions (void *(*getglfunction) (char *name)) if (gl_config.gles) { //gles has different TexImage2D arguments for specifying quality. - gl_config.arb_depth_texture = GL_CheckExtension("GL_OES_depth_texture"); //gles2 - gl_config.arb_depth_texture |= GL_CheckExtension("GL_CHROMIUM_depth_texture"); //nacl - gl_config.arb_depth_texture |= GL_CheckExtension("GL_WEBGL_depth_texture"); //webgl. duh. - gl_config.arb_depth_texture |= GL_CheckExtension("GL_ANGLE_depth_texture"); //gah. should just use wildcards huh (no uploads) + gl_config.arb_depth_texture = gl_config.glversion >= 3.0 + || GL_CheckExtension("GL_OES_depth_texture") //gles2 + || GL_CheckExtension("GL_CHROMIUM_depth_texture") //nacl + || GL_CheckExtension("GL_WEBGL_depth_texture") //webgl. duh. + || GL_CheckExtension("GL_ANGLE_depth_texture"); //gah. should just use wildcards huh (no uploads) gl_config.arb_shadow = gl_config.glversion>=3.0;//||GL_CheckExtension("GL_EXT_shadow_samplers"); } else