IterationGenerator.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #ifndef MANDEL_ITERATIONGENERATOR_H
  2. #define MANDEL_ITERATIONGENERATOR_H
  3. #include "Generators.h"
  4. #include "ClGenerators.h"
  5. #include "IterationFormula.h"
  6. #include <utility>
  7. #include <complex>
  8. namespace mnd
  9. {
  10. class IterationGenerator;
  11. class NaiveGenerator;
  12. class CompiledGenerator;
  13. class CompiledClGenerator;
  14. // forward declaration
  15. struct ExecData;
  16. class MandelDevice;
  17. }
  18. class mnd::IterationGenerator : public mnd::MandelGenerator
  19. {
  20. protected:
  21. IterationFormula itf;
  22. public:
  23. IterationGenerator(IterationFormula itf, const mnd::Real& prec);
  24. };
  25. class mnd::NaiveGenerator : public mnd::IterationGenerator
  26. {
  27. public:
  28. NaiveGenerator(IterationFormula itf, const mnd::Real& prec);
  29. virtual void generate(const MandelInfo& info, float* data);
  30. private:
  31. std::complex<double> iterate(std::complex<double> z, std::complex<double> c);
  32. std::complex<double> calc(mnd::Expression& expr, std::complex<double> z, std::complex<double> c);
  33. };
  34. class mnd::CompiledGenerator : public mnd::MandelGenerator
  35. {
  36. std::unique_ptr<ExecData> execData;
  37. public:
  38. CompiledGenerator(std::unique_ptr<ExecData> execData);
  39. CompiledGenerator(CompiledGenerator&&);
  40. virtual ~CompiledGenerator(void);
  41. virtual void generate(const MandelInfo& info, float* data);
  42. std::string dump(void) const;
  43. };
  44. #ifdef WITH_OPENCL
  45. class mnd::CompiledClGenerator : public mnd::ClGeneratorFloat
  46. {
  47. public:
  48. CompiledClGenerator(const MandelDevice& device, const std::string& code);
  49. //virtual ~CompiledGenerator(void);
  50. //virtual void generate(const MandelInfo& info, float* data);
  51. virtual std::string getKernelCode(bool smooth) const override;
  52. virtual void generate(const MandelInfo& info, float* data);
  53. //std::string dump(void) const;
  54. };
  55. #endif // WITH_OPENCL
  56. #endif // MANDEL_ITERATIONGENERATOR_H