@@ -45,6 +45,7 @@ ShaderKind shaderKind = ShaderKind::Unknown;
4545
4646GLShader_generic *gl_genericShader = nullptr ;
4747GLShader_genericMaterial *gl_genericShaderMaterial = nullptr ;
48+ GLShader_clearFrameData *gl_clearFrameDataShader = nullptr ;
4849GLShader_cull *gl_cullShader = nullptr ;
4950GLShader_depthReduction *gl_depthReductionShader = nullptr ;
5051GLShader_clearSurfaces *gl_clearSurfacesShader = nullptr ;
@@ -54,6 +55,7 @@ GLShader_lightMappingMaterial *gl_lightMappingShaderMaterial = nullpt
5455GLShader_forwardLighting_omniXYZ *gl_forwardLightingShader_omniXYZ = nullptr ;
5556GLShader_forwardLighting_projXYZ *gl_forwardLightingShader_projXYZ = nullptr ;
5657GLShader_forwardLighting_directionalSun *gl_forwardLightingShader_directionalSun = nullptr ;
58+ GLShader_luminanceReduction *gl_luminanceReductionShader = nullptr ;
5759GLShader_shadowFill *gl_shadowFillShader = nullptr ;
5860GLShader_reflection *gl_reflectionShader = nullptr ;
5961GLShader_reflectionMaterial *gl_reflectionShaderMaterial = nullptr ;
@@ -80,6 +82,7 @@ GLShader_depthtile2 *gl_depthtile2Shader = nullptr;
8082GLShader_lighttile *gl_lighttileShader = nullptr ;
8183GLShader_fxaa *gl_fxaaShader = nullptr ;
8284GLShaderManager gl_shaderManager;
85+ GLBuffer luminanceBuffer ( " luminance" , Util::ordinal( BufferBind::LUMINANCE ), GL_MAP_WRITE_BIT, GL_MAP_INVALIDATE_RANGE_BIT );
8386
8487namespace // Implementation details
8588{
@@ -405,6 +408,9 @@ static const std::vector<addedExtension_t> fragmentVertexAddedExtensions = {
405408 where the core variables have different names. */
406409 { glConfig2.shaderDrawParametersAvailable , -1 , " ARB_shader_draw_parameters" },
407410 { glConfig2.SSBOAvailable , 430 , " ARB_shader_storage_buffer_object" },
411+ { glConfig2.shadingLanguage420PackAvailable , 420 , " ARB_shading_language_420pack" },
412+ { glConfig2.explicitUniformLocationAvailable , 430 , " ARB_explicit_uniform_location" },
413+ { glConfig2.shaderAtomicCountersAvailable , 420 , " ARB_shader_atomic_counters" },
408414 /* Even though these are part of the GL_KHR_shader_subgroup extension, we need to enable
409415 the individual extensions for each feature.
410416 GL_KHR_shader_subgroup itself can't be used in the shader. */
@@ -552,6 +558,10 @@ static std::string GenVertexHeader() {
552558 AddDefine ( str, " BIND_LIGHTMAP_DATA" , Util::ordinal ( BufferBind::LIGHTMAP_DATA ) );
553559 }
554560
561+ if ( glConfig2.adaptiveExposureAvailable ) {
562+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
563+ }
564+
555565 return str;
556566}
557567
@@ -592,6 +602,10 @@ static std::string GenFragmentHeader() {
592602 AddDefine ( str, " BIND_LIGHTMAP_DATA" , Util::ordinal ( BufferBind::LIGHTMAP_DATA ) );
593603 }
594604
605+ if ( glConfig2.adaptiveExposureAvailable ) {
606+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
607+ }
608+
595609 return str;
596610}
597611
@@ -617,6 +631,11 @@ static std::string GenComputeHeader() {
617631 AddDefine ( str, " BIND_DEBUG" , Util::ordinal ( BufferBind::DEBUG ) );
618632 }
619633
634+ if ( glConfig2.adaptiveExposureAvailable ) {
635+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
636+ AddDefine ( str, " BIND_LUMINANCE_STORAGE" , Util::ordinal ( BufferBind::LUMINANCE_STORAGE ) );
637+ }
638+
620639 if ( glConfig2.usingBindlessTextures ) {
621640 str += " layout(bindless_image) uniform;\n " ;
622641 }
@@ -2630,6 +2649,17 @@ void GLShader_forwardLighting_directionalSun::SetShaderProgramUniforms( shaderPr
26302649 glUniform1i ( glGetUniformLocation ( shaderProgram->program , " u_HeightMap" ), 15 );
26312650}
26322651
2652+ GLShader_luminanceReduction::GLShader_luminanceReduction ( GLShaderManager* manager ) :
2653+ GLShader( " luminanceReduction" , 0 , manager, false , false , true ),
2654+ u_ViewWidth( this ),
2655+ u_ViewHeight( this ),
2656+ u_TonemapParms2( this ) {
2657+ }
2658+
2659+ void GLShader_luminanceReduction::SetShaderProgramUniforms ( shaderProgram_t* shaderProgram ) {
2660+ glUniform1i ( glGetUniformLocation ( shaderProgram->program , " initialRenderImage" ), 0 );
2661+ }
2662+
26332663GLShader_shadowFill::GLShader_shadowFill ( GLShaderManager *manager ) :
26342664 GLShader( " shadowFill" , ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ),
26352665 u_ColorMap( this ),
@@ -2901,7 +2931,10 @@ GLShader_cameraEffects::GLShader_cameraEffects( GLShaderManager *manager ) :
29012931 u_ColorModulate( this ),
29022932 u_TextureMatrix( this ),
29032933 u_ModelViewProjectionMatrix( this ),
2934+ u_ViewWidth( this ),
2935+ u_ViewHeight( this ),
29042936 u_Tonemap( this ),
2937+ u_TonemapAdaptiveExposure( this ),
29052938 u_TonemapParms( this ),
29062939 u_TonemapExposure( this ),
29072940 u_InverseGamma( this )
@@ -3114,6 +3147,10 @@ void GLShader_fxaa::SetShaderProgramUniforms( shaderProgram_t *shaderProgram )
31143147 glUniform1i ( glGetUniformLocation ( shaderProgram->program , " u_ColorMap" ), 0 );
31153148}
31163149
3150+ GLShader_clearFrameData::GLShader_clearFrameData ( GLShaderManager* manager ) :
3151+ GLShader( " clearFrameData" , 0 , manager, false , false , true ) {
3152+ }
3153+
31173154GLShader_cull::GLShader_cull ( GLShaderManager* manager ) :
31183155 GLShader( " cull" , ATTR_POSITION, manager, false , false , true ),
31193156 u_Frame( this ),
0 commit comments