score-plugin-gfx/Gfx/Filter/Process.hpp
1 #pragma once
2 #include <Process/GenericProcessFactory.hpp>
3 #include <Process/Process.hpp>
4 #include <Process/Script/ScriptProcess.hpp>
5 
6 #include <Gfx/CommandFactory.hpp>
7 #include <Gfx/Filter/Metadata.hpp>
8 #include <Gfx/ShaderProgram.hpp>
9 
10 #include <isf.hpp>
11 
12 #include <array>
13 namespace Gfx::Filter
14 {
15 class Model final : public Process::ProcessModel
16 {
17  SCORE_SERIALIZE_FRIENDS
18  PROCESS_METADATA_IMPL(Gfx::Filter::Model)
19  W_OBJECT(Model)
20 
21 public:
22  static constexpr bool hasExternalUI() noexcept { return true; }
23 
24  Model(const TimeVal& duration, const Id<Process::ProcessModel>& id, QObject* parent);
25  Model(
26  const TimeVal& duration, const QString& init, const Id<Process::ProcessModel>& id,
27  QObject* parent);
28 
29  template <typename Impl>
30  Model(Impl& vis, QObject* parent)
31  : Process::ProcessModel{vis, parent}
32  {
33  vis.writeTo(*this);
34  }
35 
36  ~Model() override;
37 
38  bool validate(const ShaderSource& txt) const noexcept;
39 
40  const QString& vertex() const noexcept { return m_program.vertex; }
41  void setVertex(QString f);
42  void vertexChanged(const QString& v) W_SIGNAL(vertexChanged, v);
43  PROPERTY(QString, vertex READ vertex WRITE setVertex NOTIFY vertexChanged)
44 
45  const QString& fragment() const noexcept { return m_program.fragment; }
46  void setFragment(QString f);
47  void fragmentChanged(const QString& f) W_SIGNAL(fragmentChanged, f);
48  PROPERTY(QString, fragment READ fragment WRITE setFragment NOTIFY fragmentChanged)
49 
50  const ShaderSource& program() const noexcept { return m_program; }
51  [[nodiscard]] Process::ScriptChangeResult setProgram(const ShaderSource& f);
52  void programChanged() W_SIGNAL(programChanged);
53  PROPERTY(
54  Gfx::ShaderSource, program READ program WRITE setProgram NOTIFY programChanged)
55 
56  const ProcessedProgram& processedProgram() const noexcept
57  {
58  return m_processedProgram;
59  }
60 
61  void errorMessage(const QString& arg_2) const W_SIGNAL(errorMessage, arg_2);
62 
63 private:
64  void loadPreset(const Process::Preset& preset) override;
65  Process::Preset savePreset() const noexcept override;
66  void setupIsf(const isf::descriptor& d);
67  //void setupNormalShader();
68  QString prettyName() const noexcept override;
69 
70  ShaderSource m_program;
71  ProcessedProgram m_processedProgram;
72 };
73 
75 
76 }
77 
78 #include <Scenario/Commands/ScriptEditCommand.hpp>
79 
80 namespace Gfx
81 {
82 class ChangeShader : public Scenario::EditScript<Filter::Model, Filter::Model::p_program>
83 {
84  SCORE_COMMAND_DECL(CommandFactoryName(), ChangeShader, "Edit a script")
85 public:
86  using EditScript::EditScript;
87 };
88 }
89 
90 namespace score
91 {
92 template <>
93 struct StaticPropertyCommand<Gfx::Filter::Model::p_program> : Gfx::ChangeShader
94 {
95  using ChangeShader::ChangeShader;
96 };
97 }
Definition: score-plugin-gfx/Gfx/Filter/Process.hpp:83
Definition: score-plugin-gfx/Gfx/Filter/Process.hpp:16
Definition: GenericProcessFactory.hpp:15
The Process class.
Definition: score-lib-process/Process/Process.hpp:61
Definition: ScriptEditCommand.hpp:23
The id_base_t class.
Definition: Identifier.hpp:57
Binds the rendering pipeline to ossia processes.
Definition: CameraDevice.cpp:28
Base toolkit upon which the software is built.
Definition: Application.cpp:90
Definition: ShaderProgram.hpp:120
Definition: ShaderProgram.hpp:27
Definition: Preset.hpp:32
Definition: ScriptProcess.hpp:14
Definition: TimeValue.hpp:21
Definition: PropertyCommand.hpp:112