diff --git a/src/graphics/components/DocumentComponent.cpp b/src/graphics/components/DocumentComponent.cpp index e47068bb6c7c41d49f3dfdc61cc33294a408d54b..81e5e11760bff31f2268a48f72562c95a623aae1 100644 --- a/src/graphics/components/DocumentComponent.cpp +++ b/src/graphics/components/DocumentComponent.cpp @@ -6,7 +6,6 @@ #include <ctime> #include "../opengl/Shader.h" -#include "../opengl/ShaderLoader.h" void deleteComponent(std::shared_ptr<Component> &component); void deleteNode(std::shared_ptr<Node> node); @@ -277,13 +276,13 @@ void DocumentComponent::render() { //if (transformMatrixDirty) { //const std::clock_t begin = clock(); - Shader *fontShader = ShaderLoader::getShader(VertexShader("FontShader.vert"), + Shader *fontShader = window->shaderLoader.getShader(VertexShader("FontShader.vert"), FragmentShader("FontShader.frag")); GLint transformLocation = fontShader->uniform("transform"); glUniformMatrix4fv(transformLocation, 1, GL_FALSE, transformMatrix); //const std::clock_t end = clock(); //std::cout << "Updated font matrix in: " << std::fixed << ((static_cast<double>(end - begin)) / CLOCKS_PER_SEC) << std::scientific << " seconds" << std::endl; - Shader *textureShader = ShaderLoader::getShader(VertexShader("TextureShader.vert"), + Shader *textureShader = window->shaderLoader.getShader(VertexShader("TextureShader.vert"), FragmentShader("TextureShader.frag")); GLint transformLocation2 = textureShader->uniform("transform"); glUniformMatrix4fv(transformLocation2, 1, GL_FALSE, transformMatrix); diff --git a/src/graphics/components/InputComponent.cpp b/src/graphics/components/InputComponent.cpp index 6eff6537b70276c3848e90fc2ffa94eb3b5a91f3..dad50558eaaa366f013ccae0eca1eb8f9d735f91 100644 --- a/src/graphics/components/InputComponent.cpp +++ b/src/graphics/components/InputComponent.cpp @@ -4,7 +4,6 @@ #include "../../scheduler.h" #include "../opengl/Shader.h" -#include "../opengl/ShaderLoader.h" extern TextRasterizerCache *rasterizerCache; extern std::unique_ptr<Scheduler> scheduler; @@ -162,7 +161,7 @@ void InputComponent::render() { // can actuall delete vertices here if (userInputText) { // make sure we're using win's transformMatrix - Shader *fontShader = ShaderLoader::getShader(VertexShader("FontShader.vert"), + Shader *fontShader = window->shaderLoader.getShader(VertexShader("FontShader.vert"), FragmentShader("FontShader.frag")); fontShader->bind(); if (!boundToPage) { @@ -180,7 +179,7 @@ void InputComponent::render() { } //std::cout << "rendering some text" << std::endl; userInputText->render(); - Shader *textureShader = ShaderLoader::getShader(VertexShader("TextureShader.vert"), + Shader *textureShader = window->shaderLoader.getShader(VertexShader("TextureShader.vert"), FragmentShader("TextureShader.frag")); textureShader->bind(); } diff --git a/src/graphics/components/MultiComponent.cpp b/src/graphics/components/MultiComponent.cpp index 46f66e2178e138fb019061ad78a95c88f82ba7a0..d4f34daa59774371dceecb6c759ede91325d6d29 100644 --- a/src/graphics/components/MultiComponent.cpp +++ b/src/graphics/components/MultiComponent.cpp @@ -7,7 +7,6 @@ #include "InputComponent.h" #include "../opengl/Shader.h" -#include "../opengl/ShaderLoader.h" MultiComponent::MultiComponent(const float rawX, const float rawY, const float rawWidth, const float rawHeight, const int passedWindowWidth, const int passedWindowHeight) { @@ -218,13 +217,13 @@ void MultiComponent::resize(const int passedWindowWidth, const int passedWindowH void MultiComponent::render() { //std::cout << "MultiComponent::render" << std::endl; - Shader *fontShader = ShaderLoader::getShader(VertexShader("FontShader.vert"), + Shader *fontShader = window->shaderLoader.getShader(VertexShader("FontShader.vert"), FragmentShader("FontShader.frag")); fontShader->bind(); renderDocumentComponents(rootComponent); fontShader->release(); - Shader *textureShader = ShaderLoader::getShader(VertexShader("TextureShader.vert"), + Shader *textureShader = window->shaderLoader.getShader(VertexShader("TextureShader.vert"), FragmentShader("TextureShader.frag")); textureShader->bind(); renderBoxComponents(rootComponent); diff --git a/src/graphics/opengl/ShaderLoader.cpp b/src/graphics/opengl/ShaderLoader.cpp index bd2aad9c812e5a15e1b446548f3fcf9893a75d3f..3564af918705f52db070dabf788fde2e5ff15ef8 100644 --- a/src/graphics/opengl/ShaderLoader.cpp +++ b/src/graphics/opengl/ShaderLoader.cpp @@ -9,9 +9,7 @@ #include "../../environment/Environment.h" #include "../../environment/Path.h" -static constexpr GLint maxLogSize = 1024 * 1024 * 2; //2 MiB - -ShaderLoader::ShaderCache ShaderLoader::shaderCache; +constexpr GLint maxLogSize = 1024 * 1024 * 2; //2 MiB GLuint ShaderLoader::loadShader(const std::string &shaderName, Shader::Type type) { GLenum glType = getGlShaderType(type); diff --git a/src/graphics/opengl/ShaderLoader.h b/src/graphics/opengl/ShaderLoader.h index 98c28daad17d41b9b9826210838907e92ec4a07a..06d981832a8d61f66604a158108f33d9d576172a 100644 --- a/src/graphics/opengl/ShaderLoader.h +++ b/src/graphics/opengl/ShaderLoader.h @@ -12,23 +12,23 @@ public: using ShaderCache = std::map<std::string, Shader*>; // Get a shader from the shader cache and load it from disk it isn't there - static Shader *getShader(VertexShader vertexShader, FragmentShader fragmentShader); + Shader *getShader(VertexShader vertexShader, FragmentShader fragmentShader); // Load a shader from disk and return the its handle - static GLuint loadShader(const std::string &shader, Shader::Type shaderType); + GLuint loadShader(const std::string &shader, Shader::Type shaderType); - static GLuint createProgram(const std::string &shader1Name, Shader::Type shader1Type, + GLuint createProgram(const std::string &shader1Name, Shader::Type shader1Type, const std::string &shader2Name, Shader::Type shader2Type); private: - static ShaderCache shaderCache; + ShaderCache shaderCache; - static int checkProgram(GLuint program, GLenum programName, + int checkProgram(GLuint program, GLenum programName, const std::string &shaderName); - static int checkShader(GLuint shader, const std::string &shaderName, Shader::Type shaderType); + int checkShader(GLuint shader, const std::string &shaderName, Shader::Type shaderType); - static constexpr GLenum getGlShaderType(const Shader::Type type); + constexpr GLenum getGlShaderType(const Shader::Type type); - static constexpr const char *getProgramStatusString(GLenum pname); + constexpr const char *getProgramStatusString(GLenum pname); }; #endif diff --git a/src/graphics/opengl/Window.cpp b/src/graphics/opengl/Window.cpp index eea8b7c3fb2f1ca842e55cc062b0eed69eb011f2..301cf5b620c9dc0623181462711aa2c53fca6c76 100644 --- a/src/graphics/opengl/Window.cpp +++ b/src/graphics/opengl/Window.cpp @@ -16,7 +16,6 @@ #include "../components/TabbedComponent.h" #include "../components/InputComponent.h" #include "../opengl/Shader.h" -#include "../opengl/ShaderLoader.h" #include <cmath> #include <ctime> @@ -700,7 +699,7 @@ void Window::render() { std::cout << "window::render - box render start - not ok: " << glErr << std::endl; } - Shader *textureShader = ShaderLoader::getShader(VertexShader("TextureShader.vert"), + Shader *textureShader = shaderLoader.getShader(VertexShader("TextureShader.vert"), FragmentShader("TextureShader.frag")); textureShader->bind(); glErr=glGetError(); @@ -722,7 +721,7 @@ void Window::render() { renderComponentType("input", rootComponent); // it's quick but done on scroll - Shader *fontShader = ShaderLoader::getShader(VertexShader("FontShader.vert"), + Shader *fontShader = shaderLoader.getShader(VertexShader("FontShader.vert"), FragmentShader("FontShader.frag")); fontShader->bind(); // reset both, since components can change this diff --git a/src/graphics/opengl/Window.h b/src/graphics/opengl/Window.h index 02e7d2993cf0b492182d52de49f97aae73c98d3c..9ad0bf3768ae013f0564c332fa13e2b1808dfa69 100644 --- a/src/graphics/opengl/Window.h +++ b/src/graphics/opengl/Window.h @@ -3,6 +3,7 @@ #include "../components/ComponentBuilder.h" #include "../components/Component.h" +#include "ShaderLoader.h" #include "../../html/Node.h" #include <GL/glew.h> #include <GLFW/glfw3.h> @@ -68,6 +69,7 @@ public: GLFWcursor* cursorArrow; GLFWcursor* cursorIbeam; URL currentURL; + ShaderLoader shaderLoader; }; bool setWindowContent(URL const& url);