gl_shader.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include <QtCore/QString>
  9. #include <QOpenGLShader>
  10. class OpenGLShaderProgram;
  11. namespace Ui::GL {
  12. struct ShaderPart {
  13. QString header;
  14. QString body;
  15. };
  16. [[nodiscard]] QString VertexShader(const std::vector<ShaderPart> &parts);
  17. [[nodiscard]] QString FragmentShader(const std::vector<ShaderPart> &parts);
  18. [[nodiscard]] ShaderPart VertexPassTextureCoord(char prefix = 'v');
  19. [[nodiscard]] ShaderPart FragmentSampleARGB32Texture();
  20. [[nodiscard]] ShaderPart FragmentSampleYUV420Texture();
  21. [[nodiscard]] ShaderPart FragmentSampleNV12Texture();
  22. [[nodiscard]] ShaderPart FragmentGlobalOpacity();
  23. [[nodiscard]] ShaderPart VertexViewportTransform();
  24. [[nodiscard]] ShaderPart FragmentRoundCorners();
  25. [[nodiscard]] ShaderPart FragmentStaticColor();
  26. not_null<QOpenGLShader*> MakeShader(
  27. not_null<QOpenGLShaderProgram*> program,
  28. QOpenGLShader::ShaderType type,
  29. const QString &source);
  30. struct Program {
  31. not_null<QOpenGLShader*> vertex;
  32. not_null<QOpenGLShader*> fragment;
  33. };
  34. Program LinkProgram(
  35. not_null<QOpenGLShaderProgram*> program,
  36. std::variant<QString, not_null<QOpenGLShader*>> vertex,
  37. std::variant<QString, not_null<QOpenGLShader*>> fragment);
  38. } // namespace Ui::GL