From c3eea71370eb94cff1fd96185458643fab6eb2c5 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Thu, 3 Nov 2022 19:47:46 +0000 Subject: Restructure how shaders are worked with Needs a tidy-up --- ui/editNetwork.cpp | 2 +- ui/gameMainSelector.h | 2 ++ ui/gameMainWindow.cpp | 10 ---------- ui/gameMainWindow.h | 1 - ui/sceneRenderer.cpp | 4 ++-- ui/sceneRenderer.h | 12 +++++++++--- ui/text.cpp | 2 +- ui/toolbar.cpp | 2 +- ui/window.h | 3 --- 9 files changed, 16 insertions(+), 22 deletions(-) (limited to 'ui') diff --git a/ui/editNetwork.cpp b/ui/editNetwork.cpp index 991cbc3..754053b 100644 --- a/ui/editNetwork.cpp +++ b/ui/editNetwork.cpp @@ -51,7 +51,7 @@ EditNetwork::render(const SceneShader & shader) const { if (builder) { blue.bind(); - shader.setModel(Location {}, SceneShader::Program::StaticPos); + shader.absolute.use(); builder->render(shader); } } diff --git a/ui/gameMainSelector.h b/ui/gameMainSelector.h index 9c05127..aacd67a 100644 --- a/ui/gameMainSelector.h +++ b/ui/gameMainSelector.h @@ -7,6 +7,8 @@ #include #include #include + +class SceneShader; class Ray; class UIShader; class Camera; diff --git a/ui/gameMainWindow.cpp b/ui/gameMainWindow.cpp index 792ffab..1d90417 100644 --- a/ui/gameMainWindow.cpp +++ b/ui/gameMainWindow.cpp @@ -36,10 +36,6 @@ GameMainWindow::GameMainWindow(size_t w, size_t h) : uiComponents.create(glm::vec2 {-1150, -1150}); auto gms = uiComponents.create(&camera, glm::vec2 {w, h}); uiComponents.create(gms.get()); - - shader.setUniform("lightDirection", glm::normalize(glm::vec3 {1, 0, -1})); - shader.setUniform("lightColor", {.6, .6, .6}); - shader.setUniform("ambientColor", {0.5, 0.5, 0.5}); } void @@ -58,9 +54,3 @@ GameMainWindow::render() const }); Window::render(); } - -const SceneShader & -GameMainWindow::getShader() const -{ - return shader; -} diff --git a/ui/gameMainWindow.h b/ui/gameMainWindow.h index 09d17d1..c01888f 100644 --- a/ui/gameMainWindow.h +++ b/ui/gameMainWindow.h @@ -16,7 +16,6 @@ public: void render() const override; private: - const SceneShader & getShader() const override; SceneShader shader; Camera camera; }; diff --git a/ui/sceneRenderer.cpp b/ui/sceneRenderer.cpp index 5e03704..6e75dec 100644 --- a/ui/sceneRenderer.cpp +++ b/ui/sceneRenderer.cpp @@ -10,7 +10,7 @@ static constexpr std::array displayVAOdata {{ {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, -1.0f, 1.0f, 0.0f}, }}; -SceneRenderer::SceneRenderer(glm::ivec2 size) : lighting {lightingShader_vs.compile(), lightingShader_fs.compile()} +SceneRenderer::SceneRenderer(glm::ivec2 size) : lighting {lightingShader_vs, lightingShader_fs} { glBindVertexArray(displayVAO); glBindBuffer(GL_ARRAY_BUFFER, displayVBO); @@ -60,7 +60,6 @@ SceneRenderer::render(std::function content) const // Lighting pass glDisable(GL_BLEND); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glUseProgram(lighting.m_program); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, gPosition); glActiveTexture(GL_TEXTURE1); @@ -68,6 +67,7 @@ SceneRenderer::render(std::function content) const glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, gAlbedoSpec); // TODO Configure lights + lighting.use(); glBindVertexArray(displayVAO); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindVertexArray(0); diff --git a/ui/sceneRenderer.h b/ui/sceneRenderer.h index 6176f1b..6c96418 100644 --- a/ui/sceneRenderer.h +++ b/ui/sceneRenderer.h @@ -1,12 +1,13 @@ #pragma once -#include "gfx/gl/sceneShader.h" +#include "gfx/gl/program.h" #include "lib/glArrays.h" #include +#include class SceneRenderer { public: - SceneRenderer(glm::ivec2 size); + explicit SceneRenderer(glm::ivec2 size); void render(std::function content) const; @@ -14,7 +15,12 @@ private: glFrameBuffer gBuffer; glTexture gPosition, gNormal, gAlbedoSpec; glRenderBuffer depth; - ProgramHandleBase lighting; + class DeferredLightProgram : public Program { + public: + using Program::Program; + using Program::use; + }; + DeferredLightProgram lighting; glVertexArray displayVAO; glBuffer displayVBO; }; diff --git a/ui/text.cpp b/ui/text.cpp index 872e3f3..d24c268 100644 --- a/ui/text.cpp +++ b/ui/text.cpp @@ -43,7 +43,7 @@ Text::Text(std::string_view s, Position pos, glm::vec3 c) : UIComponent {pos}, c void Text::render(const UIShader & shader, const Position &) const { - shader.useText(colour); + shader.text.use(colour); glActiveTexture(GL_TEXTURE0); for (const auto & m : models) { glBindTexture(GL_TEXTURE_2D, m.texture); diff --git a/ui/toolbar.cpp b/ui/toolbar.cpp index ada97b0..31d87dc 100644 --- a/ui/toolbar.cpp +++ b/ui/toolbar.cpp @@ -18,7 +18,7 @@ Toolbar::Toolbar(const std::initializer_list & initInfo) : UIComponent void Toolbar::render(const UIShader & uiShader, const Position & parentPos) const { - uiShader.useDefault(); + uiShader.icon.use(); const auto absPos = this->position + parentPos; icons.apply(&UIComponent::render, uiShader, absPos); } diff --git a/ui/window.h b/ui/window.h index b3d3f68..0661915 100644 --- a/ui/window.h +++ b/ui/window.h @@ -10,8 +10,6 @@ #include #include -class SceneShader; - class Window { public: Window(size_t width, size_t height, const std::string & title); @@ -30,7 +28,6 @@ public: protected: [[nodiscard]] SDL_GLContext glContext() const; virtual void render() const; - virtual const SceneShader & getShader() const = 0; using SDL_WindowPtr = wrapped_ptrt; const glm::ivec2 size; -- cgit v1.2.3