water_pipeline.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "water_pipeline.h"
  2. #include "../backend.h"
  3. #include "../shader_cache.h"
  4. #include <QDebug>
  5. #include <qglobal.h>
  6. namespace Render::GL::BackendPipelines {
  7. auto WaterPipeline::initialize() -> bool {
  8. if (m_shaderCache == nullptr) {
  9. qWarning() << "WaterPipeline::initialize: null ShaderCache";
  10. return false;
  11. }
  12. m_riverShader = m_shaderCache->get("river");
  13. m_riverbankShader = m_shaderCache->get("riverbank");
  14. m_bridgeShader = m_shaderCache->get("bridge");
  15. m_road_shader = m_shaderCache->get("road");
  16. if (m_riverShader == nullptr) {
  17. qWarning() << "WaterPipeline: Failed to load river shader";
  18. }
  19. if (m_riverbankShader == nullptr) {
  20. qWarning() << "WaterPipeline: Failed to load riverbank shader";
  21. }
  22. if (m_bridgeShader == nullptr) {
  23. qWarning() << "WaterPipeline: Failed to load bridge shader";
  24. }
  25. if (m_road_shader == nullptr) {
  26. qWarning() << "WaterPipeline: Failed to load road shader";
  27. }
  28. cacheUniforms();
  29. return isInitialized();
  30. }
  31. void WaterPipeline::shutdown() {
  32. m_riverShader = nullptr;
  33. m_riverbankShader = nullptr;
  34. m_bridgeShader = nullptr;
  35. m_road_shader = nullptr;
  36. }
  37. void WaterPipeline::cacheUniforms() {
  38. cacheRiverUniforms();
  39. cacheRiverbankUniforms();
  40. cacheBridgeUniforms();
  41. cache_road_uniforms();
  42. }
  43. auto WaterPipeline::isInitialized() const -> bool {
  44. return m_riverShader != nullptr && m_riverbankShader != nullptr &&
  45. m_bridgeShader != nullptr && m_road_shader != nullptr;
  46. }
  47. void WaterPipeline::cacheRiverUniforms() {
  48. if (m_riverShader == nullptr) {
  49. return;
  50. }
  51. m_riverUniforms.model = m_riverShader->uniformHandle("model");
  52. m_riverUniforms.view = m_riverShader->uniformHandle("view");
  53. m_riverUniforms.projection = m_riverShader->uniformHandle("projection");
  54. m_riverUniforms.time = m_riverShader->uniformHandle("time");
  55. }
  56. void WaterPipeline::cacheRiverbankUniforms() {
  57. if (m_riverbankShader == nullptr) {
  58. return;
  59. }
  60. m_riverbankUniforms.model = m_riverbankShader->uniformHandle("model");
  61. m_riverbankUniforms.view = m_riverbankShader->uniformHandle("view");
  62. m_riverbankUniforms.projection =
  63. m_riverbankShader->uniformHandle("projection");
  64. m_riverbankUniforms.time = m_riverbankShader->uniformHandle("time");
  65. }
  66. void WaterPipeline::cacheBridgeUniforms() {
  67. if (m_bridgeShader == nullptr) {
  68. return;
  69. }
  70. m_bridgeUniforms.mvp = m_bridgeShader->uniformHandle("u_mvp");
  71. m_bridgeUniforms.model = m_bridgeShader->uniformHandle("u_model");
  72. m_bridgeUniforms.color = m_bridgeShader->uniformHandle("u_color");
  73. m_bridgeUniforms.light_direction =
  74. m_bridgeShader->uniformHandle("u_lightDirection");
  75. }
  76. void WaterPipeline::cache_road_uniforms() {
  77. if (m_road_shader == nullptr) {
  78. return;
  79. }
  80. m_road_uniforms.mvp = m_road_shader->uniformHandle("u_mvp");
  81. m_road_uniforms.model = m_road_shader->uniformHandle("u_model");
  82. m_road_uniforms.view = m_road_shader->uniformHandle("u_view");
  83. m_road_uniforms.projection = m_road_shader->uniformHandle("u_projection");
  84. m_road_uniforms.color = m_road_shader->uniformHandle("u_color");
  85. m_road_uniforms.light_direction =
  86. m_road_shader->uniformHandle("u_light_direction");
  87. m_road_uniforms.alpha = m_road_shader->uniformHandle("u_alpha");
  88. }
  89. } // namespace Render::GL::BackendPipelines