From 8bf009bd89a5f835127b570dc5832c83cefb9482 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 13 Jun 2018 20:30:51 +0200 Subject: [PATCH] - added a RenderQueue parameter to all Bind functions of the postprocessing shaders. This is unused for now. All places calling these pass a dummy NOQUEUE value which is just a nullptr. This is for Vulkan preparation where all of this needs to run in a user-specified context so that this code can be moved out of the GL folder without depending on OpenGL's global state model. --- src/gl/dynlights/gl_shadowmap.cpp | 2 +- src/gl/renderer/gl_postprocess.cpp | 38 +++++++++---------- src/gl/renderer/gl_renderer.h | 1 + src/gl/shaders/gl_ambientshader.cpp | 16 ++++---- src/gl/shaders/gl_ambientshader.h | 8 ++-- src/gl/shaders/gl_bloomshader.cpp | 8 ++-- src/gl/shaders/gl_bloomshader.h | 4 +- src/gl/shaders/gl_blurshader.cpp | 4 +- src/gl/shaders/gl_blurshader.h | 2 +- src/gl/shaders/gl_colormapshader.cpp | 4 +- src/gl/shaders/gl_colormapshader.h | 2 +- src/gl/shaders/gl_fxaashader.cpp | 8 ++-- src/gl/shaders/gl_fxaashader.h | 4 +- src/gl/shaders/gl_lensshader.cpp | 4 +- src/gl/shaders/gl_lensshader.h | 2 +- src/gl/shaders/gl_postprocessshader.cpp | 6 +-- src/gl/shaders/gl_postprocessshaderinstance.h | 2 +- src/gl/shaders/gl_present3dRowshader.cpp | 12 +++--- src/gl/shaders/gl_present3dRowshader.h | 6 +-- src/gl/shaders/gl_presentshader.cpp | 4 +- src/gl/shaders/gl_presentshader.h | 4 +- src/gl/shaders/gl_shaderprogram.cpp | 2 +- src/gl/shaders/gl_shaderprogram.h | 4 +- src/gl/shaders/gl_shadowmapshader.cpp | 4 +- src/gl/shaders/gl_shadowmapshader.h | 2 +- src/gl/shaders/gl_tonemapshader.cpp | 16 ++++---- src/gl/shaders/gl_tonemapshader.h | 8 ++-- src/gl/stereo3d/gl_interleaved3d.cpp | 2 +- 28 files changed, 91 insertions(+), 88 deletions(-) diff --git a/src/gl/dynlights/gl_shadowmap.cpp b/src/gl/dynlights/gl_shadowmap.cpp index 910b620d1..0078aa815 100644 --- a/src/gl/dynlights/gl_shadowmap.cpp +++ b/src/gl/dynlights/gl_shadowmap.cpp @@ -51,7 +51,7 @@ void FShadowMap::Update() GLRenderer->mBuffers->BindShadowMapFB(); - GLRenderer->mShadowMapShader->Bind(); + GLRenderer->mShadowMapShader->Bind(NOQUEUE); GLRenderer->mShadowMapShader->Uniforms->ShadowmapQuality = gl_shadowmap_quality; GLRenderer->mShadowMapShader->Uniforms.Set(); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, mLightList); diff --git a/src/gl/renderer/gl_postprocess.cpp b/src/gl/renderer/gl_postprocess.cpp index fcfb7e2db..981f07b76 100644 --- a/src/gl/renderer/gl_postprocess.cpp +++ b/src/gl/renderer/gl_postprocess.cpp @@ -115,7 +115,7 @@ void FGLRenderer::AmbientOccludeScene() glViewport(0, 0, mBuffers->AmbientWidth, mBuffers->AmbientHeight); mBuffers->BindSceneDepthTexture(0); mBuffers->BindSceneColorTexture(1); - mLinearDepthShader->Bind(); + mLinearDepthShader->Bind(NOQUEUE); if (gl_multisample > 1) mLinearDepthShader->Uniforms->SampleIndex = 0; mLinearDepthShader->Uniforms->LinearizeDepthA = 1.0f / GetZFar() - 1.0f / GetZNear(); mLinearDepthShader->Uniforms->LinearizeDepthB = MAX(1.0f / GetZNear(), 1.e-8f); @@ -131,7 +131,7 @@ void FGLRenderer::AmbientOccludeScene() mBuffers->LinearDepthTexture.Bind(0); mBuffers->AmbientRandomTexture[randomTexture].Bind(2, GL_NEAREST, GL_REPEAT); mBuffers->BindSceneNormalTexture(1); - mSSAOShader->Bind(); + mSSAOShader->Bind(NOQUEUE); if (gl_multisample > 1) mSSAOShader->Uniforms->SampleIndex = 0; mSSAOShader->Uniforms->UVToViewA = { 2.0f * invFocalLenX, 2.0f * invFocalLenY }; mSSAOShader->Uniforms->UVToViewB = { -invFocalLenX, -invFocalLenY }; @@ -151,7 +151,7 @@ void FGLRenderer::AmbientOccludeScene() { mBuffers->AmbientFB0.Bind(); mBuffers->AmbientTexture1.Bind(0); - mDepthBlurShader->Bind(false); + mDepthBlurShader->Bind(NOQUEUE, false); mDepthBlurShader->Uniforms[false]->BlurSharpness = blurSharpness; mDepthBlurShader->Uniforms[false]->InvFullResolution = { 1.0f / mBuffers->AmbientWidth, 1.0f / mBuffers->AmbientHeight }; mDepthBlurShader->Uniforms[false].Set(); @@ -159,7 +159,7 @@ void FGLRenderer::AmbientOccludeScene() mBuffers->AmbientFB1.Bind(); mBuffers->AmbientTexture0.Bind(0); - mDepthBlurShader->Bind(true); + mDepthBlurShader->Bind(NOQUEUE, true); mDepthBlurShader->Uniforms[true]->BlurSharpness = blurSharpness; mDepthBlurShader->Uniforms[true]->InvFullResolution = { 1.0f / mBuffers->AmbientWidth, 1.0f / mBuffers->AmbientHeight }; mDepthBlurShader->Uniforms[true]->PowExponent = gl_ssao_exponent; @@ -180,7 +180,7 @@ void FGLRenderer::AmbientOccludeScene() } mBuffers->AmbientTexture1.Bind(0, GL_LINEAR); mBuffers->BindSceneFogTexture(1); - mSSAOCombineShader->Bind(); + mSSAOCombineShader->Bind(NOQUEUE); if (gl_multisample > 1) mSSAOCombineShader->Uniforms->SampleCount = gl_multisample; mSSAOCombineShader->Uniforms->Scale = { sceneScaleX, sceneScaleY }; mSSAOCombineShader->Uniforms->Offset = { sceneOffsetX, sceneOffsetY }; @@ -214,7 +214,7 @@ void FGLRenderer::UpdateCameraExposure() level0.Framebuffer.Bind(); glViewport(0, 0, level0.Width, level0.Height); mBuffers->BindCurrentTexture(0, GL_LINEAR); - mExposureExtractShader->Bind(); + mExposureExtractShader->Bind(NOQUEUE); mExposureExtractShader->Uniforms->Scale = { mSceneViewport.width / (float)mScreenViewport.width, mSceneViewport.height / (float)mScreenViewport.height }; mExposureExtractShader->Uniforms->Offset = { mSceneViewport.left / (float)mScreenViewport.width, mSceneViewport.top / (float)mScreenViewport.height }; mExposureExtractShader->Uniforms.Set(); @@ -229,7 +229,7 @@ void FGLRenderer::UpdateCameraExposure() next.Framebuffer.Bind(); glViewport(0, 0, next.Width, next.Height); level.Texture.Bind(0); - mExposureAverageShader->Bind(); + mExposureAverageShader->Bind(NOQUEUE); RenderScreenQuad(); } @@ -247,7 +247,7 @@ void FGLRenderer::UpdateCameraExposure() mBuffers->FirstExposureFrame = false; } mBuffers->ExposureLevels.Last().Texture.Bind(0); - mExposureCombineShader->Bind(); + mExposureCombineShader->Bind(NOQUEUE); mExposureCombineShader->Uniforms->ExposureBase = gl_exposure_base; mExposureCombineShader->Uniforms->ExposureMin = gl_exposure_min; mExposureCombineShader->Uniforms->ExposureScale = gl_exposure_scale; @@ -296,7 +296,7 @@ static void RenderBlur(FGLRenderer *renderer, float blurAmount, PPTexture input, { ComputeBlurSamples(7, blurAmount, renderer->mBlurShader->Uniforms[vertical]->SampleWeights); - renderer->mBlurShader->Bind(vertical); + renderer->mBlurShader->Bind(NOQUEUE, vertical); renderer->mBlurShader->Uniforms[vertical].Set(POSTPROCESS_BINDINGPOINT); input.Bind(0); @@ -329,7 +329,7 @@ void FGLRenderer::BloomScene(int fixedcm) glViewport(0, 0, level0.Width, level0.Height); mBuffers->BindCurrentTexture(0, GL_LINEAR); mBuffers->ExposureTexture.Bind(1); - mBloomExtractShader->Bind(); + mBloomExtractShader->Bind(NOQUEUE); mBloomExtractShader->Uniforms->Scale = { mSceneViewport.width / (float)mScreenViewport.width, mSceneViewport.height / (float)mScreenViewport.height }; mBloomExtractShader->Uniforms->Offset = { mSceneViewport.left / (float)mScreenViewport.width, mSceneViewport.top / (float)mScreenViewport.height }; mBloomExtractShader->Uniforms.Set(); @@ -357,7 +357,7 @@ void FGLRenderer::BloomScene(int fixedcm) next.VFramebuffer.Bind(); glViewport(0, 0, next.Width, next.Height); level.VTexture.Bind(0, GL_LINEAR); - mBloomCombineShader->Bind(); + mBloomCombineShader->Bind(NOQUEUE); RenderScreenQuad(); } @@ -371,7 +371,7 @@ void FGLRenderer::BloomScene(int fixedcm) glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_ONE, GL_ONE); level0.VTexture.Bind(0, GL_LINEAR); - mBloomCombineShader->Bind(); + mBloomCombineShader->Bind(NOQUEUE); RenderScreenQuad(); glViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); @@ -434,7 +434,7 @@ void FGLRenderer::BlurScene(float gameinfobluramount) next.VFramebuffer.Bind(); glViewport(0, 0, next.Width, next.Height); level.VTexture.Bind(0, GL_LINEAR); - mBloomCombineShader->Bind(); + mBloomCombineShader->Bind(NOQUEUE); RenderScreenQuad(); } @@ -469,7 +469,7 @@ void FGLRenderer::TonemapScene() mBuffers->BindNextFB(); mBuffers->BindCurrentTexture(0); - mTonemapShader->Bind(); + mTonemapShader->Bind(NOQUEUE); if (mTonemapShader->IsPaletteMode()) { @@ -546,7 +546,7 @@ void FGLRenderer::ColormapScene(int fixedcm) mBuffers->BindNextFB(); mBuffers->BindCurrentTexture(0); - mColormapShader->Bind(); + mColormapShader->Bind(NOQUEUE); FSpecialColormap *scm = &SpecialColormaps[fixedcm - CM_FIRSTSPECIALCOLORMAP]; float m[] = { scm->ColorizeEnd[0] - scm->ColorizeStart[0], @@ -604,7 +604,7 @@ void FGLRenderer::LensDistortScene() mBuffers->BindNextFB(); mBuffers->BindCurrentTexture(0, GL_LINEAR); - mLensShader->Bind(); + mLensShader->Bind(NOQUEUE); mLensShader->Uniforms->AspectRatio = aspect; mLensShader->Uniforms->Scale = scale; mLensShader->Uniforms->LensDistortionCoefficient = k; @@ -635,13 +635,13 @@ void FGLRenderer::ApplyFXAA() mBuffers->BindNextFB(); mBuffers->BindCurrentTexture(0); - mFXAALumaShader->Bind(); + mFXAALumaShader->Bind(NOQUEUE); RenderScreenQuad(); mBuffers->NextTexture(); mBuffers->BindNextFB(); mBuffers->BindCurrentTexture(0, GL_LINEAR); - mFXAAShader->Bind(); + mFXAAShader->Bind(NOQUEUE); mFXAAShader->Uniforms->ReciprocalResolution = { 1.0f / mBuffers->GetWidth(), 1.0f / mBuffers->GetHeight() }; mFXAAShader->Uniforms.Set(); RenderScreenQuad(); @@ -744,7 +744,7 @@ void FGLRenderer::DrawPresentTexture(const IntRect &box, bool applyGamma) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } - mPresentShader->Bind(); + mPresentShader->Bind(NOQUEUE); if (!applyGamma || framebuffer->IsHWGammaActive()) { mPresentShader->Uniforms->InvGamma = 1.0f; diff --git a/src/gl/renderer/gl_renderer.h b/src/gl/renderer/gl_renderer.h index 22b77acef..a537d15b5 100644 --- a/src/gl/renderer/gl_renderer.h +++ b/src/gl/renderer/gl_renderer.h @@ -50,6 +50,7 @@ class FShadowMapShader; class FCustomPostProcessShaders; class GLSceneDrawer; class SWSceneDrawer; +#define NOQUEUE nullptr // just some token to be used as a placeholder enum { diff --git a/src/gl/shaders/gl_ambientshader.cpp b/src/gl/shaders/gl_ambientshader.cpp index accc52c1c..e896d9208 100644 --- a/src/gl/shaders/gl_ambientshader.cpp +++ b/src/gl/shaders/gl_ambientshader.cpp @@ -25,7 +25,7 @@ #include "hwrenderer/utility/hw_cvars.h" #include "gl/shaders/gl_ambientshader.h" -void FLinearDepthShader::Bind() +void FLinearDepthShader::Bind(IRenderQueue *q) { bool multisample = (gl_multisample > 1); if (mMultisample != multisample) @@ -44,10 +44,10 @@ void FLinearDepthShader::Bind() Uniforms.Init(); mMultisample = multisample; } - mShader->Bind(); + mShader->Bind(q); } -void FSSAOShader::Bind() +void FSSAOShader::Bind(IRenderQueue *q) { bool multisample = (gl_multisample > 1); if (mCurrentQuality != gl_ssao || mMultisample != multisample) @@ -66,7 +66,7 @@ void FSSAOShader::Bind() Uniforms.Init(); mMultisample = multisample; } - mShader->Bind(); + mShader->Bind(q); } FString FSSAOShader::GetDefines(int mode, bool multisample) @@ -94,7 +94,7 @@ FString FSSAOShader::GetDefines(int mode, bool multisample) return defines; } -void FDepthBlurShader::Bind(bool vertical) +void FDepthBlurShader::Bind(IRenderQueue *q, bool vertical) { auto &shader = mShader[vertical]; if (!shader) @@ -111,10 +111,10 @@ void FDepthBlurShader::Bind(bool vertical) shader.SetUniformBufferLocation(Uniforms[vertical].BindingPoint(), "Uniforms"); Uniforms[vertical].Init(); } - shader.Bind(); + shader.Bind(q); } -void FSSAOCombineShader::Bind() +void FSSAOCombineShader::Bind(IRenderQueue *q) { bool multisample = (gl_multisample > 1); if (mMultisample != multisample) @@ -134,5 +134,5 @@ void FSSAOCombineShader::Bind() Uniforms.Init(); mMultisample = multisample; } - mShader->Bind(); + mShader->Bind(q); } diff --git a/src/gl/shaders/gl_ambientshader.h b/src/gl/shaders/gl_ambientshader.h index 106379012..aae7dd3e8 100644 --- a/src/gl/shaders/gl_ambientshader.h +++ b/src/gl/shaders/gl_ambientshader.h @@ -8,7 +8,7 @@ class FLinearDepthShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { @@ -49,7 +49,7 @@ private: class FSSAOShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { @@ -109,7 +109,7 @@ private: class FDepthBlurShader { public: - void Bind(bool vertical); + void Bind(IRenderQueue *q, bool vertical); struct UniformBlock { @@ -137,7 +137,7 @@ private: class FSSAOCombineShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/shaders/gl_bloomshader.cpp b/src/gl/shaders/gl_bloomshader.cpp index c2c7e0c01..5fef88364 100644 --- a/src/gl/shaders/gl_bloomshader.cpp +++ b/src/gl/shaders/gl_bloomshader.cpp @@ -29,7 +29,7 @@ #include "v_video.h" #include "gl/shaders/gl_bloomshader.h" -void FBloomExtractShader::Bind() +void FBloomExtractShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -41,10 +41,10 @@ void FBloomExtractShader::Bind() mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - mShader.Bind(); + mShader.Bind(q); } -void FBloomCombineShader::Bind() +void FBloomCombineShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -52,5 +52,5 @@ void FBloomCombineShader::Bind() mShader.Compile(FShaderProgram::Fragment, "shaders/glsl/bloomcombine.fp", "", 330); mShader.Link("shaders/glsl/bloomcombine"); } - mShader.Bind(); + mShader.Bind(q); } diff --git a/src/gl/shaders/gl_bloomshader.h b/src/gl/shaders/gl_bloomshader.h index 39e36bcb0..7be7bd487 100644 --- a/src/gl/shaders/gl_bloomshader.h +++ b/src/gl/shaders/gl_bloomshader.h @@ -6,7 +6,7 @@ class FBloomExtractShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { @@ -32,7 +32,7 @@ private: class FBloomCombineShader { public: - void Bind(); + void Bind(IRenderQueue *q); private: FShaderProgram mShader; diff --git a/src/gl/shaders/gl_blurshader.cpp b/src/gl/shaders/gl_blurshader.cpp index 581b3de6d..93212f0b0 100644 --- a/src/gl/shaders/gl_blurshader.cpp +++ b/src/gl/shaders/gl_blurshader.cpp @@ -32,7 +32,7 @@ #include "gl/renderer/gl_renderer.h" #include "gl/renderer/gl_renderbuffers.h" -void FBlurShader::Bind(bool vertical) +void FBlurShader::Bind(IRenderQueue *q, bool vertical) { if (!mShader[vertical]) { @@ -49,5 +49,5 @@ void FBlurShader::Bind(bool vertical) Uniforms[vertical].Init(); } - mShader[vertical].Bind(); + mShader[vertical].Bind(q); } diff --git a/src/gl/shaders/gl_blurshader.h b/src/gl/shaders/gl_blurshader.h index 992a304bc..2ae392ad7 100644 --- a/src/gl/shaders/gl_blurshader.h +++ b/src/gl/shaders/gl_blurshader.h @@ -11,7 +11,7 @@ class PPTexture; class FBlurShader { public: - void Bind(bool vertical); + void Bind(IRenderQueue *q, bool vertical); struct UniformBlock { diff --git a/src/gl/shaders/gl_colormapshader.cpp b/src/gl/shaders/gl_colormapshader.cpp index ee059d905..30353f4e8 100644 --- a/src/gl/shaders/gl_colormapshader.cpp +++ b/src/gl/shaders/gl_colormapshader.cpp @@ -29,7 +29,7 @@ #include "v_video.h" #include "gl/shaders/gl_colormapshader.h" -void FColormapShader::Bind() +void FColormapShader::Bind(IRenderQueue *q) { auto &shader = mShader; if (!shader) @@ -41,6 +41,6 @@ void FColormapShader::Bind() shader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - shader.Bind(); + shader.Bind(q); } diff --git a/src/gl/shaders/gl_colormapshader.h b/src/gl/shaders/gl_colormapshader.h index 2f50d0864..7b48947ce 100644 --- a/src/gl/shaders/gl_colormapshader.h +++ b/src/gl/shaders/gl_colormapshader.h @@ -6,7 +6,7 @@ class FColormapShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/shaders/gl_fxaashader.cpp b/src/gl/shaders/gl_fxaashader.cpp index 17749e4a8..ddded7150 100644 --- a/src/gl/shaders/gl_fxaashader.cpp +++ b/src/gl/shaders/gl_fxaashader.cpp @@ -29,7 +29,7 @@ EXTERN_CVAR(Int, gl_fxaa) -void FFXAALumaShader::Bind() +void FFXAALumaShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -38,7 +38,7 @@ void FFXAALumaShader::Bind() mShader.Link("shaders/glsl/fxaa"); } - mShader.Bind(); + mShader.Bind(q); } static int GetMaxVersion() @@ -73,7 +73,7 @@ static FString GetDefines() return result; } -void FFXAAShader::Bind() +void FFXAAShader::Bind(IRenderQueue *q) { assert(gl_fxaa > 0 && gl_fxaa < Count); FShaderProgram &shader = mShaders[gl_fxaa]; @@ -90,5 +90,5 @@ void FFXAAShader::Bind() Uniforms.Init(); } - shader.Bind(); + shader.Bind(q); } diff --git a/src/gl/shaders/gl_fxaashader.h b/src/gl/shaders/gl_fxaashader.h index 302d582bd..7ee3f2c07 100644 --- a/src/gl/shaders/gl_fxaashader.h +++ b/src/gl/shaders/gl_fxaashader.h @@ -33,7 +33,7 @@ class FFXAALumaShader { public: - void Bind(); + void Bind(IRenderQueue *q); private: FShaderProgram mShader; @@ -43,7 +43,7 @@ private: class FFXAAShader : public IFXAAShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/shaders/gl_lensshader.cpp b/src/gl/shaders/gl_lensshader.cpp index 295eff76b..f4924e7f0 100644 --- a/src/gl/shaders/gl_lensshader.cpp +++ b/src/gl/shaders/gl_lensshader.cpp @@ -29,7 +29,7 @@ #include "v_video.h" #include "gl/shaders/gl_lensshader.h" -void FLensShader::Bind() +void FLensShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -41,5 +41,5 @@ void FLensShader::Bind() mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - mShader.Bind(); + mShader.Bind(q); } diff --git a/src/gl/shaders/gl_lensshader.h b/src/gl/shaders/gl_lensshader.h index 2c7456cfc..80bb8ef7a 100644 --- a/src/gl/shaders/gl_lensshader.h +++ b/src/gl/shaders/gl_lensshader.h @@ -6,7 +6,7 @@ class FLensShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/shaders/gl_postprocessshader.cpp b/src/gl/shaders/gl_postprocessshader.cpp index 7e0683783..5f4c136ce 100644 --- a/src/gl/shaders/gl_postprocessshader.cpp +++ b/src/gl/shaders/gl_postprocessshader.cpp @@ -55,7 +55,7 @@ void FCustomPostProcessShaders::Run(FString target) { if (shader->Desc->Target == target) { - shader->Run(); + shader->Run(NOQUEUE); } } } @@ -68,7 +68,7 @@ PostProcessShaderInstance::~PostProcessShaderInstance() glDeleteTextures(1, (GLuint*)&it.second); } -void PostProcessShaderInstance::Run() +void PostProcessShaderInstance::Run(IRenderQueue *q) { if (!IsShaderSupported()) return; @@ -88,7 +88,7 @@ void PostProcessShaderInstance::Run() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - mProgram.Bind(); + mProgram.Bind(q); UpdateUniforms(); BindTextures(); diff --git a/src/gl/shaders/gl_postprocessshaderinstance.h b/src/gl/shaders/gl_postprocessshaderinstance.h index ee455ecf0..75b3e3e93 100644 --- a/src/gl/shaders/gl_postprocessshaderinstance.h +++ b/src/gl/shaders/gl_postprocessshaderinstance.h @@ -11,7 +11,7 @@ public: PostProcessShaderInstance(PostProcessShader *desc) : Desc(desc) { } ~PostProcessShaderInstance(); - void Run(); + void Run(IRenderQueue *q); PostProcessShader *Desc; diff --git a/src/gl/shaders/gl_present3dRowshader.cpp b/src/gl/shaders/gl_present3dRowshader.cpp index 9ef6ec5fd..963562541 100644 --- a/src/gl/shaders/gl_present3dRowshader.cpp +++ b/src/gl/shaders/gl_present3dRowshader.cpp @@ -30,29 +30,29 @@ #include "gl_load/gl_system.h" #include "gl/shaders/gl_present3dRowshader.h" -void FPresent3DCheckerShader::Bind() +void FPresent3DCheckerShader::Bind(IRenderQueue *q) { if (!mShader) { Init("shaders/glsl/present_checker3d.fp", "shaders/glsl/presentChecker3d"); } - mShader.Bind(); + mShader.Bind(q); } -void FPresent3DColumnShader::Bind() +void FPresent3DColumnShader::Bind(IRenderQueue *q) { if (!mShader) { Init("shaders/glsl/present_column3d.fp", "shaders/glsl/presentColumn3d"); } - mShader.Bind(); + mShader.Bind(q); } -void FPresent3DRowShader::Bind() +void FPresent3DRowShader::Bind(IRenderQueue *q) { if (!mShader) { Init("shaders/glsl/present_row3d.fp", "shaders/glsl/presentRow3d"); } - mShader.Bind(); + mShader.Bind(q); } diff --git a/src/gl/shaders/gl_present3dRowshader.h b/src/gl/shaders/gl_present3dRowshader.h index 4d2772469..6587238d4 100644 --- a/src/gl/shaders/gl_present3dRowshader.h +++ b/src/gl/shaders/gl_present3dRowshader.h @@ -34,19 +34,19 @@ class FPresent3DCheckerShader : public FPresentShaderBase { public: - void Bind() override; + void Bind(IRenderQueue *q) override; }; class FPresent3DColumnShader : public FPresentShaderBase { public: - void Bind() override; + void Bind(IRenderQueue *q) override; }; class FPresent3DRowShader : public FPresentShaderBase { public: - void Bind() override; + void Bind(IRenderQueue *q) override; }; // GL_PRESENT3DROWSHADER_H_ diff --git a/src/gl/shaders/gl_presentshader.cpp b/src/gl/shaders/gl_presentshader.cpp index 597562b0e..929126cae 100644 --- a/src/gl/shaders/gl_presentshader.cpp +++ b/src/gl/shaders/gl_presentshader.cpp @@ -40,11 +40,11 @@ void FPresentShaderBase::Init(const char * vtx_shader_name, const char * program Uniforms.Init(); } -void FPresentShader::Bind() +void FPresentShader::Bind(IRenderQueue *q) { if (!mShader) { Init("shaders/glsl/present.fp", "shaders/glsl/present"); } - mShader.Bind(); + mShader.Bind(q); } diff --git a/src/gl/shaders/gl_presentshader.h b/src/gl/shaders/gl_presentshader.h index 598877931..fa2ae31dd 100644 --- a/src/gl/shaders/gl_presentshader.h +++ b/src/gl/shaders/gl_presentshader.h @@ -7,7 +7,7 @@ class FPresentShaderBase { public: virtual ~FPresentShaderBase() {} - virtual void Bind() = 0; + virtual void Bind(IRenderQueue *q) = 0; struct UniformBlock { @@ -44,7 +44,7 @@ protected: class FPresentShader : public FPresentShaderBase { public: - void Bind() override; + void Bind(IRenderQueue *q) override; }; diff --git a/src/gl/shaders/gl_shaderprogram.cpp b/src/gl/shaders/gl_shaderprogram.cpp index 3b40a9c81..7ee5d2c98 100644 --- a/src/gl/shaders/gl_shaderprogram.cpp +++ b/src/gl/shaders/gl_shaderprogram.cpp @@ -176,7 +176,7 @@ void FShaderProgram::SetUniformBufferLocation(int index, const char *name) // //========================================================================== -void FShaderProgram::Bind() +void FShaderProgram::Bind(IRenderQueue *) { glUseProgram(mProgram); } diff --git a/src/gl/shaders/gl_shaderprogram.h b/src/gl/shaders/gl_shaderprogram.h index 72eacfbc3..9a9dc6579 100644 --- a/src/gl/shaders/gl_shaderprogram.h +++ b/src/gl/shaders/gl_shaderprogram.h @@ -5,6 +5,8 @@ #include "gl_shader.h" #include "hwrenderer/data/shaderuniforms.h" +class IRenderQueue; + class FShaderProgram { public: @@ -23,7 +25,7 @@ public: void Link(const char *name); void SetUniformBufferLocation(int index, const char *name); - void Bind(); + void Bind(IRenderQueue *q); // the parameter here is just a preparation for Vulkan operator GLuint() const { return mProgram; } explicit operator bool() const { return mProgram != 0; } diff --git a/src/gl/shaders/gl_shadowmapshader.cpp b/src/gl/shaders/gl_shadowmapshader.cpp index 3b64c0aae..09e676454 100644 --- a/src/gl/shaders/gl_shadowmapshader.cpp +++ b/src/gl/shaders/gl_shadowmapshader.cpp @@ -24,7 +24,7 @@ #include "files.h" #include "gl/shaders/gl_shadowmapshader.h" -void FShadowMapShader::Bind() +void FShadowMapShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -36,5 +36,5 @@ void FShadowMapShader::Bind() mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - mShader.Bind(); + mShader.Bind(q); } diff --git a/src/gl/shaders/gl_shadowmapshader.h b/src/gl/shaders/gl_shadowmapshader.h index 7e6f26d74..f657689de 100644 --- a/src/gl/shaders/gl_shadowmapshader.h +++ b/src/gl/shaders/gl_shadowmapshader.h @@ -6,7 +6,7 @@ class FShadowMapShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/shaders/gl_tonemapshader.cpp b/src/gl/shaders/gl_tonemapshader.cpp index e3606269a..3dcc37d5d 100644 --- a/src/gl/shaders/gl_tonemapshader.cpp +++ b/src/gl/shaders/gl_tonemapshader.cpp @@ -30,7 +30,7 @@ #include "hwrenderer/utility/hw_cvars.h" #include "gl/shaders/gl_tonemapshader.h" -void FTonemapShader::Bind() +void FTonemapShader::Bind(IRenderQueue *q) { auto &shader = mShader[gl_tonemap]; if (!shader) @@ -41,7 +41,7 @@ void FTonemapShader::Bind() shader.Compile(FShaderProgram::Fragment, "shaders/glsl/tonemap.fp", prolog, 330); shader.Link("shaders/glsl/tonemap"); } - shader.Bind(); + shader.Bind(q); } bool FTonemapShader::IsPaletteMode() @@ -62,7 +62,7 @@ const char *FTonemapShader::GetDefines(int mode) } } -void FExposureExtractShader::Bind() +void FExposureExtractShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -74,10 +74,10 @@ void FExposureExtractShader::Bind() mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - mShader.Bind(); + mShader.Bind(q); } -void FExposureAverageShader::Bind() +void FExposureAverageShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -85,10 +85,10 @@ void FExposureAverageShader::Bind() mShader.Compile(FShaderProgram::Fragment, "shaders/glsl/exposureaverage.fp", "", 400); mShader.Link("shaders/glsl/exposureaverage"); } - mShader.Bind(); + mShader.Bind(q); } -void FExposureCombineShader::Bind() +void FExposureCombineShader::Bind(IRenderQueue *q) { if (!mShader) { @@ -100,5 +100,5 @@ void FExposureCombineShader::Bind() mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } - mShader.Bind(); + mShader.Bind(q); } \ No newline at end of file diff --git a/src/gl/shaders/gl_tonemapshader.h b/src/gl/shaders/gl_tonemapshader.h index af25654c8..fe559665a 100644 --- a/src/gl/shaders/gl_tonemapshader.h +++ b/src/gl/shaders/gl_tonemapshader.h @@ -6,7 +6,7 @@ class FTonemapShader { public: - void Bind(); + void Bind(IRenderQueue *q); static bool IsPaletteMode(); @@ -30,7 +30,7 @@ private: class FExposureExtractShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { @@ -56,7 +56,7 @@ private: class FExposureAverageShader { public: - void Bind(); + void Bind(IRenderQueue *q); private: FShaderProgram mShader; @@ -65,7 +65,7 @@ private: class FExposureCombineShader { public: - void Bind(); + void Bind(IRenderQueue *q); struct UniformBlock { diff --git a/src/gl/stereo3d/gl_interleaved3d.cpp b/src/gl/stereo3d/gl_interleaved3d.cpp index 6c73552a4..927a0383a 100644 --- a/src/gl/stereo3d/gl_interleaved3d.cpp +++ b/src/gl/stereo3d/gl_interleaved3d.cpp @@ -95,7 +95,7 @@ static void prepareInterleavedPresent(FPresentShaderBase& shader) const IntRect& box = screen->mOutputLetterbox; glViewport(box.left, box.top, box.width, box.height); - shader.Bind(); + shader.Bind(NOQUEUE); if ( GLRenderer->framebuffer->IsHWGammaActive() ) {