diff --git a/src/gl/data/gl_uniformbuffer.cpp b/src/gl/data/gl_uniformbuffer.cpp index 3952b6352b..010c0aff17 100644 --- a/src/gl/data/gl_uniformbuffer.cpp +++ b/src/gl/data/gl_uniformbuffer.cpp @@ -71,3 +71,14 @@ void GLUniformBuffer::SetData(const void *data) glBufferData(GL_UNIFORM_BUFFER, mSize, data, mStaticDraw? GL_STATIC_DRAW : GL_STREAM_DRAW); } } + +//========================================================================== +// +// This needs to go away later. +// +//========================================================================== + +void GLUniformBuffer::Bind(int bindingpoint) +{ + glBindBufferBase(GL_UNIFORM_BUFFER, bindingpoint, mBufferId); +} diff --git a/src/gl/data/gl_uniformbuffer.h b/src/gl/data/gl_uniformbuffer.h index 36c4144288..64c1831be7 100644 --- a/src/gl/data/gl_uniformbuffer.h +++ b/src/gl/data/gl_uniformbuffer.h @@ -14,6 +14,7 @@ public: ~GLUniformBuffer(); void SetData(const void *data) override; + void Bind(int bindingpoint) override; unsigned ID() const { diff --git a/src/gl/dynlights/gl_shadowmap.cpp b/src/gl/dynlights/gl_shadowmap.cpp index 13f534bb21..910b620d17 100644 --- a/src/gl/dynlights/gl_shadowmap.cpp +++ b/src/gl/dynlights/gl_shadowmap.cpp @@ -53,7 +53,7 @@ void FShadowMap::Update() GLRenderer->mShadowMapShader->Bind(); GLRenderer->mShadowMapShader->Uniforms->ShadowmapQuality = gl_shadowmap_quality; - GLRenderer->mShadowMapShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + GLRenderer->mShadowMapShader->Uniforms.Set(); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 4, mLightList); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, mNodesBuffer); glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 3, mLinesBuffer); diff --git a/src/gl/renderer/gl_postprocess.cpp b/src/gl/renderer/gl_postprocess.cpp index 6b7ce120c0..06ac1cae36 100644 --- a/src/gl/renderer/gl_postprocess.cpp +++ b/src/gl/renderer/gl_postprocess.cpp @@ -125,7 +125,7 @@ void FGLRenderer::AmbientOccludeScene() mLinearDepthShader->Uniforms->InverseDepthRangeB = 0.0f; mLinearDepthShader->Uniforms->Scale = { sceneScaleX, sceneScaleY }; mLinearDepthShader->Uniforms->Offset = { sceneOffsetX, sceneOffsetY }; - mLinearDepthShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mLinearDepthShader->Uniforms.Set(); RenderScreenQuad(); // Apply ambient occlusion @@ -148,7 +148,7 @@ void FGLRenderer::AmbientOccludeScene() mSSAOShader->Uniforms->AOStrength = aoStrength; mSSAOShader->Uniforms->Scale = { sceneScaleX, sceneScaleY }; mSSAOShader->Uniforms->Offset = { sceneOffsetX, sceneOffsetY }; - mSSAOShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mSSAOShader->Uniforms.Set(); RenderScreenQuad(); // Blur SSAO texture @@ -159,7 +159,7 @@ void FGLRenderer::AmbientOccludeScene() mDepthBlurShader->Bind(false); mDepthBlurShader->Uniforms[false]->BlurSharpness = blurSharpness; mDepthBlurShader->Uniforms[false]->InvFullResolution = { 1.0f / mBuffers->AmbientWidth, 1.0f / mBuffers->AmbientHeight }; - mDepthBlurShader->Uniforms[false].Set(POSTPROCESS_BINDINGPOINT); + mDepthBlurShader->Uniforms[false].Set(); RenderScreenQuad(); mBuffers->AmbientFB1.Bind(); @@ -168,7 +168,7 @@ void FGLRenderer::AmbientOccludeScene() mDepthBlurShader->Uniforms[true]->BlurSharpness = blurSharpness; mDepthBlurShader->Uniforms[true]->InvFullResolution = { 1.0f / mBuffers->AmbientWidth, 1.0f / mBuffers->AmbientHeight }; mDepthBlurShader->Uniforms[true]->PowExponent = gl_ssao_exponent; - mDepthBlurShader->Uniforms[true].Set(POSTPROCESS_BINDINGPOINT); + mDepthBlurShader->Uniforms[true].Set(); RenderScreenQuad(); } @@ -191,7 +191,7 @@ void FGLRenderer::AmbientOccludeScene() if (gl_multisample > 1) mSSAOCombineShader->Uniforms->SampleCount = gl_multisample; mSSAOCombineShader->Uniforms->Scale = { sceneScaleX, sceneScaleY }; mSSAOCombineShader->Uniforms->Offset = { sceneOffsetX, sceneOffsetY }; - mSSAOCombineShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mSSAOCombineShader->Uniforms.Set(); RenderScreenQuad(); FGLDebug::PopGroup(); @@ -225,7 +225,7 @@ void FGLRenderer::UpdateCameraExposure() mExposureExtractShader->SceneTexture.Set(0); 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(POSTPROCESS_BINDINGPOINT); + mExposureExtractShader->Uniforms.Set(); RenderScreenQuad(); // Find the average value: @@ -262,7 +262,7 @@ void FGLRenderer::UpdateCameraExposure() mExposureCombineShader->Uniforms->ExposureMin = gl_exposure_min; mExposureCombineShader->Uniforms->ExposureScale = gl_exposure_scale; mExposureCombineShader->Uniforms->ExposureSpeed = gl_exposure_speed; - mExposureCombineShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mExposureCombineShader->Uniforms.Set(); RenderScreenQuad(); glViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); @@ -304,7 +304,7 @@ void FGLRenderer::BloomScene(int fixedcm) mBloomExtractShader->ExposureTexture.Set(1); 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(POSTPROCESS_BINDINGPOINT); + mBloomExtractShader->Uniforms.Set(); RenderScreenQuad(); // Blur and downscale: @@ -534,7 +534,7 @@ void FGLRenderer::ColormapScene(int fixedcm) mColormapShader->Uniforms->MapStart = { scm->ColorizeStart[0], scm->ColorizeStart[1], scm->ColorizeStart[2], 0.f }; mColormapShader->Uniforms->MapRange = m; - mColormapShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mColormapShader->Uniforms.Set(); RenderScreenQuad(); mBuffers->NextTexture(); @@ -590,7 +590,7 @@ void FGLRenderer::LensDistortScene() mLensShader->Uniforms->Scale = scale; mLensShader->Uniforms->LensDistortionCoefficient = k; mLensShader->Uniforms->CubicDistortionValue = kcube; - mLensShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mLensShader->Uniforms.Set(); RenderScreenQuad(); mBuffers->NextTexture(); @@ -626,7 +626,7 @@ void FGLRenderer::ApplyFXAA() mFXAAShader->Bind(); mFXAAShader->InputTexture.Set(0); mFXAAShader->Uniforms->ReciprocalResolution = { 1.0f / mBuffers->GetWidth(), 1.0f / mBuffers->GetHeight() }; - mFXAAShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mFXAAShader->Uniforms.Set(); RenderScreenQuad(); mBuffers->NextTexture(); @@ -745,7 +745,7 @@ void FGLRenderer::DrawPresentTexture(const IntRect &box, bool applyGamma) mPresentShader->Uniforms->GrayFormula = static_cast(gl_satformula); } mPresentShader->Uniforms->Scale = { screen->mScreenViewport.width / (float)mBuffers->GetWidth(), screen->mScreenViewport.height / (float)mBuffers->GetHeight() }; - mPresentShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + mPresentShader->Uniforms.Set(); RenderScreenQuad(); } diff --git a/src/gl/shaders/gl_ambientshader.cpp b/src/gl/shaders/gl_ambientshader.cpp index c7242c82b4..6479107662 100644 --- a/src/gl/shaders/gl_ambientshader.cpp +++ b/src/gl/shaders/gl_ambientshader.cpp @@ -42,7 +42,7 @@ void FLinearDepthShader::Bind() mShader->SetFragDataLocation(0, "FragColor"); mShader->Link("shaders/glsl/lineardepth"); mShader->SetAttribLocation(0, "PositionInProjection"); - mShader->SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader->SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); DepthTexture.Init(*mShader, "DepthTexture"); ColorTexture.Init(*mShader, "ColorTexture"); Uniforms.Init(); @@ -68,7 +68,7 @@ void FSSAOShader::Bind() mShader->SetFragDataLocation(0, "FragColor"); mShader->Link("shaders/glsl/ssao"); mShader->SetAttribLocation(0, "PositionInProjection"); - mShader->SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader->SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); DepthTexture.Init(*mShader, "DepthTexture"); NormalTexture.Init(*mShader, "NormalTexture"); RandomTexture.Init(*mShader, "RandomTexture"); @@ -119,7 +119,7 @@ void FDepthBlurShader::Bind(bool vertical) shader.SetFragDataLocation(0, "FragColor"); shader.Link("shaders/glsl/depthblur"); shader.SetAttribLocation(0, "PositionInProjection"); - shader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + shader.SetUniformBufferLocation(Uniforms[vertical].BindingPoint(), "Uniforms"); AODepthTexture[vertical].Init(shader, "AODepthTexture"); Uniforms[vertical].Init(); } @@ -144,7 +144,7 @@ void FSSAOCombineShader::Bind() mShader->SetFragDataLocation(0, "FragColor"); mShader->Link("shaders/glsl/ssaocombine"); mShader->SetAttribLocation(0, "PositionInProjection"); - mShader->SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader->SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); AODepthTexture.Init(*mShader, "AODepthTexture"); SceneFogTexture.Init(*mShader, "SceneFogTexture"); Uniforms.Init(); diff --git a/src/gl/shaders/gl_ambientshader.h b/src/gl/shaders/gl_ambientshader.h index 0420c3e858..e3a7ef309e 100644 --- a/src/gl/shaders/gl_ambientshader.h +++ b/src/gl/shaders/gl_ambientshader.h @@ -42,7 +42,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: std::unique_ptr mShader; @@ -94,7 +94,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: enum Quality @@ -137,7 +137,7 @@ public: } }; - ShaderUniforms Uniforms[2]; + ShaderUniforms Uniforms[2]; private: FShaderProgram mShader[2]; @@ -172,7 +172,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: std::unique_ptr mShader; diff --git a/src/gl/shaders/gl_bloomshader.cpp b/src/gl/shaders/gl_bloomshader.cpp index 8e5a2f5ead..2ab14d3b48 100644 --- a/src/gl/shaders/gl_bloomshader.cpp +++ b/src/gl/shaders/gl_bloomshader.cpp @@ -40,7 +40,7 @@ void FBloomExtractShader::Bind() mShader.SetFragDataLocation(0, "FragColor"); mShader.Link("shaders/glsl/bloomextract"); mShader.SetAttribLocation(0, "PositionInProjection"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); SceneTexture.Init(mShader, "SceneTexture"); ExposureTexture.Init(mShader, "ExposureTexture"); Uniforms.Init(); diff --git a/src/gl/shaders/gl_bloomshader.h b/src/gl/shaders/gl_bloomshader.h index e3473babb3..a00ae638be 100644 --- a/src/gl/shaders/gl_bloomshader.h +++ b/src/gl/shaders/gl_bloomshader.h @@ -26,7 +26,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShader; diff --git a/src/gl/shaders/gl_colormapshader.cpp b/src/gl/shaders/gl_colormapshader.cpp index 6979860d6e..2a0f9d8527 100644 --- a/src/gl/shaders/gl_colormapshader.cpp +++ b/src/gl/shaders/gl_colormapshader.cpp @@ -41,7 +41,7 @@ void FColormapShader::Bind() shader.SetFragDataLocation(0, "FragColor"); shader.Link("shaders/glsl/colormap"); shader.SetAttribLocation(0, "PositionInProjection"); - shader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + shader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } shader.Bind(); diff --git a/src/gl/shaders/gl_colormapshader.h b/src/gl/shaders/gl_colormapshader.h index 80d4b3f11c..c9b0e81ec7 100644 --- a/src/gl/shaders/gl_colormapshader.h +++ b/src/gl/shaders/gl_colormapshader.h @@ -25,7 +25,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: diff --git a/src/gl/shaders/gl_fxaashader.cpp b/src/gl/shaders/gl_fxaashader.cpp index 2fbc0e2f00..96fea58f1a 100644 --- a/src/gl/shaders/gl_fxaashader.cpp +++ b/src/gl/shaders/gl_fxaashader.cpp @@ -91,7 +91,7 @@ void FFXAAShader::Bind() shader.SetFragDataLocation(0, "FragColor"); shader.Link("shaders/glsl/fxaa"); shader.SetAttribLocation(0, "PositionInProjection"); - shader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + shader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); InputTexture.Init(shader, "InputTexture"); Uniforms.Init(); } diff --git a/src/gl/shaders/gl_fxaashader.h b/src/gl/shaders/gl_fxaashader.h index 126f0da79e..d4e296a97e 100644 --- a/src/gl/shaders/gl_fxaashader.h +++ b/src/gl/shaders/gl_fxaashader.h @@ -65,7 +65,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShaders[Count]; diff --git a/src/gl/shaders/gl_lensshader.cpp b/src/gl/shaders/gl_lensshader.cpp index 7bfbbfa197..f9b7337634 100644 --- a/src/gl/shaders/gl_lensshader.cpp +++ b/src/gl/shaders/gl_lensshader.cpp @@ -40,7 +40,7 @@ void FLensShader::Bind() mShader.SetFragDataLocation(0, "FragColor"); mShader.Link("shaders/glsl/lensdistortion"); mShader.SetAttribLocation(0, "PositionInProjection"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); InputTexture.Init(mShader, "InputTexture"); Uniforms.Init(); } diff --git a/src/gl/shaders/gl_lensshader.h b/src/gl/shaders/gl_lensshader.h index ace6054cbd..fca227e163 100644 --- a/src/gl/shaders/gl_lensshader.h +++ b/src/gl/shaders/gl_lensshader.h @@ -32,7 +32,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShader; diff --git a/src/gl/shaders/gl_presentshader.cpp b/src/gl/shaders/gl_presentshader.cpp index 7f3ca148d9..7ef250cba7 100644 --- a/src/gl/shaders/gl_presentshader.cpp +++ b/src/gl/shaders/gl_presentshader.cpp @@ -39,7 +39,7 @@ void FPresentShaderBase::Init(const char * vtx_shader_name, const char * program mShader.Link(program_name); mShader.SetAttribLocation(0, "PositionInProjection"); mShader.SetAttribLocation(1, "UV"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } diff --git a/src/gl/shaders/gl_presentshader.h b/src/gl/shaders/gl_presentshader.h index f0e67d1cdc..d3cbd2c326 100644 --- a/src/gl/shaders/gl_presentshader.h +++ b/src/gl/shaders/gl_presentshader.h @@ -34,7 +34,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; protected: virtual void Init(const char * vtx_shader_name, const char * program_name); diff --git a/src/gl/shaders/gl_shaderprogram.h b/src/gl/shaders/gl_shaderprogram.h index 64f337dcca..57d9ca6449 100644 --- a/src/gl/shaders/gl_shaderprogram.h +++ b/src/gl/shaders/gl_shaderprogram.h @@ -20,6 +20,7 @@ enum class UniformType UVec2, UVec3, UVec4, + Mat4 }; class UniformFieldDesc @@ -33,7 +34,7 @@ public: std::size_t Offset; }; -template +template class ShaderUniforms { public: @@ -48,12 +49,17 @@ public: delete mBuffer; } + int BindingPoint() const + { + return bindingpoint; + } + FString CreateDeclaration(const char *name, const std::vector &fields) { mFields = fields; FString decl; - decl.Format("layout(%s) uniform %s\n{\n", screen->GetUniformLayoutString(mBindingPoint).GetChars(), name); + decl.Format("layout(%s) uniform %s\n{\n", screen->GetUniformLayoutString(bindingpoint).GetChars(), name); for (const auto &field : fields) { decl.AppendFormat("\t%s %s;\n", GetTypeStr(field.Type), field.Name); @@ -69,13 +75,14 @@ public: mBuffer = screen->CreateUniformBuffer(sizeof(T)); } - void Set(int index) + void Set(bool bind = true) { if (mBuffer != nullptr) mBuffer->SetData(&Values); - // Needs to be done in an API independent way! - glBindBufferBase(GL_UNIFORM_BUFFER, index, ((GLUniformBuffer*)mBuffer)->ID()); + // Let's hope this can be done better when things have moved further ahead. + // This really is not the best place to add something that depends on API behavior. + if (bind) mBuffer->Bind(bindingpoint); } T *operator->() { return &Values; } @@ -104,12 +111,12 @@ private: case UniformType::UVec2: return "uvec2"; case UniformType::UVec3: return "uvec3"; case UniformType::UVec4: return "uvec4"; + case UniformType::Mat4: return "mat4"; } } IUniformBuffer *mBuffer = nullptr; std::vector mFields; - int mBindingPoint; // Fixme: This needs to be known on init because Vulkan wants to put it into the block declaration. }; class FShaderProgram diff --git a/src/gl/shaders/gl_shadowmapshader.cpp b/src/gl/shaders/gl_shadowmapshader.cpp index 6541f59ac9..0454801f56 100644 --- a/src/gl/shaders/gl_shadowmapshader.cpp +++ b/src/gl/shaders/gl_shadowmapshader.cpp @@ -35,7 +35,7 @@ void FShadowMapShader::Bind() mShader.SetFragDataLocation(0, "FragColor"); mShader.Link("shaders/glsl/shadowmap"); mShader.SetAttribLocation(0, "PositionInProjection"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); Uniforms.Init(); } mShader.Bind(); diff --git a/src/gl/shaders/gl_shadowmapshader.h b/src/gl/shaders/gl_shadowmapshader.h index a36ffabd02..7e6f26d741 100644 --- a/src/gl/shaders/gl_shadowmapshader.h +++ b/src/gl/shaders/gl_shadowmapshader.h @@ -25,7 +25,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShader; diff --git a/src/gl/shaders/gl_tonemapshader.cpp b/src/gl/shaders/gl_tonemapshader.cpp index 41c3c7297e..ed50dd588d 100644 --- a/src/gl/shaders/gl_tonemapshader.cpp +++ b/src/gl/shaders/gl_tonemapshader.cpp @@ -76,7 +76,7 @@ void FExposureExtractShader::Bind() mShader.SetFragDataLocation(0, "FragColor"); mShader.Link("shaders/glsl/exposureextract"); mShader.SetAttribLocation(0, "PositionInProjection"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); SceneTexture.Init(mShader, "SceneTexture"); Uniforms.Init(); } @@ -108,7 +108,7 @@ void FExposureCombineShader::Bind() mShader.SetFragDataLocation(0, "FragColor"); mShader.Link("shaders/glsl/exposurecombine"); mShader.SetAttribLocation(0, "PositionInProjection"); - mShader.SetUniformBufferLocation(POSTPROCESS_BINDINGPOINT, "Uniforms"); + mShader.SetUniformBufferLocation(Uniforms.BindingPoint(), "Uniforms"); ExposureTexture.Init(mShader, "ExposureTexture"); Uniforms.Init(); } diff --git a/src/gl/shaders/gl_tonemapshader.h b/src/gl/shaders/gl_tonemapshader.h index 8240320b11..4902a8442d 100644 --- a/src/gl/shaders/gl_tonemapshader.h +++ b/src/gl/shaders/gl_tonemapshader.h @@ -53,7 +53,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShader; @@ -96,7 +96,7 @@ public: } }; - ShaderUniforms Uniforms; + ShaderUniforms Uniforms; private: FShaderProgram mShader; diff --git a/src/gl/stereo3d/gl_interleaved3d.cpp b/src/gl/stereo3d/gl_interleaved3d.cpp index 3fc665931c..ed1d6d381e 100644 --- a/src/gl/stereo3d/gl_interleaved3d.cpp +++ b/src/gl/stereo3d/gl_interleaved3d.cpp @@ -118,7 +118,7 @@ static void prepareInterleavedPresent(FPresentStereoShaderBase& shader) screen->mScreenViewport.width / (float)GLRenderer->mBuffers->GetWidth(), screen->mScreenViewport.height / (float)GLRenderer->mBuffers->GetHeight() }; - shader.Uniforms.Set(POSTPROCESS_BINDINGPOINT); + shader.Uniforms.Set(); } // fixme: I don't know how to get absolute window position on Mac and Linux @@ -155,7 +155,7 @@ void CheckerInterleaved3D::Present() const + screen->mOutputLetterbox.height + 1 // +1 because of origin at bottom ) % 2; // because we want the top pixel offset, but gl_FragCoord.y is the bottom pixel offset - GLRenderer->mPresent3dCheckerShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + GLRenderer->mPresent3dCheckerShader->Uniforms.Set(); GLRenderer->RenderScreenQuad(); } @@ -193,7 +193,7 @@ void ColumnInterleaved3D::Present() const #endif // _WIN32 GLRenderer->mPresent3dColumnShader->Uniforms->WindowPositionParity = windowHOffset; - GLRenderer->mPresent3dColumnShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + GLRenderer->mPresent3dColumnShader->Uniforms.Set(); GLRenderer->RenderScreenQuad(); } @@ -220,7 +220,7 @@ void RowInterleaved3D::Present() const + screen->mOutputLetterbox.height + 1 // +1 because of origin at bottom ) % 2; - GLRenderer->mPresent3dColumnShader->Uniforms.Set(POSTPROCESS_BINDINGPOINT); + GLRenderer->mPresent3dColumnShader->Uniforms.Set(); GLRenderer->RenderScreenQuad(); } diff --git a/src/hwrenderer/data/uniformbuffer.h b/src/hwrenderer/data/uniformbuffer.h index b3c9149425..9aa078d3d8 100644 --- a/src/hwrenderer/data/uniformbuffer.h +++ b/src/hwrenderer/data/uniformbuffer.h @@ -12,6 +12,7 @@ protected: public: virtual ~IUniformBuffer() {} virtual void SetData(const void *data) = 0; + virtual void Bind(int bindingpoint) = 0; // This is only here for OpenGL. Vulkan doesn't need the ability to bind this at run time. };