effects_pipeline.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #pragma once
  2. #include "../shader.h"
  3. #include "pipeline_interface.h"
  4. namespace Render::GL {
  5. class ShaderCache;
  6. class Backend;
  7. namespace BackendPipelines {
  8. class EffectsPipeline final : public IPipeline {
  9. public:
  10. explicit EffectsPipeline(GL::Backend *backend, GL::ShaderCache *shaderCache)
  11. : m_backend(backend), m_shaderCache(shaderCache) {}
  12. ~EffectsPipeline() override { shutdown(); }
  13. auto initialize() -> bool override;
  14. void shutdown() override;
  15. void cacheUniforms() override;
  16. [[nodiscard]] auto is_initialized() const -> bool override;
  17. struct GridUniforms {
  18. GL::Shader::UniformHandle mvp{GL::Shader::InvalidUniform};
  19. GL::Shader::UniformHandle model{GL::Shader::InvalidUniform};
  20. GL::Shader::UniformHandle gridColor{GL::Shader::InvalidUniform};
  21. GL::Shader::UniformHandle lineColor{GL::Shader::InvalidUniform};
  22. GL::Shader::UniformHandle cellSize{GL::Shader::InvalidUniform};
  23. GL::Shader::UniformHandle thickness{GL::Shader::InvalidUniform};
  24. };
  25. struct BasicUniforms {
  26. GL::Shader::UniformHandle mvp{GL::Shader::InvalidUniform};
  27. GL::Shader::UniformHandle model{GL::Shader::InvalidUniform};
  28. GL::Shader::UniformHandle texture{GL::Shader::InvalidUniform};
  29. GL::Shader::UniformHandle useTexture{GL::Shader::InvalidUniform};
  30. GL::Shader::UniformHandle color{GL::Shader::InvalidUniform};
  31. GL::Shader::UniformHandle alpha{GL::Shader::InvalidUniform};
  32. };
  33. GL::Shader *m_basicShader = nullptr;
  34. GL::Shader *m_gridShader = nullptr;
  35. BasicUniforms m_basicUniforms;
  36. GridUniforms m_gridUniforms;
  37. private:
  38. GL::Backend *m_backend = nullptr;
  39. GL::ShaderCache *m_shaderCache = nullptr;
  40. void cacheBasicUniforms();
  41. void cacheGridUniforms();
  42. };
  43. } // namespace BackendPipelines
  44. } // namespace Render::GL