Skip to content

Commit f110030

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 698b36e commit f110030

File tree

3 files changed

+241
-215
lines changed

3 files changed

+241
-215
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
@@ -2397,10 +2397,24 @@ void GLShader::SetRequiredVertexPointers()
23972397
GL_VertexAttribsState( attribs );
23982398
}
23992399

2400-
void GLShader::WriteUniformsToBuffer( uint32_t* buffer ) {
2400+
void GLShader::WriteUniformsToBuffer( uint32_t* buffer, const Mode mode, const int filter ) {
24012401
uint32_t* bufPtr = buffer;
2402-
for ( GLUniform* uniform : _materialSystemUniforms ) {
2403-
bufPtr = uniform->WriteToBuffer( bufPtr );
2402+
std::vector<GLUniform*>* uniforms;
2403+
switch ( mode ) {
2404+
case MATERIAL:
2405+
uniforms = &_materialSystemUniforms;
2406+
break;
2407+
case PUSH:
2408+
uniforms = &_pushUniforms;
2409+
break;
2410+
default:
2411+
ASSERT_UNREACHABLE();
2412+
}
2413+
2414+
for ( GLUniform* uniform : *uniforms ) {
2415+
if ( filter == -1 || uniform->_updateType == filter ) {
2416+
bufPtr = uniform->WriteToBuffer( bufPtr );
2417+
}
24042418
}
24052419
}
24062420

0 commit comments

Comments
 (0)