water_pipeline.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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. cache_uniforms();
  29. return is_initialized();
  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::cache_uniforms() {
  38. cache_river_uniforms();
  39. cache_riverbank_uniforms();
  40. cache_bridge_uniforms();
  41. cache_road_uniforms();
  42. }
  43. auto WaterPipeline::is_initialized() const -> bool {
  44. return m_riverShader != nullptr && m_riverbankShader != nullptr &&
  45. m_bridgeShader != nullptr && m_road_shader != nullptr;
  46. }
  47. void WaterPipeline::cache_river_uniforms() {
  48. if (m_riverShader == nullptr) {
  49. return;
  50. }
  51. m_riverUniforms.model = m_riverShader->uniform_handle("model");
  52. m_riverUniforms.view = m_riverShader->uniform_handle("view");
  53. m_riverUniforms.projection = m_riverShader->uniform_handle("projection");
  54. m_riverUniforms.time = m_riverShader->uniform_handle("time");
  55. }
  56. void WaterPipeline::cache_riverbank_uniforms() {
  57. if (m_riverbankShader == nullptr) {
  58. return;
  59. }
  60. m_riverbankUniforms.model = m_riverbankShader->uniform_handle("model");
  61. m_riverbankUniforms.view = m_riverbankShader->uniform_handle("view");
  62. m_riverbankUniforms.projection =
  63. m_riverbankShader->uniform_handle("projection");
  64. m_riverbankUniforms.time = m_riverbankShader->uniform_handle("time");
  65. m_riverbankUniforms.visibility_texture =
  66. m_riverbankShader->uniform_handle("u_visibilityTex");
  67. m_riverbankUniforms.visibility_size =
  68. m_riverbankShader->uniform_handle("u_visibilitySize");
  69. m_riverbankUniforms.visibility_tile_size =
  70. m_riverbankShader->uniform_handle("u_visibilityTileSize");
  71. m_riverbankUniforms.explored_alpha =
  72. m_riverbankShader->uniform_handle("u_exploredAlpha");
  73. m_riverbankUniforms.has_visibility =
  74. m_riverbankShader->uniform_handle("u_hasVisibility");
  75. m_riverbankUniforms.segment_visibility =
  76. m_riverbankShader->uniform_handle("u_segmentVisibility");
  77. }
  78. void WaterPipeline::cache_bridge_uniforms() {
  79. if (m_bridgeShader == nullptr) {
  80. return;
  81. }
  82. m_bridgeUniforms.mvp = m_bridgeShader->uniform_handle("u_mvp");
  83. m_bridgeUniforms.model = m_bridgeShader->uniform_handle("u_model");
  84. m_bridgeUniforms.color = m_bridgeShader->uniform_handle("u_color");
  85. m_bridgeUniforms.light_direction =
  86. m_bridgeShader->uniform_handle("u_lightDirection");
  87. }
  88. void WaterPipeline::cache_road_uniforms() {
  89. if (m_road_shader == nullptr) {
  90. return;
  91. }
  92. m_road_uniforms.mvp = m_road_shader->uniform_handle("u_mvp");
  93. m_road_uniforms.model = m_road_shader->uniform_handle("u_model");
  94. m_road_uniforms.color = m_road_shader->uniform_handle("u_color");
  95. m_road_uniforms.light_direction =
  96. m_road_shader->uniform_handle("u_light_direction");
  97. m_road_uniforms.alpha = m_road_shader->uniform_handle("u_alpha");
  98. }
  99. } // namespace Render::GL::BackendPipelines