@@ -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{
@@ -429,6 +432,9 @@ static const std::vector<addedExtension_t> fragmentVertexAddedExtensions = {
429432 where the core variables have different names. */
430433 { glConfig2.shaderDrawParametersAvailable , -1 , " ARB_shader_draw_parameters" },
431434 { glConfig2.SSBOAvailable , 430 , " ARB_shader_storage_buffer_object" },
435+ { glConfig2.shadingLanguage420PackAvailable , 420 , " ARB_shading_language_420pack" },
436+ { glConfig2.explicitUniformLocationAvailable , 430 , " ARB_explicit_uniform_location" },
437+ { glConfig2.shaderAtomicCountersAvailable , 420 , " ARB_shader_atomic_counters" },
432438 /* Even though these are part of the GL_KHR_shader_subgroup extension, we need to enable
433439 the individual extensions for each feature.
434440 GL_KHR_shader_subgroup itself can't be used in the shader. */
@@ -576,6 +582,10 @@ static std::string GenVertexHeader() {
576582 AddDefine ( str, " BIND_LIGHTMAP_DATA" , Util::ordinal ( BufferBind::LIGHTMAP_DATA ) );
577583 }
578584
585+ if ( glConfig2.adaptiveExposureAvailable ) {
586+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
587+ }
588+
579589 return str;
580590}
581591
@@ -616,6 +626,10 @@ static std::string GenFragmentHeader() {
616626 AddDefine ( str, " BIND_LIGHTMAP_DATA" , Util::ordinal ( BufferBind::LIGHTMAP_DATA ) );
617627 }
618628
629+ if ( glConfig2.adaptiveExposureAvailable ) {
630+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
631+ }
632+
619633 return str;
620634}
621635
@@ -641,6 +655,11 @@ static std::string GenComputeHeader() {
641655 AddDefine ( str, " BIND_DEBUG" , Util::ordinal ( BufferBind::DEBUG ) );
642656 }
643657
658+ if ( glConfig2.adaptiveExposureAvailable ) {
659+ AddDefine ( str, " BIND_LUMINANCE" , Util::ordinal ( BufferBind::LUMINANCE ) );
660+ AddDefine ( str, " BIND_LUMINANCE_STORAGE" , Util::ordinal ( BufferBind::LUMINANCE_STORAGE ) );
661+ }
662+
644663 if ( glConfig2.usingBindlessTextures ) {
645664 str += " layout(bindless_image) uniform;\n " ;
646665 }
@@ -2772,6 +2791,17 @@ void GLShader_forwardLighting_directionalSun::SetShaderProgramUniforms( ShaderPr
27722791 glUniform1i ( glGetUniformLocation ( shaderProgram->id , " u_HeightMap" ), 15 );
27732792}
27742793
2794+ GLShader_luminanceReduction::GLShader_luminanceReduction ( GLShaderManager* manager ) :
2795+ GLShader( " luminanceReduction" , 0 , manager, false , false , true ),
2796+ u_ViewWidth( this ),
2797+ u_ViewHeight( this ),
2798+ u_TonemapParms2( this ) {
2799+ }
2800+
2801+ void GLShader_luminanceReduction::SetShaderProgramUniforms ( ShaderProgramDescriptor* shaderProgram ) {
2802+ glUniform1i ( glGetUniformLocation ( shaderProgram->id , " initialRenderImage" ), 0 );
2803+ }
2804+
27752805GLShader_shadowFill::GLShader_shadowFill ( GLShaderManager *manager ) :
27762806 GLShader( " shadowFill" , ATTR_POSITION | ATTR_TEXCOORD | ATTR_QTANGENT, manager ),
27772807 u_ColorMap( this ),
@@ -3043,7 +3073,10 @@ GLShader_cameraEffects::GLShader_cameraEffects( GLShaderManager *manager ) :
30433073 u_ColorModulate( this ),
30443074 u_TextureMatrix( this ),
30453075 u_ModelViewProjectionMatrix( this ),
3076+ u_ViewWidth( this ),
3077+ u_ViewHeight( this ),
30463078 u_Tonemap( this ),
3079+ u_TonemapAdaptiveExposure( this ),
30473080 u_TonemapParms( this ),
30483081 u_TonemapExposure( this ),
30493082 u_InverseGamma( this )
@@ -3256,6 +3289,10 @@ void GLShader_fxaa::SetShaderProgramUniforms( ShaderProgramDescriptor *shaderPro
32563289 glUniform1i ( glGetUniformLocation ( shaderProgram->id , " u_ColorMap" ), 0 );
32573290}
32583291
3292+ GLShader_clearFrameData::GLShader_clearFrameData ( GLShaderManager* manager ) :
3293+ GLShader( " clearFrameData" , 0 , manager, false , false , true ) {
3294+ }
3295+
32593296GLShader_cull::GLShader_cull ( GLShaderManager* manager ) :
32603297 GLShader( " cull" , ATTR_POSITION, manager, false , false , true ),
32613298 u_Frame( this ),
0 commit comments