banner_pipeline.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "banner_pipeline.h"
  2. #include "../backend.h"
  3. #include "../mesh.h"
  4. #include "../shader_cache.h"
  5. #include <QDebug>
  6. namespace Render::GL::BackendPipelines {
  7. auto BannerPipeline::initialize() -> bool {
  8. if (m_shaderCache == nullptr) {
  9. qWarning() << "BannerPipeline::initialize: null ShaderCache";
  10. return false;
  11. }
  12. initializeOpenGLFunctions();
  13. m_bannerShader = m_shaderCache->get("banner");
  14. if (m_bannerShader == nullptr) {
  15. qWarning() << "BannerPipeline: Failed to load banner shader";
  16. return false;
  17. }
  18. m_bannerMesh16 = GL::create_plane_mesh(1.0F, 1.0F, 16);
  19. m_bannerMesh8 = GL::create_plane_mesh(1.0F, 1.0F, 8);
  20. cache_uniforms();
  21. return is_initialized();
  22. }
  23. void BannerPipeline::shutdown() {
  24. m_bannerShader = nullptr;
  25. m_bannerMesh16.reset();
  26. m_bannerMesh8.reset();
  27. }
  28. void BannerPipeline::cache_uniforms() { cache_banner_uniforms(); }
  29. auto BannerPipeline::is_initialized() const -> bool {
  30. return m_bannerShader != nullptr && m_bannerMesh16 != nullptr;
  31. }
  32. auto BannerPipeline::get_banner_mesh(int subdivisions) -> GL::Mesh * {
  33. if (subdivisions >= 12) {
  34. return m_bannerMesh16.get();
  35. }
  36. return m_bannerMesh8.get();
  37. }
  38. void BannerPipeline::cache_banner_uniforms() {
  39. if (m_bannerShader == nullptr) {
  40. return;
  41. }
  42. m_bannerUniforms.mvp = m_bannerShader->uniform_handle("u_mvp");
  43. m_bannerUniforms.model = m_bannerShader->uniform_handle("u_model");
  44. m_bannerUniforms.time = m_bannerShader->uniform_handle("u_time");
  45. m_bannerUniforms.windStrength =
  46. m_bannerShader->uniform_handle("u_windStrength");
  47. m_bannerUniforms.color = m_bannerShader->uniform_handle("u_color");
  48. m_bannerUniforms.trimColor = m_bannerShader->uniform_handle("u_trimColor");
  49. m_bannerUniforms.texture = m_bannerShader->uniform_handle("u_texture");
  50. m_bannerUniforms.useTexture = m_bannerShader->uniform_handle("u_useTexture");
  51. m_bannerUniforms.alpha = m_bannerShader->uniform_handle("u_alpha");
  52. }
  53. } // namespace Render::GL::BackendPipelines