Loading...
Searching...
No Matches
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>
13namespace Gfx::Filter
14{
15class Model final : public Process::ProcessModel
16{
17 SCORE_SERIALIZE_FRIENDS
18 PROCESS_METADATA_IMPL(Gfx::Filter::Model)
19 W_OBJECT(Model)
20
21public:
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
63private:
64 void loadPreset(const Process::Preset& preset) override;
65 Process::Preset savePreset() const noexcept override;
66 void setupIsf(
67 const isf::descriptor& d,
68 const ossia::flat_map<QString, ossia::value>& previous_values);
69 //void setupNormalShader();
70 QString prettyName() const noexcept override;
71
72 ShaderSource m_program;
73 ProcessedProgram m_processedProgram;
74};
75
76struct ProcessFactory final : Process::ProcessFactory_T<Gfx::Filter::Model>
77{
78public:
79 Process::Descriptor descriptor(QString) const noexcept override;
80};
81}
82
83#include <Scenario/Commands/ScriptEditCommand.hpp>
84
85namespace Gfx
86{
87class ChangeShader : public Scenario::EditScript<Filter::Model, Filter::Model::p_program>
88{
89 SCORE_COMMAND_DECL(CommandFactoryName(), ChangeShader, "Edit a script")
90public:
91 using EditScript::EditScript;
92};
93}
94
95namespace score
96{
97template <>
98struct StaticPropertyCommand<Gfx::Filter::Model::p_program> : Gfx::ChangeShader
99{
100 using ChangeShader::ChangeShader;
101};
102}
Definition score-plugin-gfx/Gfx/Filter/Process.hpp:88
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:16
The id_base_t class.
Definition Identifier.hpp:57
Binds the rendering pipeline to ossia processes.
Definition CameraDevice.cpp:24
Base toolkit upon which the software is built.
Definition Application.cpp:97
Definition score-plugin-gfx/Gfx/Filter/Process.hpp:77
Definition ShaderProgram.hpp:120
Definition ShaderProgram.hpp:27
Definition score-lib-process/Process/ProcessMetadata.hpp:37
Definition Preset.hpp:32
Definition ScriptProcess.hpp:14
Definition TimeValue.hpp:21
Definition PropertyCommand.hpp:112