Skip to content

Commit d353d60

Browse files
committed
GLUniform._global -> _updateType
This will be required for `PushBuffer` to correctly sort uniforms. Also updates `GLShader.WriteUniformsToBuffer()` to use `mode` and `filter` arguments to select the correct uniforms.
1 parent d948218 commit d353d60

File tree

3 files changed

+239
-213
lines changed

3 files changed

+239
-213
lines changed

src/engine/renderer/Material.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void UpdateSurfaceDataGeneric3D( uint32_t* materials, shaderStage_t* pStage, boo
161161

162162
gl_genericShaderMaterial->SetUniform_DepthScale( pStage->depthFadeValue );
163163

164-
gl_genericShaderMaterial->WriteUniformsToBuffer( materials );
164+
gl_genericShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
165165
}
166166

167167
void UpdateSurfaceDataLightMapping( uint32_t* materials, shaderStage_t* pStage, bool, bool vertexLit, bool fullbright ) {
@@ -207,7 +207,7 @@ void UpdateSurfaceDataLightMapping( uint32_t* materials, shaderStage_t* pStage,
207207

208208
gl_lightMappingShaderMaterial->SetUniform_SpecularExponent( specExpMin, specExpMax );
209209

210-
gl_lightMappingShaderMaterial->WriteUniformsToBuffer( materials );
210+
gl_lightMappingShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
211211
}
212212

213213
void UpdateSurfaceDataReflection( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
@@ -244,7 +244,7 @@ void UpdateSurfaceDataReflection( uint32_t* materials, shaderStage_t* pStage, bo
244244
gl_reflectionShaderMaterial->SetUniform_ReliefDepthScale( depthScale );
245245
gl_reflectionShaderMaterial->SetUniform_ReliefOffsetBias( shader->reliefOffsetBias );
246246

247-
gl_reflectionShaderMaterial->WriteUniformsToBuffer( materials );
247+
gl_reflectionShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
248248
}
249249

250250
void UpdateSurfaceDataSkybox( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
@@ -255,7 +255,7 @@ void UpdateSurfaceDataSkybox( uint32_t* materials, shaderStage_t* pStage, bool,
255255
// u_AlphaThreshold
256256
gl_skyboxShaderMaterial->SetUniform_AlphaTest( GLS_ATEST_NONE );
257257

258-
gl_skyboxShaderMaterial->WriteUniformsToBuffer( materials );
258+
gl_skyboxShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
259259
}
260260

261261
void UpdateSurfaceDataScreen( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
@@ -268,7 +268,7 @@ void UpdateSurfaceDataScreen( uint32_t* materials, shaderStage_t* pStage, bool,
268268
this seems to be the only material system shader that might need it to not be global */
269269
gl_screenShaderMaterial->SetUniform_CurrentMapBindless( BindAnimatedImage( 0, &pStage->bundle[TB_COLORMAP] ) );
270270

271-
gl_screenShaderMaterial->WriteUniformsToBuffer( materials );
271+
gl_screenShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
272272
}
273273

274274
void UpdateSurfaceDataHeatHaze( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
@@ -285,7 +285,7 @@ void UpdateSurfaceDataHeatHaze( uint32_t* materials, shaderStage_t* pStage, bool
285285
// bind u_NormalScale
286286
gl_heatHazeShaderMaterial->SetUniform_NormalScale( normalScale );
287287

288-
gl_heatHazeShaderMaterial->WriteUniformsToBuffer( materials );
288+
gl_heatHazeShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
289289
}
290290

291291
void UpdateSurfaceDataLiquid( uint32_t* materials, shaderStage_t* pStage, bool, bool, bool ) {
@@ -331,15 +331,15 @@ void UpdateSurfaceDataLiquid( uint32_t* materials, shaderStage_t* pStage, bool,
331331

332332
gl_liquidShaderMaterial->SetUniform_NormalScale( normalScale );
333333

334-
gl_liquidShaderMaterial->WriteUniformsToBuffer( materials );
334+
gl_liquidShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
335335
}
336336

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

340340
materials += pStage->bufferOffset;
341341

342-
gl_fogQuake3ShaderMaterial->WriteUniformsToBuffer( materials );
342+
gl_fogQuake3ShaderMaterial->WriteUniformsToBuffer( materials, GLShader::MATERIAL );
343343
}
344344

345345
/*

src/engine/renderer/gl_shader.cpp

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2383,10 +2383,24 @@ void GLShader::SetRequiredVertexPointers()
23832383
GL_VertexAttribsState( attribs );
23842384
}
23852385

2386-
void GLShader::WriteUniformsToBuffer( uint32_t* buffer ) {
2386+
void GLShader::WriteUniformsToBuffer( uint32_t* buffer, const Mode mode, const int filter ) {
23872387
uint32_t* bufPtr = buffer;
2388-
for ( GLUniform* uniform : _materialSystemUniforms ) {
2389-
bufPtr = uniform->WriteToBuffer( bufPtr );
2388+
std::vector<GLUniform*>* uniforms;
2389+
switch ( mode ) {
2390+
case MATERIAL:
2391+
uniforms = &_materialSystemUniforms;
2392+
break;
2393+
case PUSH:
2394+
uniforms = &_pushUniforms;
2395+
break;
2396+
default:
2397+
ASSERT_UNREACHABLE();
2398+
}
2399+
2400+
for ( GLUniform* uniform : *uniforms ) {
2401+
if ( filter == -1 || uniform->_updateType == filter ) {
2402+
bufPtr = uniform->WriteToBuffer( bufPtr );
2403+
}
23902404
}
23912405
}
23922406

0 commit comments

Comments
 (0)