载入中...
搜索中...
未找到
Stylize.cpp
浏览该文件的文档.
1#include "stylize/Stylize.h"
2
10#include "stylize/StyleRecipe.h"
12#include "stylize/TrailEffect.h"
13
14#include "common/Exception.h"
15#include "graphics/Graphics.h"
16#include "graphics/Shader.h"
17#include "image/ImageData.h"
18
19#include <simplesquirrel/simplesquirrel.hpp>
20
21namespace eve::stylize {
22
25
27
30
31int Stylize::getStyleCount() const { return styleCount(); }
32
33std::string Stylize::getStyleId(int index) const { return styleIdAt(index); }
34
35bool Stylize::hasStyle(const std::string &style) const { return isKnownStyle(style); }
36
37bool Stylize::hasMeshStyle(const std::string &style) const {
38 return styleSupports(style, "mesh");
39}
40
41bool Stylize::supports(const std::string &style, const std::string &feature) const {
42 return styleSupports(style, feature);
43}
44
45int Stylize::getStyleParamCount(const std::string &style) const {
46 return styleParamCount(style);
47}
48
49std::string Stylize::getStyleParamName(const std::string &style, int index) const {
50 return styleParamName(style, index);
51}
52
53StylePass *Stylize::newPass(graphics::Graphics *gfx, const std::string &style) {
54 graphics::Shader *sh = createPostShader(gfx, style);
55 return new StylePass(style, sh);
56}
57
59 if (!shader) throw eve::Exception("Stylize.newPassFromShader: null shader");
60 return new StylePass(styleId, shader);
61}
62
64
66 return createPostShader(gfx, style);
67}
68
70 return createMeshShader(gfx, style);
71}
72
74 if (!hasStyle(style)) throw eve::Exception("Stylize.processImage: unknown style '%s'", style.c_str());
75 if (!supports(style, "cpu"))
76 throw eve::Exception("Stylize.processImage: style '%s' has no CPU technique", style.c_str());
77 return processImageCpu(src, style);
78}
79
80StyleInstance *Stylize::newInstance(const std::string &style) {
81 return new StyleInstance(style);
82}
83
85
86std::unique_ptr<MeshEffectInstance> Stylize::createMeshEffect(const std::string& style) {
87 return std::make_unique<MeshEffectInstance>(style);
88}
89
90std::unique_ptr<TrailEmitter> Stylize::createTrailEmitter() {
91 return std::make_unique<TrailEmitter>();
92}
93
94std::unique_ptr<MeshEffectRenderer> Stylize::createMeshEffectRenderer(graphics::Graphics& gfx) {
95 return std::make_unique<MeshEffectRenderer>(gfx);
96}
97
98std::unique_ptr<SkillMeshEffect> Stylize::createSkillMeshEffect(SkillMeshEffectKind kind) {
99 return std::make_unique<SkillMeshEffect>(kind);
100}
101
105
106std::unique_ptr<AttackVfxRuntime> Stylize::createAttackVfxRuntime() {
107 return std::make_unique<AttackVfxRuntime>();
108}
109
110void Stylize::expose(ssq::Table &table) {
111 auto cls = table.addClass(name, Stylize::create, false);
112 expose(cls);
113
114 auto pass = table.addClass<StylePass>(
115 "StylePass", std::function<StylePass *()>([]() -> StylePass * { return nullptr; }), true);
116 pass.addFunc("getStyle", &StylePass::getStyle);
117 pass.addFunc("hasParam", &StylePass::hasParam);
118 pass.addFunc("setFloat", &StylePass::setFloat);
119 pass.addFunc("getFloat", &StylePass::getFloat);
120 pass.addFunc("setTime", &StylePass::setTime);
121 pass.addFunc("getTime", &StylePass::getTime);
122 pass.addFunc("apply", &StylePass::apply);
123 pass.addFunc("applyCanvas", &StylePass::applyCanvas);
124 pass.addFunc("applyTo", &StylePass::applyTo);
125 pass.addFunc("applyCanvasTo", &StylePass::applyCanvasTo);
126 pass.addFunc("getShader", &StylePass::getShader);
127 pass.addFunc("getStage", &StylePass::getStage);
128 pass.addFunc("getPriority", &StylePass::getPriority);
129 pass.addFunc("setPriority", &StylePass::setPriority);
130 pass.addFunc("requiresInput", &StylePass::requiresInput);
131
132 auto instance = table.addClass<StyleInstance>(
133 "StyleInstance", std::function<StyleInstance *()>([]() -> StyleInstance * { return nullptr; }),
134 true);
135 instance.addFunc("getStyle", &StyleInstance::getStyle);
136 instance.addFunc("getStage", &StyleInstance::getStage);
137 instance.addFunc("getPriority", &StyleInstance::getPriority);
138 instance.addFunc("requiresInput", &StyleInstance::requiresInput);
139 instance.addFunc("getParamCount", &StyleInstance::getParamCount);
140 instance.addFunc("getParamName", &StyleInstance::getParamName);
141 instance.addFunc("getParamDefault", &StyleInstance::getParamDefault);
142 instance.addFunc("getParamMin", &StyleInstance::getParamMin);
143 instance.addFunc("getParamMax", &StyleInstance::getParamMax);
144 instance.addFunc("hasParam", &StyleInstance::hasParam);
145 instance.addFunc("isOverridden", &StyleInstance::isOverridden);
146 instance.addFunc("setFloat", &StyleInstance::setFloat);
147 instance.addFunc("getFloat", &StyleInstance::getFloat);
148 instance.addFunc("reset", &StyleInstance::reset);
149 instance.addFunc("resetAll", &StyleInstance::resetAll);
150 instance.addFunc("newPass", &StyleInstance::newPass);
151 instance.addFunc("newMeshShader", &StyleInstance::newMeshShader);
152
153 auto recipe = table.addClass<StyleRecipe>(
154 "StyleRecipe", std::function<StyleRecipe *()>([]() -> StyleRecipe * { return nullptr; }),
155 true);
156 recipe.addFunc("clear", &StyleRecipe::clear);
157 recipe.addFunc("add", &StyleRecipe::add);
158 recipe.addFunc("getStyleCount", &StyleRecipe::getStyleCount);
159 recipe.addFunc("getStyle", &StyleRecipe::getStyle);
160 recipe.addFunc("compile", &StyleRecipe::compile);
161 recipe.addFunc("isCompiled", &StyleRecipe::isCompiled);
162 recipe.addFunc("getStage", &StyleRecipe::getStage);
163 recipe.addFunc("apply", &StyleRecipe::apply);
164 recipe.addFunc("applyCanvas", &StyleRecipe::applyCanvas);
165
166 auto chain = table.addClass<StyleChain>(
167 "StyleChain", std::function<StyleChain *()>([]() -> StyleChain * { return nullptr; }), true);
168 chain.addFunc("clear", &StyleChain::clear);
169 chain.addFunc("add", &StyleChain::add);
170 chain.addFunc("getPassCount", &StyleChain::getPassCount);
171 chain.addFunc("getPass", &StyleChain::getPass);
172 chain.addFunc("apply", &StyleChain::apply);
173 chain.addFunc("applyCanvas", &StyleChain::applyCanvas);
174}
175
176void Stylize::expose(ssq::Class &cls) {
177 cls.addFunc("getName", &Stylize::getName);
178 cls.addFunc("getStyleCount", &Stylize::getStyleCount);
179 cls.addFunc("getStyleId", &Stylize::getStyleId);
180 cls.addFunc("hasStyle", &Stylize::hasStyle);
181 cls.addFunc("hasMeshStyle", &Stylize::hasMeshStyle);
182 cls.addFunc("supports", &Stylize::supports);
183 cls.addFunc("getStyleParamCount", &Stylize::getStyleParamCount);
184 cls.addFunc("getStyleParamName", &Stylize::getStyleParamName);
185 cls.addFunc("newInstance", &Stylize::newInstance);
186 cls.addFunc("newRecipe", &Stylize::newRecipe);
187 cls.addFunc("newPass", &Stylize::newPass);
188 cls.addFunc("newPassFromShader", &Stylize::newPassFromShader);
189 cls.addFunc("newChain", &Stylize::newChain);
190 cls.addFunc("newPostShader", &Stylize::newPostShader);
191 cls.addFunc("newMeshShader", &Stylize::newMeshShader);
192 cls.addFunc("processImage", &Stylize::processImage);
193}
194
195} // namespace eve::stylize
Pooled AttackVfx orchestration with optional layer executors.
HSQOBJECT cls
Definition ECS.cpp:21
TokenKind kind
std::string name
#define Module_IMPL(ModuleName, newExpr)
Definition Module.h:26
Shader * shader
uint32_t index
EVENGINE_API_FOUNDATION public API.
Definition Exception.h:13
virtual std::string getName() const =0
Returns the name.
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Custom GPU program.
Definition Shader.h:39
Represents raw pixel data.
Definition ImageData.h:38
static eve::Result< std::unique_ptr< MeshVfxAssetInstance > > create(const MeshVfxAsset &asset)
Build independent runtime state for every asset layer.
Ordered multi-pass stylize pipeline (extension point).
Definition StyleChain.h:29
int getPassCount() const
Returns the pass count.
Definition StyleChain.h:44
void applyCanvas(graphics::Graphics *gfx, graphics::Canvas *source, graphics::Canvas *dest, graphics::Canvas *temp=nullptr)
Applies canvas.
void apply(graphics::Graphics *gfx, graphics::Texture *source, graphics::Canvas *dest, graphics::Canvas *temp=nullptr)
Run passes in order into dest. When more than one pass is present, temp is required for ping-pong (sa...
StylePass * getPass(int index) const
Returns the pass.
void add(StylePass *pass)
Adds .
Mutable parameter instance of an immutable built-in style definition.
std::string getStyle() const
Returns the style.
graphics::Shader * newMeshShader(graphics::Graphics *gfx) const
Create a mesh technique shader and apply compatible overrides.
float getFloat(const std::string &name) const
Returns the float.
std::string getParamName(int index) const
Returns the param name.
bool hasParam(const std::string &name) const
True when param.
StylePass * newPass(graphics::Graphics *gfx) const
Create a post pass and apply this instance's parameter overrides.
void reset(const std::string &name)
Resets .
int getPriority() const
Returns the priority.
float getParamMin(const std::string &name) const
Returns the param min.
void setFloat(const std::string &name, float value)
Sets the float.
int getParamCount() const
Returns the param count.
std::string getStage() const
Returns the stage.
float getParamDefault(const std::string &name) const
Returns the param default.
bool isOverridden(const std::string &name) const
True when overridden.
bool requiresInput(const std::string &input) const
Requires input.
float getParamMax(const std::string &name) const
Returns the param max.
One stylized post-process pass bound to a style id (built-in or custom label). Draws a full-quad of t...
Definition StylePass.h:26
int getPriority() const
Returns the priority.
Definition StylePass.h:43
void applyCanvasTo(graphics::Graphics *gfx, graphics::Canvas *source, graphics::Canvas *dest)
Applies canvas to.
void setPriority(int priority)
Sets the priority.
Definition StylePass.h:45
bool requiresInput(const std::string &input) const
Requires input.
Definition StylePass.cpp:27
bool hasParam(const std::string &name) const
True when param.
Definition StylePass.cpp:36
float getFloat(const std::string &name) const
Returns the float.
Definition StylePass.cpp:45
void setFloat(const std::string &name, float value)
Sets the float.
Definition StylePass.cpp:40
std::string getStage() const
Returns the stage.
Definition StylePass.cpp:25
void applyTo(graphics::Graphics *gfx, graphics::Texture *source, graphics::Canvas *dest)
Apply into an explicit destination canvas (restores previous canvas bind). Preferred hook for chains ...
std::string getStyle() const
Returns the style.
Definition StylePass.h:37
void applyCanvas(graphics::Graphics *gfx, graphics::Canvas *source)
Applies canvas.
Definition StylePass.cpp:96
graphics::Shader * getShader() const
Returns the shader.
Definition StylePass.h:39
void apply(graphics::Graphics *gfx, graphics::Texture *source)
Apply style into the currently bound canvas / screen. Automatically uploads texel size + screen size ...
Definition StylePass.cpp:71
void setTime(float seconds)
Advance time-driven knobs (watercolor warp / ink jitter).
Definition StylePass.cpp:53
float getTime() const
Returns the time.
Definition StylePass.cpp:57
Compilable recipe of style instances sharing one pipeline stage.
Definition StyleRecipe.h:26
std::string getStage() const
Returns the stage.
Definition StyleRecipe.h:50
int getStyleCount() const
Returns the style count.
Definition StyleRecipe.h:41
StyleInstance * getStyle(int index) const
Returns the style.
bool isCompiled() const
True when compiled.
Definition StyleRecipe.h:48
void applyCanvas(graphics::Graphics *gfx, graphics::Canvas *source, graphics::Canvas *dest)
Applies canvas.
void compile(graphics::Graphics *gfx)
Compiles .
void apply(graphics::Graphics *gfx, graphics::Texture *source, graphics::Canvas *dest)
Applies .
void add(StyleInstance *instance)
Adds .
Stylized / NPR rendering module — stable public surface for future expansion.
Definition Stylize.h:54
eve::Result< std::unique_ptr< MeshVfxAssetInstance > > createMeshVfxAssetInstance(const MeshVfxAsset &asset)
Instantiate all runtime layers, reporting incompatible authored style parameters.
Definition Stylize.cpp:102
~Stylize() override
Stylize.
Definition Stylize.cpp:29
std::unique_ptr< MeshEffectInstance > createMeshEffect(const std::string &style)
Create an owned runtime mesh effect for a registered mesh style.
Definition Stylize.cpp:86
bool hasStyle(const std::string &style) const
True when style.
Definition Stylize.cpp:35
int getStyleCount() const
Returns the style count.
Definition Stylize.cpp:31
int getStyleParamCount(const std::string &style) const
Introspect built-in post param names (empty for unknown / custom-only ids).
Definition Stylize.cpp:45
std::unique_ptr< AttackVfxRuntime > createAttackVfxRuntime()
Create an empty AttackVfxRuntime pool for layered attack presentation recipes.
Definition Stylize.cpp:106
StylePass * newPass(graphics::Graphics *gfx, const std::string &style)
Post-process StylePass (shader owned by Graphics).
Definition Stylize.cpp:53
StylePass * newPassFromShader(const std::string &styleId, graphics::Shader *shader)
Wrap an already-created post Shader (custom SPIR-V / future registered styles). styleId is a label on...
Definition Stylize.cpp:58
graphics::Shader * newPostShader(graphics::Graphics *gfx, const std::string &style)
Raw post Shader with defaults (owned by Graphics).
Definition Stylize.cpp:65
graphics::Shader * newMeshShader(graphics::Graphics *gfx, const std::string &style)
Mesh3D Shader for cartoon/ink (owned by Graphics).
Definition Stylize.cpp:69
std::unique_ptr< MeshEffectRenderer > createMeshEffectRenderer(graphics::Graphics &gfx)
Create a render-thread adapter bound to one Graphics owner.
Definition Stylize.cpp:94
StyleInstance * newInstance(const std::string &style)
Create a mutable parameter instance of an immutable style definition.
Definition Stylize.cpp:80
bool hasMeshStyle(const std::string &style) const
True when mesh style.
Definition Stylize.cpp:37
std::unique_ptr< TrailEmitter > createTrailEmitter()
Create an owned CPU weapon-trail sampler with default settings.
Definition Stylize.cpp:90
std::unique_ptr< SkillMeshEffect > createSkillMeshEffect(SkillMeshEffectKind kind)
Create an owning runtime for a built-in gameplay mesh VFX recipe.
Definition Stylize.cpp:98
bool supports(const std::string &style, const std::string &feature) const
Feature query. Known features: "post" — StylePass / newPostShader "mesh" — newMeshShader "cpu" — proc...
Definition Stylize.cpp:41
std::string getStyleId(int index) const
Returns the style id.
Definition Stylize.cpp:33
std::string getStyleParamName(const std::string &style, int index) const
Returns the style param name.
Definition Stylize.cpp:49
image::ImageData * processImage(image::ImageData *src, const std::string &style)
CPU fallback stylization for ImageData (RGBA8). Caller owns returned ImageData*.
Definition Stylize.cpp:73
StyleRecipe * newRecipe()
Create an empty compilable multi-style recipe.
Definition Stylize.cpp:84
StyleChain * newChain()
Creates a chain. @ownership Caller deletes unless documented otherwise.
Definition Stylize.cpp:63
std::unordered_map< std::string, SkillDefinition > & table()
Definition Skill.cpp:65
graphics::Shader * createMeshShader(graphics::Graphics *gfx, const std::string &style)
Creates mesh shader.
bool styleSupports(const std::string &style, const std::string &feature)
Style supports.
std::string styleIdAt(int index)
Style id at.
graphics::Shader * createPostShader(graphics::Graphics *gfx, const std::string &style)
Creates post shader.
void unregisterStylizeAttackVfxExecutors()
int styleCount()
Style count.
int styleParamCount(const std::string &style)
Style param count.
void registerStylizeAttackVfxExecutors()
bool isKnownStyle(const std::string &style)
True when known style.
SkillMeshEffectKind
Built-in gameplay-oriented mesh VFX compositions.
std::string styleParamName(const std::string &style, int index)
Style param name.
image::ImageData * processImageCpu(image::ImageData *src, const std::string &style)
CPU NPR helpers — returns a new RGBA8 ImageData (caller owns).
Versioned, backend-neutral description of a real-time mesh effect.