Skip to content

Commit e3528ce

Browse files
committed
Merge master into for-0.56.0/sync
2 parents 2a60ffa + e101fed commit e3528ce

19 files changed

+428
-160
lines changed

azure-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ jobs:
6464
6565
- job: Linux
6666
pool:
67-
vmImage: 'ubuntu-20.04'
67+
vmImage: 'ubuntu-22.04'
6868
strategy:
6969
matrix:
7070
GCC:

src/engine/framework/Network.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,18 @@ void OutOfBandData( netsrc_t sock, const netadr_t& adr, byte *data, std::size_t
5454
return;
5555
}
5656

57-
std::basic_string<byte> message;
58-
message.reserve(OOBHeader().size() + len);
59-
message.append(OOBHeader().begin(), OOBHeader().end());
60-
message.append(data, len);
57+
byte buf[MAX_MSGLEN]; // TODO should this be shorter, like MAX_PACKET?
58+
size_t size = OOBHeader().size() + len;
59+
if (size > sizeof(buf)) {
60+
Log::Warn("OutOfBandData: not sending excessively large (%d) message", len);
61+
return;
62+
}
63+
std::copy_n(OOBHeader().begin(), OOBHeader().size(), buf);
64+
std::copy_n(data, len, buf + OOBHeader().size());
6165

62-
msg_t mbuf;
63-
mbuf.data = &message[0];
64-
mbuf.cursize = message.size();
66+
msg_t mbuf{};
67+
mbuf.data = buf;
68+
mbuf.cursize = size;
6569
Huff_Compress( &mbuf, 12 );
6670
// send the datagram
6771
NET_SendPacket( sock, mbuf.cursize, mbuf.data, adr );

src/engine/renderer/GeometryOptimiser.cpp

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,75 @@ static int LeafSurfaceCompare( const void* a, const void* b ) {
7373
return 0;
7474
}
7575

76+
void MarkShaderBuildNONE( const shaderStage_t* ) {
77+
ASSERT_UNREACHABLE();
78+
}
79+
80+
void MarkShaderBuildNOP( const shaderStage_t* ) {
81+
}
82+
83+
void MarkShaderBuildGeneric3D( const shaderStage_t* pStage ) {
84+
ProcessShaderGeneric3D( pStage );
85+
gl_genericShader->MarkProgramForBuilding( pStage->deformIndex );
86+
}
87+
88+
void MarkShaderBuildLightMapping( const shaderStage_t* pStage ) {
89+
ProcessShaderLightMapping( pStage );
90+
gl_lightMappingShader->MarkProgramForBuilding( pStage->deformIndex );
91+
}
92+
93+
void MarkShaderBuildReflection( const shaderStage_t* pStage ) {
94+
ProcessShaderReflection( pStage );
95+
gl_reflectionShader->MarkProgramForBuilding( pStage->deformIndex );
96+
}
97+
98+
void MarkShaderBuildSkybox( const shaderStage_t* pStage ) {
99+
gl_skyboxShader->MarkProgramForBuilding( pStage->deformIndex );
100+
}
101+
102+
void MarkShaderBuildScreen( const shaderStage_t* pStage ) {
103+
gl_screenShader->MarkProgramForBuilding( pStage->deformIndex );
104+
}
105+
106+
void MarkShaderBuildPortal( const shaderStage_t* pStage ) {
107+
gl_portalShader->MarkProgramForBuilding( pStage->deformIndex );
108+
}
109+
110+
void MarkShaderBuildHeatHaze( const shaderStage_t* pStage ) {
111+
ProcessShaderHeatHaze( pStage );
112+
gl_heatHazeShader->MarkProgramForBuilding( pStage->deformIndex );
113+
}
114+
115+
void MarkShaderBuildLiquid( const shaderStage_t* pStage ) {
116+
ProcessShaderLiquid( pStage );
117+
gl_liquidShader->MarkProgramForBuilding( pStage->deformIndex );
118+
}
119+
120+
void MarkShaderBuildFog( const shaderStage_t* pStage ) {
121+
ProcessShaderFog( pStage );
122+
gl_fogQuake3Shader->MarkProgramForBuilding( 0 );
123+
}
124+
125+
void MarkShaderBuild( shader_t* shader, const int lightMapNum, const bool bspSurface,
126+
const bool vertexSkinning, const bool vertexAnimation ) {
127+
tess.surfaceShader = shader;
128+
tess.bspSurface = bspSurface;
129+
tess.lightmapNum = lightMapNum;
130+
131+
tess.vboVertexSkinning = vertexSkinning;
132+
tess.vboVertexAnimation = vertexAnimation;
133+
134+
for ( const shaderStage_t* pStage = shader->stages; pStage < shader->lastStage; pStage++ ) {
135+
pStage->shaderBuildMarker( pStage );
136+
}
137+
138+
tess.bspSurface = false;
139+
tess.lightmapNum = -1;
140+
141+
tess.vboVertexSkinning = false;
142+
tess.vboVertexAnimation = false;
143+
}
144+
76145
static void CoreResetSurfaceViewCounts( bspSurface_t** rendererSurfaces, int numSurfaces ) {
77146
for ( int i = 0; i < numSurfaces; i++ ) {
78147
bspSurface_t* surface = rendererSurfaces[i];
@@ -145,6 +214,14 @@ void OptimiseMapGeometryCore( world_t* world, bspSurface_t** rendererSurfaces, i
145214
}
146215

147216
qsort( rendererSurfaces, numSurfaces, sizeof( bspSurface_t* ), LeafSurfaceCompare );
217+
218+
if ( r_lazyShaders.Get() == 1 ) {
219+
for ( int i = 0; i < numSurfaces; i++ ) {
220+
bspSurface_t* surface = rendererSurfaces[i];
221+
222+
MarkShaderBuild( surface->shader, surface->lightmapNum, true, false, false );
223+
}
224+
}
148225
}
149226

150227
static void SphereFromBounds( vec3_t mins, vec3_t maxs, vec3_t origin, float* radius ) {
@@ -371,6 +448,7 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial(bspSurface_t** renderer
371448
// std::unordered_map<TriEdge, TriIndex> triEdges;
372449

373450
vec3_t worldBounds[2] = {};
451+
materialSystem.buildOneShader = false;
374452
for ( int i = 0; i < numSurfaces; i++ ) {
375453
bspSurface_t* surface = rendererSurfaces[i];
376454

@@ -406,6 +484,8 @@ std::vector<MaterialSurface> OptimiseMapGeometryMaterial(bspSurface_t** renderer
406484
materialSurfaces.emplace_back( srf );
407485
}
408486

487+
materialSystem.buildOneShader = true;
488+
409489
materialSystem.GenerateWorldMaterialsBuffer();
410490
materialSystem.GeneratePortalBoundingSpheres();
411491
materialSystem.SetWorldBounds( worldBounds );

src/engine/renderer/GeometryOptimiser.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,25 @@ struct MapVertEqual {
9797
}
9898
};
9999

100+
void MarkShaderBuildNONE( const shaderStage_t* );
101+
void MarkShaderBuildNOP( const shaderStage_t* );
102+
void MarkShaderBuildGeneric3D( const shaderStage_t* pStage );
103+
void MarkShaderBuildLightMapping( const shaderStage_t* pStage );
104+
void MarkShaderBuildReflection( const shaderStage_t* pStage );
105+
void MarkShaderBuildSkybox( const shaderStage_t* pStage );
106+
void MarkShaderBuildScreen( const shaderStage_t* pStage );
107+
void MarkShaderBuildPortal( const shaderStage_t* pStage );
108+
void MarkShaderBuildHeatHaze( const shaderStage_t* pStage );
109+
void MarkShaderBuildLiquid( const shaderStage_t* pStage );
110+
void MarkShaderBuildFog( const shaderStage_t* pStage );
111+
112+
void MarkShaderBuildIQM( const IQModel_t* model );
113+
void MarkShaderBuildMDV( const mdvModel_t* model );
114+
void MarkShaderBuildMD5( const md5Model_t* model );
115+
116+
void MarkShaderBuild( shader_t* shader, const int lightMapNum, const bool bspSurface,
117+
const bool vertexSkinning, const bool vertexAnimation );
118+
100119
void OptimiseMapGeometryCore( world_t* world, bspSurface_t** rendererSurfaces, int numSurfaces );
101120
void MergeLeafSurfacesCore( world_t* world, bspSurface_t** rendererSurfaces, int numSurfaces );
102121
void MergeDuplicateVertices( bspSurface_t** rendererSurfaces, int numSurfaces, srfVert_t* vertices, int numVerticesIn,

src/engine/renderer/Material.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ void ProcessMaterialGeneric3D( Material* material, shaderStage_t* pStage, Materi
10111011
material->hasDepthFade = hasDepthFade;
10121012
gl_genericShaderMaterial->SetDepthFade( hasDepthFade );
10131013

1014-
material->program = gl_genericShaderMaterial->GetProgram( pStage->deformIndex );
1014+
material->program = gl_genericShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10151015
}
10161016

10171017
void ProcessMaterialLightMapping( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
@@ -1027,8 +1027,6 @@ void ProcessMaterialLightMapping( Material* material, shaderStage_t* pStage, Mat
10271027
bool enableGridLighting = ( lightMode == lightMode_t::GRID );
10281028
bool enableGridDeluxeMapping = ( deluxeMode == deluxeMode_t::GRID );
10291029

1030-
DAEMON_ASSERT( !( enableDeluxeMapping && enableGridDeluxeMapping ) );
1031-
10321030
material->enableDeluxeMapping = enableDeluxeMapping;
10331031
material->enableGridLighting = enableGridLighting;
10341032
material->enableGridDeluxeMapping = enableGridDeluxeMapping;
@@ -1053,7 +1051,7 @@ void ProcessMaterialLightMapping( Material* material, shaderStage_t* pStage, Mat
10531051

10541052
gl_lightMappingShaderMaterial->SetPhysicalShading( pStage->enablePhysicalMapping );
10551053

1056-
material->program = gl_lightMappingShaderMaterial->GetProgram( pStage->deformIndex );
1054+
material->program = gl_lightMappingShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10571055
}
10581056

10591057
void ProcessMaterialReflection( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
@@ -1067,31 +1065,31 @@ void ProcessMaterialReflection( Material* material, shaderStage_t* pStage, Mater
10671065

10681066
gl_reflectionShaderMaterial->SetReliefMapping( pStage->enableReliefMapping );
10691067

1070-
material->program = gl_reflectionShaderMaterial->GetProgram( pStage->deformIndex );
1068+
material->program = gl_reflectionShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10711069
}
10721070

10731071
void ProcessMaterialSkybox( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
10741072
material->shader = gl_skyboxShaderMaterial;
10751073

10761074
material->deformIndex = pStage->deformIndex;
10771075

1078-
material->program = gl_skyboxShaderMaterial->GetProgram( pStage->deformIndex );
1076+
material->program = gl_skyboxShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10791077
}
10801078

10811079
void ProcessMaterialScreen( Material* material, shaderStage_t* pStage, MaterialSurface* /* surface */ ) {
10821080
material->shader = gl_screenShaderMaterial;
10831081

10841082
material->deformIndex = pStage->deformIndex;
10851083

1086-
material->program = gl_screenShaderMaterial->GetProgram( pStage->deformIndex );
1084+
material->program = gl_screenShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10871085
}
10881086

10891087
void ProcessMaterialHeatHaze( Material* material, shaderStage_t* pStage, MaterialSurface* ) {
10901088
material->shader = gl_heatHazeShaderMaterial;
10911089

10921090
material->deformIndex = pStage->deformIndex;
10931091

1094-
material->program = gl_heatHazeShaderMaterial->GetProgram( pStage->deformIndex );
1092+
material->program = gl_heatHazeShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
10951093
}
10961094

10971095
void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialSurface* surface ) {
@@ -1115,14 +1113,14 @@ void ProcessMaterialLiquid( Material* material, shaderStage_t* pStage, MaterialS
11151113

11161114
gl_liquidShaderMaterial->SetGridLighting( lightMode == lightMode_t::GRID );
11171115

1118-
material->program = gl_liquidShaderMaterial->GetProgram( pStage->deformIndex );
1116+
material->program = gl_liquidShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
11191117
}
11201118

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

1125-
material->program = gl_fogQuake3ShaderMaterial->GetProgram( pStage->deformIndex );
1123+
material->program = gl_fogQuake3ShaderMaterial->GetProgram( pStage->deformIndex, materialSystem.buildOneShader );
11261124
}
11271125

11281126
void MaterialSystem::AddStage( MaterialSurface* surface, shaderStage_t* pStage, uint32_t stage,
@@ -1742,6 +1740,8 @@ void MaterialSystem::Free() {
17421740
}
17431741
}
17441742

1743+
buildOneShader = true;
1744+
17451745
totalDrawSurfs = 0;
17461746

17471747
currentFrame = 0;

src/engine/renderer/Material.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,8 @@ class MaterialSystem {
339339
uint32_t totalPortals;
340340
std::vector<shader_t*> skyShaders;
341341

342+
bool buildOneShader = true;
343+
342344
std::vector<Material*> renderedMaterials;
343345

344346
/* MaterialPack is an abstraction to match a range of materials with the 3 different calls to RB_RenderDrawSurfaces()

0 commit comments

Comments
 (0)