diff --git a/src/client/cl_main.c b/src/client/cl_main.c index 3e93c1bd8..610b325e2 100644 --- a/src/client/cl_main.c +++ b/src/client/cl_main.c @@ -879,9 +879,11 @@ cvar_t *vid_xpos; // X coordinate of window position cvar_t *vid_ypos; // Y coordinate of window position cvar_t *r_noborder; +#ifdef USE_OPENGL_API cvar_t *r_allowSoftwareGL; // don't abort out if the pixelformat claims software -cvar_t *r_swapInterval; cvar_t *r_glDriver; +#endif +cvar_t *r_swapInterval; cvar_t *r_displayRefresh; cvar_t *r_fullscreen; cvar_t *r_mode; @@ -4001,12 +4003,14 @@ static void CL_ToggleImgui_f( void ) static void CL_InitGLimp_Cvars( void ) { // shared with GLimp +#ifdef USE_OPENGL_API r_allowSoftwareGL = Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH ); - Cvar_SetDescription( r_allowSoftwareGL, "Legacy cvar (ignored). OpenGL renderer removed; Vulkan only." ); + Cvar_SetDescription( r_allowSoftwareGL, "Allow software OpenGL rendering if hardware acceleration is unavailable." ); + r_glDriver = Cvar_Get( "r_glDriver", OPENGL_DRIVER_NAME, CVAR_ARCHIVE_ND | CVAR_LATCH ); + Cvar_SetDescription( r_glDriver, "OpenGL driver library name (platform-specific)." ); +#endif r_swapInterval = Cvar_Get( "r_swapInterval", "0", CVAR_ARCHIVE_ND ); Cvar_SetDescription( r_swapInterval, "V-blanks to wait before swapping buffers.\n 0: No V-Sync\n 1: Synced to the monitor's refresh rate." ); - r_glDriver = Cvar_Get( "r_glDriver", OPENGL_DRIVER_NAME, CVAR_ARCHIVE_ND | CVAR_LATCH ); - Cvar_SetDescription( r_glDriver, "Legacy cvar (ignored). OpenGL renderer removed; Vulkan only." ); r_displayRefresh = Cvar_Get( "r_displayRefresh", "0", CVAR_LATCH ); Cvar_CheckRange( r_displayRefresh, "0", "500", CV_INTEGER ); diff --git a/src/client/client.h b/src/client/client.h index 52b13d6db..6ecfb58a9 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -428,9 +428,11 @@ extern cvar_t *vid_xpos; extern cvar_t *vid_ypos; extern cvar_t *r_noborder; +#ifdef USE_OPENGL_API extern cvar_t *r_allowSoftwareGL; -extern cvar_t *r_swapInterval; extern cvar_t *r_glDriver; +#endif +extern cvar_t *r_swapInterval; extern cvar_t *r_displayRefresh; extern cvar_t *r_fullscreen; diff --git a/src/platform/sdl/sdl_glimp.c b/src/platform/sdl/sdl_glimp.c index 2a79c8aae..9d317c9ac 100644 --- a/src/platform/sdl/sdl_glimp.c +++ b/src/platform/sdl/sdl_glimp.c @@ -412,6 +412,7 @@ static int GLW_SetMode( int mode, const char *modeFS, qboolean fullscreen, qbool else perChannelColorBits = 4; +#ifdef USE_OPENGL_API #ifdef USE_VULKAN_API if ( !vulkan ) #endif @@ -450,6 +451,7 @@ static int GLW_SetMode( int mode, const char *modeFS, qboolean fullscreen, qbool if ( !r_allowSoftwareGL->integer ) SDL_GL_SetAttribute( SDL_GL_ACCELERATED_VISUAL, 1 ); } +#endif /* USE_OPENGL_API */ if ( ( SDL_window = SDL_CreateWindow( cl_title, x, y, config->vidWidth, config->vidHeight, flags ) ) == NULL ) { @@ -692,8 +694,6 @@ void GLimp_Init( glconfig_t *config ) in_nograb = Cvar_Get( "in_nograb", "0", 0 ); Cvar_SetDescription( in_nograb, "Do not capture mouse in game, may be useful during online streaming." ); - r_allowSoftwareGL = Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH ); - r_swapInterval = Cvar_Get( "r_swapInterval", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_stereoEnabled = Cvar_Get( "r_stereoEnabled", "0", CVAR_ARCHIVE | CVAR_LATCH ); Cvar_SetDescription( r_stereoEnabled, "Enable stereo rendering for techniques like shutter glasses." ); diff --git a/src/renderers/vulkan/tr_animation.c b/src/renderers/vulkan/tr_animation.c index 74aa8a49b..864d915aa 100644 --- a/src/renderers/vulkan/tr_animation.c +++ b/src/renderers/vulkan/tr_animation.c @@ -411,9 +411,6 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface ) tempVert[1] += w->boneWeight * ( DotProduct( bone->matrix[1], w->offset ) + bone->matrix[1][3] ); tempVert[2] += w->boneWeight * ( DotProduct( bone->matrix[2], w->offset ) + bone->matrix[2][3] ); -#ifdef USE_TESS_NEEDS_NORMAL - if ( tess.needsNormal ) -#endif { tempNormal[0] += w->boneWeight * DotProduct( bone->matrix[0], v->normal ); tempNormal[1] += w->boneWeight * DotProduct( bone->matrix[1], v->normal ); @@ -425,9 +422,6 @@ void RB_MDRSurfaceAnim( mdrSurface_t *surface ) tess.xyz[baseVertex + j][1] = tempVert[1]; tess.xyz[baseVertex + j][2] = tempVert[2]; -#ifdef USE_TESS_NEEDS_NORMAL - if ( tess.needsNormal ) -#endif { tess.normal[baseVertex + j][0] = tempNormal[0]; tess.normal[baseVertex + j][1] = tempNormal[1]; diff --git a/src/renderers/vulkan/tr_local.h b/src/renderers/vulkan/tr_local.h index 8d41478a6..79f328a9e 100644 --- a/src/renderers/vulkan/tr_local.h +++ b/src/renderers/vulkan/tr_local.h @@ -42,13 +42,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #define MAX_TEXTURE_SIZE 32768 -#ifdef USE_VBO -#define USE_VBO_GRID /* put SF_GRID to VBO */ -#endif - -//#define USE_TESS_NEEDS_NORMAL -//#define USE_TESS_NEEDS_ST2 - #define SH_COEFF_COUNT 9 #include "../../qcommon/q_shared.h" @@ -546,11 +539,6 @@ typedef struct shader_s { fogPass_t fogPass; // draw a blended pass, possibly with depth test equals - qboolean needsNormal; // not all shaders will need all data to be gathered - //qboolean needsST1; - qboolean needsST2; - //qboolean needsColor; - int numDeforms; deformStage_t deforms[MAX_SHADER_DEFORMS]; @@ -2047,9 +2035,7 @@ image_t *vk_create_pbr_albedo_srgb( const char *albedoMapName, imgFlags_t flags // // tr_surface.c // -#ifdef USE_VBO_GRID -void RB_SurfaceGridEstimate( srfGridMesh_t *cv, int *numVertexes, int *numIndexes ); -#endif +void RB_SurfaceGridEstimate( srfGridMesh_t *cv, int *numVertexes, int *numIndexes ); /* ==================================================================== @@ -2114,14 +2100,6 @@ typedef struct shaderCommands_s #endif #endif - // info extracted from current shader -#ifdef USE_TESS_NEEDS_NORMAL - int needsNormal; -#endif -#ifdef USE_TESS_NEEDS_ST2 - int needsST2; -#endif - int numPasses; shaderStage_t **xstages; diff --git a/src/renderers/vulkan/tr_main.c b/src/renderers/vulkan/tr_main.c index 5f1eef047..9909ca406 100644 --- a/src/renderers/vulkan/tr_main.c +++ b/src/renderers/vulkan/tr_main.c @@ -1078,9 +1078,6 @@ static qboolean SurfIsOffscreen( const drawSurf_t *drawSurf, qboolean *isMirror RB_BeginSurface( shader, fogNum ); #ifdef USE_VBO tess.allowVBO = qfalse; -#endif -#ifdef USE_TESS_NEEDS_NORMAL - tess.needsNormal = qtrue; #endif rb_surfaceTable[ *drawSurf->surface ]( drawSurf->surface ); diff --git a/src/renderers/vulkan/tr_shade.c b/src/renderers/vulkan/tr_shade.c index c05d28240..555634705 100644 --- a/src/renderers/vulkan/tr_shade.c +++ b/src/renderers/vulkan/tr_shade.c @@ -390,17 +390,6 @@ void RB_BeginSurface( shader_t *shader, int fogNum ) { tess.dlightUpdateParams = qtrue; } -#ifdef USE_TESS_NEEDS_NORMAL - tess.needsNormal = state->needsNormal || tess.dlightPass || r_shownormals->integer || - ( backEnd.currentEntity == &tr.worldEntity && - ( ( r_shDebugView && r_shDebugView->integer ) || - ( r_shWorldLighting && r_shWorldLighting->integer && r_shLighting && r_shLighting->integer ) ) ); -#endif - -#ifdef USE_TESS_NEEDS_ST2 - tess.needsST2 = state->needsST2; -#endif - tess.numIndexes = 0; tess.numVertexes = 0; tess.sdfUiEdge = -1.0f; diff --git a/src/renderers/vulkan/tr_shader.c b/src/renderers/vulkan/tr_shader.c index 126c92b3e..9d9f17fbc 100644 --- a/src/renderers/vulkan/tr_shader.c +++ b/src/renderers/vulkan/tr_shader.c @@ -3888,64 +3888,6 @@ static void InitShader( const char *name, int lightmapIndex ) { } -static void DetectNeeds( void ) -{ - int i, n; - - for ( i = 0; i < MAX_SHADER_STAGES; i++ ) - { - if ( !stages[i].active ) - break; - - for ( n = 0; n < NUM_TEXTURE_BUNDLES; n++ ) { - const texCoordGen_t t = stages[i].bundle[n].tcGen; - if ( t == TCGEN_LIGHTMAP ) - { - shader.needsST2 = qtrue; - } - if ( t == TCGEN_ENVIRONMENT_MAPPED || t == TCGEN_ENVIRONMENT_MAPPED_FP ) - { - shader.needsNormal = qtrue; - } - if ( stages[i].bundle[n].alphaGen == AGEN_LIGHTING_SPECULAR || stages[i].bundle[n].rgbGen == CGEN_LIGHTING_DIFFUSE ) - { - shader.needsNormal = qtrue; - } - } -#if 0 - t1 = stages[i].bundle[0].tcGen; - t2 = stages[i].bundle[1].tcGen; - - if ( t1 == TCGEN_LIGHTMAP || t2 == TCGEN_LIGHTMAP ) - { - shader.needsST2 = qtrue; - } - if ( t1 == TCGEN_ENVIRONMENT_MAPPED || t1 == TCGEN_ENVIRONMENT_MAPPED_FP ) - { - shader.needsNormal = qtrue; - } - if ( t2 == TCGEN_ENVIRONMENT_MAPPED || t2 == TCGEN_ENVIRONMENT_MAPPED_FP ) - { - shader.needsNormal = qtrue; - } - if ( stages[i].bundle[0].alphaGen == AGEN_LIGHTING_SPECULAR || stages[i].bundle[0].rgbGen == CGEN_LIGHTING_DIFFUSE ) - { - shader.needsNormal = qtrue; - } -#endif - } - for ( i = 0; i < shader.numDeforms; i++ ) - { - if ( shader.deforms[i].deformation == DEFORM_WAVE || shader.deforms[i].deformation == DEFORM_NORMALS || shader.deforms[i].deformation == DEFORM_BULGE ) { - shader.needsNormal = qtrue; - } - if ( shader.deforms[i].deformation >= DEFORM_TEXT0 && shader.deforms[i].deformation <= DEFORM_TEXT7 ) { - shader.needsNormal = qtrue; - } - } -} - - /* ========================= FinishShader @@ -4104,8 +4046,6 @@ static shader_t *FinishShader( void ) { } } - DetectNeeds(); - // fix alphaGen flags to avoid redundant comparisons in R_ComputeColors() for ( i = 0; i < MAX_SHADER_STAGES; i++ ) { shaderStage_t *pStage = &stages[ i ]; @@ -4844,10 +4784,6 @@ shader_t *R_FindShader( const char *name, int lightmapIndex, qboolean mipRawImag InitShader( strippedName, lightmapIndex ); - /* needsNormal etc. could be set based on stage requirements. */ - //shader.needsST1 = qtrue; - //shader.needsST2 = qtrue; - //shader.needsColor = qtrue; // // attempt to define shader from an explicit parameter file @@ -4933,10 +4869,6 @@ qhandle_t RE_RegisterShaderFromImage(const char *name, int lightmapIndex, image_ InitShader( name, lightmapIndex ); - /* needsNormal etc. could be set based on stage requirements. */ - //shader.needsST1 = qtrue; - //shader.needsST2 = qtrue; - //shader.needsColor = qtrue; // // create the default shading commands diff --git a/src/renderers/vulkan/tr_surface.c b/src/renderers/vulkan/tr_surface.c index 18a8aacab..d38a6d9ea 100644 --- a/src/renderers/vulkan/tr_surface.c +++ b/src/renderers/vulkan/tr_surface.c @@ -405,9 +405,6 @@ static void RB_SurfaceTriangles( const srfTriangles_t *srf ) { xyz[1] = dv->xyz[1]; xyz[2] = dv->xyz[2]; -#ifdef USE_TESS_NEEDS_NORMAL - if ( tess.needsNormal ) -#endif { normal[0] = dv->normal[0]; normal[1] = dv->normal[1]; @@ -433,9 +430,6 @@ static void RB_SurfaceTriangles( const srfTriangles_t *srf ) { texCoords0[0] = dv->st[0]; texCoords0[1] = dv->st[1]; -#ifdef USE_TESS_NEEDS_ST2 - if ( tess.needsST2 ) -#endif { texCoords1[0] = dv->lightmap[0]; texCoords1[1] = dv->lightmap[1]; @@ -988,9 +982,6 @@ static void RB_SurfaceFace( const srfSurfaceFace_t *surf ) { numPoints = surf->numPoints; -#ifdef USE_TESS_NEEDS_NORMAL - if ( tess.needsNormal ) -#endif { if ( surf->normals ) { // per-vertex normals for non-coplanar faces @@ -1017,9 +1008,6 @@ static void RB_SurfaceFace( const srfSurfaceFace_t *surf ) { #ifdef USE_VK_PBR tess.texCoords[0][ndx][0] = v[6]; tess.texCoords[0][ndx][1] = v[7]; -#ifdef USE_TESS_NEEDS_ST2 - if ( tess.needsST2 ) -#endif { tess.texCoords[1][ndx][0] = v[8]; tess.texCoords[1][ndx][1] = v[9]; @@ -1032,9 +1020,6 @@ static void RB_SurfaceFace( const srfSurfaceFace_t *surf ) { #else tess.texCoords[0][ndx][0] = v[3]; tess.texCoords[0][ndx][1] = v[4]; -#ifdef USE_TESS_NEEDS_ST2 - if ( tess.needsST2 ) -#endif { tess.texCoords[1][ndx][0] = v[5]; tess.texCoords[1][ndx][1] = v[6]; @@ -1083,7 +1068,6 @@ static float LodErrorForVolume( vec3_t local, float radius ) { return r_lodCurveError->value / d; } -#ifdef USE_VBO_GRID void RB_SurfaceGridEstimate( srfGridMesh_t *cv, int *numVertexes, int *numIndexes ) { int lodWidth, lodHeight; @@ -1147,7 +1131,6 @@ void RB_SurfaceGridEstimate( srfGridMesh_t *cv, int *numVertexes, int *numIndexe tess.numVertexes = 0; tess.numIndexes = 0; } -#endif // USE_VBO_GRID /* ============= @@ -1178,7 +1161,6 @@ static void RB_SurfaceGrid( srfGridMesh_t *cv ) { int dlightBits; int *vDlightBits; -#ifdef USE_VBO_GRID if ( tess.allowVBO && cv->vboItemIndex && !cv->dlightBits ) { // transition to vbo render list if ( tess.vboIndex == 0 ) { @@ -1196,23 +1178,16 @@ static void RB_SurfaceGrid( srfGridMesh_t *cv ) { } VBO_Flush(); -#else -#ifdef USE_VBO - VBO_Flush(); -#endif -#endif dlightBits = cv->dlightBits; tess.dlightBits |= dlightBits; -#ifdef USE_VBO_GRID tess.surfType = SF_GRID; // determine the allowable discrepance if ( cv->vboItemIndex && ( tr.mapLoading || ( tess.dlightPass && tess.shader->isStaticShader ) ) ) lodError = r_lodCurveError->value; // fixed quality for VBO else -#endif // USE_VBO_GRID lodError = LodErrorForVolume( cv->lodOrigin, cv->lodRadius ); // determine which rows and columns of the subdivision @@ -1253,13 +1228,11 @@ static void RB_SurfaceGrid( srfGridMesh_t *cv ) { if ( vrows < 2 || irows < 1 ) { if ( tr.mapLoading ) { // estimate and flush -#ifdef USE_VBO_GRID if ( cv->vboItemIndex ) { VBO_PushData( cv->vboItemIndex, &tess ); tess.numIndexes = 0; tess.numVertexes = 0; } else -#endif // USE_VBO_GRID ri.Error( ERR_DROP, "Unexpected grid flush during map loading!\n" ); } else { RB_EndSurface(); @@ -1300,17 +1273,11 @@ static void RB_SurfaceGrid( srfGridMesh_t *cv ) { xyz[2] = dv->xyz[2]; texCoords0[0] = dv->st[0]; texCoords0[1] = dv->st[1]; -#ifdef USE_TESS_NEEDS_ST2 - if ( tess.needsST2 ) -#endif { texCoords1[0] = dv->lightmap[0]; texCoords1[1] = dv->lightmap[1]; texCoords1 += 2; } -#ifdef USE_TESS_NEEDS_NORMAL - if ( tess.needsNormal ) -#endif { normal[0] = dv->normal[0]; normal[1] = dv->normal[1]; diff --git a/src/renderers/vulkan/vk_vbo.c b/src/renderers/vulkan/vk_vbo.c index 021b58639..b0704d31e 100644 --- a/src/renderers/vulkan/vk_vbo.c +++ b/src/renderers/vulkan/vk_vbo.c @@ -594,9 +594,7 @@ void R_BuildWorldVBO( msurface_t *surf, int surfCount ) msurface_t **surfList; srfSurfaceFace_t *face; srfTriangles_t *tris; -#ifdef USE_VBO_GRID srfGridMesh_t *grid; -#endif msurface_t *sf; int ibo_size; int vbo_size; @@ -650,7 +648,6 @@ void R_BuildWorldVBO( msurface_t *surf, int surfCount ) sf->shader->numIndexes += tris->numIndexes; continue; } -#ifdef USE_VBO_GRID grid = (srfGridMesh_t *) sf->data; if ( grid->surfaceType == SF_GRID && isStaticShader( sf->shader ) ) { grid->vboItemIndex = ++numStaticSurfaces; @@ -667,7 +664,6 @@ void R_BuildWorldVBO( msurface_t *surf, int surfCount ) sf->shader->numIndexes += grid->vboExpectIndices; continue; } -#endif // USE_VBO_GRID } if ( numStaticSurfaces == 0 ) { ri.Printf( PRINT_ALL, "...no static surfaces for VBO\n" ); @@ -721,13 +717,11 @@ void R_BuildWorldVBO( msurface_t *surf, int surfCount ) surfList[ n++ ] = sf; continue; } -#ifdef USE_VBO_GRID grid = (srfGridMesh_t *) sf->data; if ( grid->surfaceType == SF_GRID && grid->vboItemIndex ) { surfList[ n++ ] = sf; continue; } -#endif // USE_VBO_GRID } if ( n != numStaticSurfaces ) { @@ -748,41 +742,29 @@ void R_BuildWorldVBO( msurface_t *surf, int surfCount ) sf = surfList[ i ]; face = (srfSurfaceFace_t *) sf->data; tris = (srfTriangles_t *) sf->data; -#ifdef USE_VBO_GRID grid = (srfGridMesh_t *) sf->data; -#endif if ( face->surfaceType == SF_FACE ) face->vboItemIndex = i + 1; else if (tris->surfaceType == SF_TRIANGLES) { tris->vboItemIndex = i + 1; -#ifdef USE_VBO_GRID } else if (grid->surfaceType == SF_GRID) { grid->vboItemIndex = i + 1; -#endif } else { ri.Error( ERR_DROP, "Unexpected surface type" ); } initItem( vbo->items + i + 1 ); RB_BeginSurface( sf->shader, 0 ); tess.allowVBO = qfalse; // block execution of VBO path as we need to tesselate geometry -#ifdef USE_TESS_NEEDS_NORMAL - tess.needsNormal = qtrue; -#endif -#ifdef USE_TESS_NEEDS_ST2 - tess.needsST2 = qtrue; -#endif // tesselate rb_surfaceTable[ *sf->data ]( sf->data ); // VBO_PushData() may be called multiple times there // setup colors and texture coordinates VBO_PushData( i + 1, &tess ); -#ifdef USE_VBO_GRID if ( grid->surfaceType == SF_GRID ) { vbo_item_t *vi = vbo->items + i + 1; if ( vi->num_vertexes != grid->vboExpectVertices || vi->num_indexes != grid->vboExpectIndices ) { ri.Error( ERR_DROP, "Unexpected grid vertexes/indexes count" ); } } -#endif // USE_VBO_GRID tess.numIndexes = 0; tess.numVertexes = 0; }