EscapeTimeVisualWidget.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef ESCAPETIMEVISUALWIDGET_H
  2. #define ESCAPETIMEVISUALWIDGET_H
  3. #include <QOpenGLWidget>
  4. #include <QOpenGLShaderProgram>
  5. #include "Bitmap.h"
  6. #include "Gradient.h"
  7. class EscapeTimeVisualWidget;
  8. class ETVImage
  9. {
  10. GLuint textureId;
  11. EscapeTimeVisualWidget& owner;
  12. public:
  13. ETVImage(EscapeTimeVisualWidget& owner,
  14. const Bitmap<float>& img);
  15. ETVImage(EscapeTimeVisualWidget& owner,
  16. QOpenGLContext* context,
  17. const Bitmap<float>& img);
  18. ~ETVImage(void);
  19. void draw(float x, float y, float w, float h,
  20. float tx = 0.0f, float ty = 0.0f,
  21. float tw = 1.0f, float th = 1.0f);
  22. };
  23. class RenderTextureProgram :
  24. public QOpenGLShaderProgram
  25. {
  26. int vertexLoc;
  27. int texCoordsLoc;
  28. int colorLocation;
  29. int texLoc;
  30. int gradLoc;
  31. int gradientScalerLoc;
  32. int maxIterationsLoc;
  33. public:
  34. inline RenderTextureProgram(QObject* parent) :
  35. QOpenGLShaderProgram{ parent } {}
  36. virtual bool link(void) override;
  37. inline int getVertexLoc(void) const { return vertexLoc; }
  38. inline int getTexCoordsLoc(void) const { return texCoordsLoc; }
  39. inline int getTexLoc(void) const { return texLoc; }
  40. inline int getGradLoc(void) const { return gradLoc; }
  41. inline int getGradientScalerLoc(void) const { return gradientScalerLoc; }
  42. inline int getMaxIterationsLoc(void) const { return maxIterationsLoc; }
  43. };
  44. class EscapeTimeVisualWidget :
  45. public QOpenGLWidget
  46. {
  47. Q_OBJECT
  48. friend class ETVImage;
  49. protected:
  50. QOpenGLShaderProgram* program;
  51. QOpenGLShaderProgram* renderTextures;
  52. QOpenGLShaderProgram* juliaPreviewer;
  53. GLuint gradientTextureId;
  54. float gradientTextureMax;
  55. float maxIterations;
  56. alm::Gradient gradient;
  57. bool gradientNeedsUpdate;
  58. float resolutionX;
  59. float resolutionY;
  60. GLuint tileFramebuffer;
  61. GLuint tileTexture;
  62. public:
  63. EscapeTimeVisualWidget(QWidget* parent = nullptr);
  64. void setGradient(alm::Gradient newGradient);
  65. const alm::Gradient& getGradient(void);
  66. virtual void initializeGL(void) override;
  67. virtual void resizeGL(int w, int h) override;
  68. virtual void paintGL(void) override;
  69. void drawJulia(float jx, float jy, QRectF area, bool drawSmooth);
  70. void setMaxIterationCutoff(float maxIter);
  71. void setResolutionX(int w);
  72. void setResolutionY(int h);
  73. int getResolutionX(void) const;
  74. int getResolutionY(void) const;
  75. private:
  76. void updateGradient(void);
  77. };
  78. #endif // ESCAPETIMEVISUALWIDGET_H