Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions src.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ set(GLSL_EMBED_LIST
blur_fp.glsl
cameraEffects_fp.glsl
contrast_fp.glsl
fogGlobal_fp.glsl
fxaa_fp.glsl
fxaa3_11_fp.glsl
motionblur_fp.glsl
Expand All @@ -130,8 +129,8 @@ set(GLSL_EMBED_LIST
vertexSkinning_vp.glsl

# Regular shaders
fogQuake3_vp.glsl
fogQuake3_fp.glsl
fog_vp.glsl
fog_fp.glsl
generic_vp.glsl
generic_fp.glsl
heatHaze_vp.glsl
Expand Down
14 changes: 2 additions & 12 deletions src/engine/renderer/GeometryOptimiser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,6 @@ static int LeafSurfaceCompare( const void* a, const void* b ) {
return 1;
}

if ( aa->fogIndex < bb->fogIndex ) {
return -1;
} else if ( aa->fogIndex > bb->fogIndex ) {
return 1;
}

// sort by leaf
if ( aa->scratch2 < bb->scratch2 ) {
return -1;
Expand Down Expand Up @@ -168,7 +162,6 @@ void OptimiseMapGeometryCore( world_t* world, bspSurface_t** rendererSurfaces, i

shader_t* shader1 = surf1->shader;

int fogIndex1 = surf1->fogIndex;
int lightMapNum1 = surf1->lightmapNum;
surf1->viewCount = surf1 - world->surfaces;
surf1->scratch1 = j;
Expand All @@ -187,9 +180,8 @@ void OptimiseMapGeometryCore( world_t* world, bspSurface_t** rendererSurfaces, i
}

shader_t* shader2 = surf2->shader;
int fogIndex2 = surf2->fogIndex;
int lightMapNum2 = surf2->lightmapNum;
if ( shader1 != shader2 || fogIndex1 != fogIndex2 || lightMapNum1 != lightMapNum2 ) {
if ( shader1 != shader2 || lightMapNum1 != lightMapNum2 ) {
continue;
}

Expand Down Expand Up @@ -315,7 +307,6 @@ void MergeLeafSurfacesCore( world_t* world, bspSurface_t** rendererSurfaces, int
SphereFromBounds( vboSurf->bounds[0], vboSurf->bounds[1], vboSurf->origin, &vboSurf->radius );

mergedSurf->data = ( surfaceType_t* ) vboSurf;
mergedSurf->fogIndex = surf1->fogIndex;
mergedSurf->shader = surf1->shader;
mergedSurf->lightmapNum = surf1->lightmapNum;
mergedSurf->viewCount = -1;
Expand Down Expand Up @@ -557,7 +548,6 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial( world_t* world, bspSur
srf.skyBrush = surface->skyBrush;

srf.lightMapNum = surface->lightmapNum;
srf.fog = surface->fogIndex;
srf.portalNum = surface->portalNum;

srf.firstIndex = ( ( srfGeneric_t* ) surface->data )->firstIndex;
Expand All @@ -568,7 +558,7 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial( world_t* world, bspSur
VectorCopy( ( ( srfGeneric_t* ) surface->data )->origin, srf.origin );
srf.radius = ( ( srfGeneric_t* ) surface->data )->radius;

materialSystem.GenerateMaterial( &srf, world->globalFog );
materialSystem.GenerateMaterial( &srf );

static const float MAX_NORMAL_SURFACE_DISTANCE = 65536.0f * sqrtf( 2.0f );
if ( VectorLength( ( ( srfGeneric_t* ) surface->data )->bounds[0] ) > MAX_NORMAL_SURFACE_DISTANCE
Expand Down
1 change: 0 additions & 1 deletion src/engine/renderer/GeometryOptimiser.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ void MarkShaderBuildScreen( const shaderStage_t* pStage );
void MarkShaderBuildPortal( const shaderStage_t* pStage );
void MarkShaderBuildHeatHaze( const shaderStage_t* pStage );
void MarkShaderBuildLiquid( const shaderStage_t* pStage );
void MarkShaderBuildFog( const shaderStage_t* pStage );

void MarkShaderBuildIQM( const IQModel_t* model );
void MarkShaderBuildMDV( const mdvModel_t* model );
Expand Down
78 changes: 5 additions & 73 deletions src/engine/renderer/Material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,14 +334,6 @@ void UpdateSurfaceDataLiquid( uint32_t* materials, shaderStage_t* pStage, bool,
gl_liquidShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
}

void UpdateSurfaceDataFog( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
// shader_t* shader = pStage->shader;

materials += pStage->bufferOffset;

gl_fogQuake3ShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
}

/*
* Buffer layout:
* // Static surfaces data:
Expand Down Expand Up @@ -746,10 +738,10 @@ class ListMaterialsCmd : public Cmd::StaticCmd {
shaderSortName.at( materialPack.fromSort ), shaderSortName.at( materialPack.toSort ) );
for ( const Material& material : materialPack.materials ) {
Print( "id: %u, sync: %5s, stateBits: %10x, GLShader: %s, GLProgramID: %u,"
" deform: %i, fog: %i, drawCmdCount: %u",
" deform: %i, drawCmdCount: %u",
material.id, material.useSync, material.stateBits,
material.shader->_name, material.program,
material.deformIndex, material.fog, material.drawCommandCount );
material.deformIndex, material.drawCommandCount );
}
}
}
Expand All @@ -762,7 +754,6 @@ static std::string GetStageInfo( const shaderStage_t* pStage, const uint32_t dyn
{ BindShaderGeneric3D, "genericMaterial " },
{ BindShaderLightMapping, "lightMappingMaterial" },
{ BindShaderHeatHaze, "heatHazeMaterial " },
{ BindShaderFog, "fogQuake3Material " },
{ BindShaderLiquid, "liquidMaterial " },
{ BindShaderScreen, "screenMaterial " },
{ BindShaderSkybox, "skyboxMaterial " },
Expand Down Expand Up @@ -1090,42 +1081,6 @@ void BindShaderLiquid( Material* material ) {
gl_liquidShaderMaterial->SetUniform_PortalMapBindless( GL_BindToTMU( 1, tr.portalRenderImage ) );
}

void BindShaderFog( Material* material ) {
// Bind shader program.
gl_fogQuake3ShaderMaterial->SetDeform( material->deformIndex );
gl_fogQuake3ShaderMaterial->BindProgram();

// Set shader uniforms.
const fog_t* fog = tr.world->fogs + material->fog;

// rotate the gradient vector for this orientation
float eyeT;
vec4_t fogDepthVector;
if ( fog->hasSurface ) {
VectorCopy( fog->surface, fogDepthVector );
fogDepthVector[ 3 ] = -fog->surface[ 3 ];
eyeT = DotProduct( backEnd.viewParms.orientation.origin, fogDepthVector ) + fogDepthVector[ 3 ];
} else {
Vector4Set( fogDepthVector, 0, 0, 0, 1 );
eyeT = 1; // non-surface fog always has eye inside
}

// Note: things that seemingly should be per-shader or per-surface can be set as global uniforms
// since fognum is grouped with the GL state stuff, segregating each fognum in a separate draw call.

gl_fogQuake3ShaderMaterial->SetUniform_ViewOrigin( backEnd.viewParms.orientation.origin );
gl_fogQuake3ShaderMaterial->SetUniform_FogDensity( fog->tcScale );
gl_fogQuake3ShaderMaterial->SetUniform_FogDepthVector( fogDepthVector );
gl_fogQuake3ShaderMaterial->SetUniform_FogEyeT( eyeT );

gl_fogQuake3ShaderMaterial->SetUniform_ColorGlobal_Uint( fog->color );

gl_fogQuake3ShaderMaterial->SetUniform_ModelMatrix( backEnd.orientation.transformMatrix );
gl_fogQuake3ShaderMaterial->SetUniform_ModelViewProjectionMatrix( glState.modelViewProjectionMatrix[glState.stackIndex] );

gl_fogQuake3ShaderMaterial->SetUniform_Time( backEnd.refdef.floatTime - backEnd.currentEntity->e.shaderTime );
}

void ProcessMaterialNONE( Material*, shaderStage_t*, MaterialSurface* ) {
ASSERT_UNREACHABLE();
}
Expand Down Expand Up @@ -1263,15 +1218,6 @@ void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialS
material->program = gl_liquidShaderMaterial->GetProgram( materialSystem.buildOneShader );
}

void ProcessMaterialFog( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
material->shader = gl_fogQuake3ShaderMaterial;
material->fog = surface->fog;

gl_fogQuake3ShaderMaterial->SetDeform( pStage->deformIndex );

material->program = gl_fogQuake3ShaderMaterial->GetProgram( materialSystem.buildOneShader );
}

void MaterialSystem::AddStage( MaterialSurface* surface, shaderStage_t* pStage, uint32_t stage,
const bool mayUseVertexOverbright, const bool vertexLit, const bool fullbright ) {
const int variant = ( mayUseVertexOverbright ? ShaderStageVariant::VERTEX_OVERBRIGHT : 0 )
Expand Down Expand Up @@ -1495,7 +1441,7 @@ void MaterialSystem::ProcessStage( MaterialSurface* surface, shaderStage_t* pSta
/* This will only generate a material itself
A material represents a distinct global OpenGL state (e. g. blend function, depth test, depth write etc.)
Materials can have a dependency on other materials to make sure that consecutive stages are rendered in the proper order */
void MaterialSystem::GenerateMaterial( MaterialSurface* surface, int globalFog ) {
void MaterialSystem::GenerateMaterial( MaterialSurface* surface ) {
uint32_t stage = 0;
uint32_t previousMaterialID = 0;

Expand All @@ -1515,13 +1461,6 @@ void MaterialSystem::GenerateMaterial( MaterialSurface* surface, int globalFog )

surface->stages++;
}

if ( !surface->shader->noFog && surface->fog >= 1 && surface->fog != globalFog ) {
uint32_t unused;
ProcessStage( surface, surface->shader->fogShader->stages, surface->shader->fogShader, packIDs, stage, unused, true );

surface->stages++;
}
}

void MaterialSystem::SetWorldBounds( vec3_t bounds[2] ) {
Expand Down Expand Up @@ -1917,7 +1856,6 @@ bool MaterialSystem::AddPortalSurface( uint32_t viewID, PortalSurface* portalSur
{
drawSurf.bspSurface = portalSurfaces[portalSurface->drawSurfID].bspSurface;
drawSurf.entity = &tr.worldEntity;
drawSurf.fog = portalSurfaces[portalSurface->drawSurfID].fog;
drawSurf.portalNum = portalSurfaces[portalSurface->drawSurfID].portalNum;
drawSurf.shader = portalSurfaces[portalSurface->drawSurfID].shader;
drawSurf.surface = portalSurfaces[portalSurface->drawSurfID].surface;
Expand Down Expand Up @@ -1993,7 +1931,7 @@ void MaterialSystem::AddAutospriteSurfaces() {
for ( const bspSurface_t* surface : autospriteSurfaces )
{
R_AddDrawSurf( surface->data, surface->shader,
surface->lightmapNum, surface->fogIndex, true );
surface->lightmapNum, true );
}
}

Expand Down Expand Up @@ -2045,7 +1983,7 @@ void MaterialSystem::RenderMaterials( const shaderSort_t fromSort, const shaderS
}

tr.drawingSky = true;
Tess_Begin( Tess_StageIteratorSky, skyShader, false, -1, 0, false );
Tess_Begin( Tess_StageIteratorSky, skyShader, false, -1, false );
Tess_End();
}
}
Expand Down Expand Up @@ -2095,12 +2033,6 @@ void MaterialSystem::RenderMaterial( Material& material, const uint32_t viewID )
stateBits &= ~( GLS_SRCBLEND_BITS | GLS_DSTBLEND_BITS );
}

if( material.shaderBinder == BindShaderFog ) {
if ( r_noFog->integer || !r_wolfFog->integer || ( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) ) {
return;
}
}

backEnd.currentEntity = &tr.worldEntity;

GL_State( stateBits );
Expand Down
10 changes: 2 additions & 8 deletions src/engine/renderer/Material.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ struct MaterialSurface {
bool skyBrush;

int16_t lightMapNum;
int fog;
int portalNum = -1;

GLuint firstIndex;
Expand Down Expand Up @@ -148,15 +147,13 @@ struct Material {

bool usePolygonOffset = false;

int fog = 0;

uint32_t drawCommandCount = 0;
bool texturesResident = false;
std::vector<Texture*> textures;

bool operator==( const Material& other ) {
return program == other.program && stateBits == other.stateBits
&& fog == other.fog && cullType == other.cullType && usePolygonOffset == other.usePolygonOffset;
&& cullType == other.cullType && usePolygonOffset == other.usePolygonOffset;
}

void AddTexture( Texture* texture ) {
Expand Down Expand Up @@ -381,7 +378,7 @@ class MaterialSystem {
const bool mayUseVertexOverbright, const bool vertexLit, const bool fullbright );
void ProcessStage( MaterialSurface* surface, shaderStage_t* pStage, shader_t* shader, uint32_t* packIDs, uint32_t& stage,
uint32_t& previousMaterialID, bool skipStageSync = false );
void GenerateMaterial( MaterialSurface* surface, int globalFog );
void GenerateMaterial( MaterialSurface* surface );
void GenerateWorldMaterialsBuffer();
void GenerateWorldCommandBuffer( std::vector<MaterialSurface>& surfaces );
void GeneratePortalBoundingSpheres();
Expand Down Expand Up @@ -462,7 +459,6 @@ void UpdateSurfaceDataSkybox( uint32_t* materials, shaderStage_t* pStage, bool,
void UpdateSurfaceDataScreen( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool );
void UpdateSurfaceDataHeatHaze( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool );
void UpdateSurfaceDataLiquid( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool );
void UpdateSurfaceDataFog( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool );

void BindShaderNONE( Material* );
void BindShaderNOP( Material* );
Expand All @@ -473,7 +469,6 @@ void BindShaderSkybox( Material* material );
void BindShaderScreen( Material* material );
void BindShaderHeatHaze( Material* material );
void BindShaderLiquid( Material* material );
void BindShaderFog( Material* material );

void ProcessMaterialNONE( Material*, shaderStage_t*, MaterialSurface* );
void ProcessMaterialNOP( Material*, shaderStage_t*, MaterialSurface* );
Expand All @@ -484,6 +479,5 @@ void ProcessMaterialSkybox( Material* material, shaderStage_t* pStage, MaterialS
void ProcessMaterialScreen( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ );
void ProcessMaterialHeatHaze( Material* material, shaderStage_t* pStage, MaterialSurface* surface );
void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ );
void ProcessMaterialFog( Material* material, shaderStage_t* pStage, MaterialSurface* surface );

#endif // MATERIAL_H
14 changes: 13 additions & 1 deletion src/engine/renderer/VertexSpecification.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ enum
// GPU vertex animations
ATTR_INDEX_POSITION2,
ATTR_INDEX_QTANGENT2,

ATTR_INDEX_FOG_SURFACE,

// This occupies 5 attribute slots
ATTR_INDEX_FOG_PLANES_0,
ATTR_INDEX_FOG_PLANES_LAST = ATTR_INDEX_FOG_PLANES_0 + 4,

ATTR_INDEX_MAX
};

Expand All @@ -53,7 +60,9 @@ static const char* const attributeNames[] =
"attr_Color",
"attr_BoneFactors",
"attr_Position2",
"attr_QTangent2"
"attr_QTangent2",
"attr_FogSurface",
"attr_FogPlanes", nullptr, nullptr, nullptr, nullptr,
};

enum
Expand All @@ -69,6 +78,9 @@ enum
ATTR_POSITION2 = BIT( ATTR_INDEX_POSITION2 ),
ATTR_QTANGENT2 = BIT( ATTR_INDEX_QTANGENT2 ),

ATTR_FOG_SURFACE = BIT( ATTR_INDEX_FOG_SURFACE ),
ATTR_FOG_PLANES = BIT( ATTR_INDEX_FOG_PLANES_0 ) * ( BIT( 5 ) - 1 ),

ATTR_INTERP_BITS = ATTR_POSITION2 | ATTR_QTANGENT2,
};

Expand Down
Loading
Loading